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>