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>