Changeset 32:b25c89d693cf in documentViewer


Ignore:
Timestamp:
Apr 11, 2006, 5:27:57 PM (18 years ago)
Author:
casties
Branch:
default
Message:

version 0.2.3 - first version with access control!

  • defaults to open when no access info
  • uses any logged in user for local access
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • documentViewer.py

    r31 r32  
    1 
    2 genericDigilib="http://nausikaa2.rz-berlin.mpg.de/digitallibrary/"
    3 
    41from OFS.Folder import Folder
    52from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
    63from Products.PageTemplates.PageTemplateFile import PageTemplateFile
    74from AccessControl import ClassSecurityInfo
     5from AccessControl import getSecurityManager
    86from Globals import package_home
    97
     
    2927
    3028def getTextFromNode(nodename):
     29    if nodename is None:
     30        return ""
    3131    nodelist=nodename.childNodes
    3232    rc = ""
     
    3838import socket
    3939
    40 def urlopen(url):
     40def urlopen(url,timeout=2):
    4141        """urlopen mit timeout"""
    42         socket.setdefaulttimeout(2)
     42        socket.setdefaulttimeout(timeout)
    4343        ret=urllib.urlopen(url)
    4444        socket.setdefaulttimeout(5)
     
    7070
    7171   
    72     def __init__(self,id,imageViewerUrl,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=10):
     72    def __init__(self,id,imageViewerUrl,title="",digilibBaseUrl=None,thumbcols=2,thumbrows=10,authgroups="mpiwg"):
    7373        """init document viewer"""
    7474        self.id=id
     
    8181        self.thumbcols = thumbcols
    8282        self.thumbrows = thumbrows
     83        # authgroups is list of authorized groups (delimited by ,)
     84        self.authgroups = [s.strip().lower() for s in authgroups.split(',')]
    8385        # add template folder so we can always use template.something
    8486        self.manage_addFolder('template')
     
    132134            return style   
    133135       
     136    def accessOK(self, docinfo):
     137        """returns if access to the resource is granted"""
     138        access = docinfo.get('accessType', None)
     139        if access is None:
     140            # no information - no access (not yet)
     141            return True
     142        elif access == 'free':
     143            return True
     144       
     145        print "access: ", access, " authgroups: ", self.authgroups
     146        if access in self.authgroups:
     147            # local access OK
     148            user = getSecurityManager().getUser().getUserName()
     149            print "user: ", user
     150            return (user != "Anonymous User")
     151       
     152        zLOG.LOG("documentViewer (accessOK)", zLOG.INFO, "unknown access group %s"%access)
     153        return False
     154               
    134155       
    135156    def getDirinfoFromDigilib(self,path,docinfo=None):
     
    152173       
    153174        if params:
    154             docinfo['numPages'] = getTextFromNode(params[0])
     175            docinfo['numPages'] = int(getTextFromNode(params[0]))
    155176        else:
    156177            docinfo['numPages'] = 0
    157178                       
    158179        return docinfo
    159            
    160    
     180   
     181           
     182    def getAuthinfoFromIndexMeta(self,path,docinfo=None,dom=None):
     183        """gets authorization info from the index.meta file at url or given by dom"""
     184        zLOG.LOG("documentViewer (getbibinfofromindexmeta)", zLOG.INFO,"path: %s"%(path))
     185       
     186        access = None
     187       
     188        if docinfo is None:
     189            docinfo = {}
     190           
     191        if dom is None:
     192            server=self.digilibBaseUrl+"/servlet/Texter?fn="
     193            path="/".join(path.split("/")[0:-1])
     194            metaUrl=server+path+"/index.meta"
     195            try:
     196                dom = NonvalidatingReader.parseUri(metaUrl)
     197            except:
     198                return docinfo
     199           
     200        acctype = dom.xpath("//access-conditions/access/@type")
     201        if acctype and (len(acctype)>0):
     202            access=acctype[0].value
     203            if access == 'group':
     204                access = getTextFromNode(dom.xpath("//access-conditions/access/name")[0]).lower()
     205           
     206        docinfo['accessType'] = access
     207        return docinfo
     208   
     209       
    161210    def getBibinfoFromIndexMeta(self,path,docinfo=None,dom=None):
    162211        """gets bibliographical info from the index.meta file at url or given by dom"""
     
    184233        bibmap=metaData.generateMappingForType(bibtype)
    185234        print "bibmap: ", bibmap, " for: ", bibtype
     235        # if there is no mapping bibmap is empty (mapping sometimes has empty fields)
    186236        if len(bibmap) > 0 and len(bibmap['author'][0]) > 0:
    187237            docinfo['author']=getTextFromNode(dom.xpath("//bib/%s"%bibmap['author'][0])[0])
     
    192242
    193243       
    194     def getDocinfoFromTextTool(self,url,docinfo=None):
     244    def getDocinfoFromTextTool(self,url,dom=None,docinfo=None):
    195245       """parse texttool tag in index meta"""
    196246       zLOG.LOG("documentViewer (getdocinfofromtexttool)", zLOG.INFO,"url: %s"%(url))
     
    198248           docinfo = {}
    199249           
    200        try:
    201            dom = NonvalidatingReader.parseUri(url)
    202        except:
    203            zLOG.LOG("documentViewer (parseUrlTexttool)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
    204            raise IOError("Unable to get texttool info from %s"%(url))
     250       if dom is None:
     251           try:
     252               dom = NonvalidatingReader.parseUri(url)
     253           except:
     254               zLOG.LOG("documentViewer (parseUrlTexttool)", zLOG.INFO,"%s (%s)"%sys.exc_info()[0:2])
     255               raise IOError("Unable to get texttool info from %s"%(url))
     256       
     257       archiveNames=dom.xpath("//resource/name")
     258       if archiveNames and (len(archiveNames)>0):
     259           archiveName=getTextFromNode(archiveNames[0])
    205260       
    206261       archivePaths=dom.xpath("//resource/archive-path")
    207262       if archivePaths and (len(archivePaths)>0):
    208263           archivePath=getTextFromNode(archivePaths[0])
     264           # clean up archive path
     265           if archivePath[0] != '/':
     266               archivePath = '/' + archivePath
     267           if not archivePath.endswith(archiveName):
     268               archivePath += "/" + archiveName
    209269       else:
    210270           archivePath=None
     
    217277           
    218278       if image and archivePath:
     279           print "image: ", image, " archivepath: ", archivePath
    219280           image=os.path.join(archivePath,image)
    220281           image=image.replace("/mpiwg/online",'')
     
    234295                     
    235296       docinfo = self.getBibinfoFromIndexMeta(url,docinfo=docinfo,dom=dom)
     297       docinfo = self.getAuthinfoFromIndexMeta(url,docinfo=docinfo,dom=dom)
    236298       return docinfo
    237299   
     
    249311       
    250312        docinfo = self.getBibinfoFromIndexMeta(path,docinfo=docinfo)
     313        docinfo = self.getAuthinfoFromIndexMeta(path,docinfo=docinfo)
    251314        return docinfo
    252315   
     
    361424            return None
    362425   
    363     def changeDocumentViewer(self,imageViewerUrl,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=10,RESPONSE=None):
     426    def changeDocumentViewer(self,imageViewerUrl,title="",digilibBaseUrl=None,thumbrows=2,thumbcols=10,authgroups='mpiwg',RESPONSE=None):
    364427        """init document viewer"""
    365428        self.title=title
     
    368431        self.thumbrows = thumbrows
    369432        self.thumbcols = thumbcols
    370        
     433        self.authgroups = [s.strip().lower() for s in authgroups.split(',')]
    371434        if RESPONSE is not None:
    372435            RESPONSE.redirect('manage_main')
  • version.txt

    r31 r32  
    1 DocumentViewer 0.2.2
     1DocumentViewer 0.2.3
  • zpt/thumbs_main.zpt

    r25 r32  
    1111      tal:content="python:(grp*grpsize+1)"/>
    1212  </select>
    13   <span tal:condition="python:(start+grpsize<docinfo['numPages'])">
     13  <span tal:condition="python:(start+grpsize<int(docinfo['numPages']))">
    1414    <a tal:attributes="href python:here.getLink(param='start',val=start+grpsize)">&gt;</a>
    1515  </span>
Note: See TracChangeset for help on using the changeset viewer.