Mercurial > hg > bitsyauth
comparison bitsyauth/__init__.py @ 5:2693b81f5960
fix redirection behaviour (though ultimately the whole class should be refactored not to store request on it)
author | k0s <k0scist@gmail.com> |
---|---|
date | Sat, 26 Dec 2009 22:56:56 -0500 |
parents | 4db4c02ed1ea |
children | 40fa556252a7 |
comparison
equal
deleted
inserted
replaced
4:4db4c02ed1ea | 5:2693b81f5960 |
---|---|
44 self.app = app | 44 self.app = app |
45 self.passwords = passwords | 45 self.passwords = passwords |
46 self.site = site or '' | 46 self.site = site or '' |
47 self.realm = realm or self.site | 47 self.realm = realm or self.site |
48 self.captcha = True | 48 self.captcha = True |
49 self.redirect_to = '/' # redirect to site root | |
50 self.urls = { 'login': '/login', 'join': '/join', } | 49 self.urls = { 'login': '/login', 'join': '/join', } |
51 self.keys = {} # keys, words for CAPTCHA request | 50 self.keys = {} # keys, words for CAPTCHA request |
52 | 51 |
53 self.content_type = { 'image_captcha': 'image/png', | 52 self.content_type = { 'image_captcha': 'image/png', |
54 'wav_captcha': 'audio/wav' } | 53 'wav_captcha': 'audio/wav' } |
68 | 67 |
69 def __call__(self, environ, start_response): | 68 def __call__(self, environ, start_response): |
70 | 69 |
71 self.request = Request(environ) | 70 self.request = Request(environ) |
72 self.request.path_info = self.request.path_info.rstrip('/') | 71 self.request.path_info = self.request.path_info.rstrip('/') |
72 self.redirect_to = self.request.script_name | |
73 | 73 |
74 # URLs intrinsic to BitsyAuth | 74 # URLs intrinsic to BitsyAuth |
75 if self.request.path_info == '/logout': | 75 if self.request.path_info == '/logout': |
76 response = self.redirect() | 76 response = self.redirect() |
77 return response(self.request.environ, start_response) | 77 return response(self.request.environ, start_response) |
166 post_func = getattr(self, handler + "_post") | 166 post_func = getattr(self, handler + "_post") |
167 errors = post_func() | 167 errors = post_func() |
168 if errors: | 168 if errors: |
169 return self.get_response(function(errors=errors, wrap=True)) | 169 return self.get_response(function(errors=errors, wrap=True)) |
170 else: | 170 else: |
171 return self.redirect("Welcome!") | 171 location = self.request.POST.get('referer') |
172 | 172 return self.redirect("Welcome!", location=location) |
173 def redirect(self, message=''): | 173 |
174 def redirect(self, message='', location=None): | |
174 """redirect from instrinsic urls""" | 175 """redirect from instrinsic urls""" |
175 return exc.HTTPSeeOther(message, location=self.redirect_to) | 176 return exc.HTTPSeeOther(message, location=location or self.redirect_to) |
176 | 177 |
177 def image_captcha(self, wrap=True): | 178 def image_captcha(self, wrap=True): |
178 """return data for the image""" | 179 """return data for the image""" |
179 key = self.request.path_info.split('/join/')[-1] | 180 key = self.request.path_info.split('/join/')[-1] |
180 key = int(key.split('.png')[0]) | 181 key = int(key.split('.png')[0]) |
188 if action is None: | 189 if action is None: |
189 action = self.urls['login'] | 190 action = self.urls['login'] |
190 form = Form(action='', submit='Login') | 191 form = Form(action='', submit='Login') |
191 form.add_element('textfield', 'Name', input_name='username') | 192 form.add_element('textfield', 'Name', input_name='username') |
192 form.add_element('password', 'Password', input_name='password') | 193 form.add_element('password', 'Password', input_name='password') |
193 if referer is not None: | 194 if referer: |
194 form.add_element('hidden', 'referer', value=referer) | 195 form.add_element('hidden', 'referer', value=referer) |
195 return form | 196 return form |
196 | 197 |
197 def login(self, errors=None, wrap=False, action=None): | 198 def login(self, errors=None, wrap=False, action=None): |
198 """login div""" | 199 """login div""" |
199 form = self.login_form(action=action) | 200 referer = None |
201 if hasattr(self, 'request'): | |
202 referer = self.request.referer | |
203 | |
204 form = self.login_form(action=action, referer=referer) | |
200 join = self.urls.get('join') | 205 join = self.urls.get('join') |
201 retval = form(errors) | 206 retval = form(errors) |
202 if join: | 207 if join: |
203 retval += '<br/>\n' + markup.a('join', href="%s" % join) | 208 retval += '<br/>\n' + markup.a('join', href="%s" % join) |
204 retval = markup.div(retval) | 209 retval = markup.div(retval) |