--- ECHO_content/ECHO_collection.py 2004/05/13 19:11:06 1.84 +++ ECHO_content/ECHO_collection.py 2004/05/13 20:47:41 1.85 @@ -19,6 +19,7 @@ from Globals import DTMLFile from OFS.Folder import Folder from OFS.SimpleItem import SimpleItem from AccessControl import ClassSecurityInfo +from AccessControl.User import UserFolder from Globals import InitializeClass from Globals import DTMLFile import Globals @@ -1447,11 +1448,128 @@ def manage_addECHO_group(self,id,title,l RESPONSE.redirect('manage_main') Globals.InitializeClass(ECHO_group) + + +class ECHO_userFolder(UserFolder): + """User folder for Intranet""" + _domain_auth_mode=1 # Identification via domain + meta_type="ECHO_userFolder" + def authenticate(self, name, password, request): + emergency = self._emergency_user + if name is None: + return None + if emergency and name==emergency.getUserName(): + user = emergency + else: + user = self.getUser(name) + if user is not None and user.authenticate(password, request): + return user + else: + return None + + def domainSpecMatch(self,spec, request): + host='' + addr='' + + # Fast exit for the match-all case + if len(spec) == 1 and spec[0] == '*': + return 1 + + if request.has_key('REMOTE_HOST'): + host=request['REMOTE_HOST'] + + if request.has_key('REMOTE_ADDR'): + addr=request['REMOTE_ADDR'] + + if request.has_key('HTTP_X_FORWARDED_FOR'): + addr=request['HTTP_X_FORWARDED_FOR'] + + + if not host and not addr: + return 0 + + if not host: + try: host=socket.gethostbyaddr(addr)[0] + except: pass + if not addr: + try: addr=socket.gethostbyname(host) + except: pass + + + _host=host.split('.') + _addr=addr.split('.') + _hlen=len(_host) + _alen=len(_addr) + + for ob in spec: + sz=len(ob) + _ob=ob.split('.') + _sz=len(_ob) + + mo = addr_match(ob) + if mo is not None: + if mo.end(0)==sz: + fail=0 + for i in range(_sz): + a=_addr[i] + o=_ob[i] + if (o != a) and (o != '*'): + fail=1 + break + if fail: + continue + return 1 + + mo = host_match(ob) + if mo is not None: + if mo.end(0)==sz: + if _hlen < _sz: + continue + elif _hlen > _sz: + _item=_host[-_sz:] + else: + _item=_host + fail=0 + for i in range(_sz): + h=_item[i] + o=_ob[i] + if (o != h) and (o != '*'): + fail=1 + break + if fail: + continue + return 1 + return 0 + +Globals.default__class_init__(ECHO_userFolder) + + + +def manage_addECHO_userFolder(self,dtself=None,REQUEST=None,**ignored): + """add a user folder """ + f=ECHO_userFolder() + self=self.this() + try: self._setObject('acl_users', f) + except: return MessageDialog( + title ='Item Exists', + message='This object already contains a User Folder', + action ='%s/manage_main' % REQUEST['URL1']) + self.__allow_groups__=f + if REQUEST is not None: + REQUEST['RESPONSE'].redirect(self.absolute_url()+'/manage_main') + +def manage_addECHO_userFolderForm(self): + """add a user folder form""" + return manage_addECHO_userFolder(self) + class ECHO_root(Folder,Persistent,Implicit): """ECHO Root Folder""" - meta_type="ECHO_root" + security=ClassSecurityInfo() + + meta_type="ECHO_root" + def getImageTag(self): """needed by main_template"""