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)