Annotation of IntranetUserFolder/IntranetUserFolder.py, revision 1.1.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>