Annotation of IntranetUserFolder/IntranetUserFolder.py, revision 1.1

1.1     ! dwinter     1: """User Folder Extension, tests now also ip number of the host where the original call comes from in case of redirects"""
        !             2: 
        !             3: import Globals
        !             4: from AccessControl.User import UserFolder
        !             5: from Globals import MessageDialog
        !             6: 
        !             7: class IntranetUserFolder(UserFolder):
        !             8:    """User folder for Intranet"""
        !             9:    _domain_auth_mode=1 # Identification via domain
        !            10:    meta_type="IntranetUserFolder"
        !            11:    
        !            12:    def authenticate(self, name, password, request):
        !            13:        emergency = self._emergency_user
        !            14:        if name is None:
        !            15:            return None
        !            16:        if emergency and name==emergency.getUserName():
        !            17:            user = emergency
        !            18:        else:
        !            19:            user = self.getUser(name)
        !            20:        if user is not None and user.authenticate(password, request):
        !            21:            return user
        !            22:        else:
        !            23:            return None
        !            24: 
        !            25:    def domainSpecMatch(self,spec, request):
        !            26:        host=''
        !            27:        addr=''
        !            28: 
        !            29:        # Fast exit for the match-all case
        !            30:        if len(spec) == 1 and spec[0] == '*':
        !            31:        return 1
        !            32: 
        !            33:        if request.has_key('REMOTE_HOST'):
        !            34:        host=request['REMOTE_HOST']
        !            35: 
        !            36:        if request.has_key('REMOTE_ADDR'):
        !            37:        addr=request['REMOTE_ADDR']
        !            38: 
        !            39:        if request.has_key('HTTP_X_FORWARDED_FOR'):
        !            40:        addr=request['HTTP_X_FORWARDED_FOR']
        !            41: 
        !            42:        
        !            43:        if not host and not addr:
        !            44:        return 0
        !            45: 
        !            46:        if not host:
        !            47:        try:    host=socket.gethostbyaddr(addr)[0]
        !            48:        except: pass
        !            49:        if not addr:
        !            50:        try:    addr=socket.gethostbyname(host)
        !            51:        except: pass
        !            52: 
        !            53: 
        !            54:        _host=host.split('.')
        !            55:        _addr=addr.split('.')
        !            56:        _hlen=len(_host)
        !            57:        _alen=len(_addr)
        !            58: 
        !            59:        for ob in spec:
        !            60:        sz=len(ob)
        !            61:        _ob=ob.split('.')
        !            62:        _sz=len(_ob)
        !            63: 
        !            64:        mo = addr_match(ob)
        !            65:        if mo is not None:
        !            66:            if mo.end(0)==sz:
        !            67:            fail=0
        !            68:            for i in range(_sz):
        !            69:                a=_addr[i]
        !            70:                o=_ob[i]
        !            71:                if (o != a) and (o != '*'):
        !            72:                fail=1
        !            73:                break
        !            74:            if fail:
        !            75:                continue
        !            76:            return 1
        !            77: 
        !            78:        mo = host_match(ob)
        !            79:        if mo is not None:
        !            80:            if mo.end(0)==sz:
        !            81:            if _hlen < _sz:
        !            82:                continue
        !            83:            elif _hlen > _sz:
        !            84:                _item=_host[-_sz:]
        !            85:            else:
        !            86:                _item=_host
        !            87:            fail=0
        !            88:            for i in range(_sz):
        !            89:                h=_item[i]
        !            90:                o=_ob[i]
        !            91:                if (o != h) and (o != '*'):
        !            92:                fail=1
        !            93:                break
        !            94:            if fail:
        !            95:                continue
        !            96:            return 1
        !            97:        return 0
        !            98: 
        !            99: Globals.default__class_init__(IntranetUserFolder)
        !           100: 
        !           101: 
        !           102: 
        !           103: def manage_addIntranetUserFolder(self,dtself=None,REQUEST=None,**ignored):
        !           104:     """add a user folder """
        !           105:     f=IntranetUserFolder()
        !           106:     self=self.this()
        !           107:     try:    self._setObject('acl_users', f)
        !           108:     except: return MessageDialog(
        !           109:                    title  ='Item Exists',
        !           110:                    message='This object already contains a User Folder',
        !           111:                    action ='%s/manage_main' % REQUEST['URL1'])
        !           112:     self.__allow_groups__=f
        !           113:     if REQUEST is not None:
        !           114:         REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main')
        !           115: 
        !           116: def manage_addIntranetUserFolderForm(self):
        !           117:    """add a user folder form"""
        !           118:    return manage_addIntranetUserFolder(self,REQUEST=self.REQUEST)

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>