File:  [Repository] / IntranetUserFolder / IntranetUserFolder.py
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Fri May 14 09:52:04 2004 UTC (20 years, 1 month ago) by dwinter
Branches: dwinter
CVS tags: first
first

    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>