Steve Piercy
2017-11-04 30ffd3dba8b181bbe023c6a015680f3a09573753
commit | author | age
b1b922 1 from pyramid.httpexceptions import HTTPFound
0dcd56 2 from pyramid.security import (
CM 3     remember,
4     forget,
5     )
6
b1b922 7 from pyramid.view import (
PE 8     view_config,
9     view_defaults
10     )
11
29d12c 12 from .security import (
KY 13     USERS,
14     check_password
15 )
b1b922 16
PE 17
18 @view_defaults(renderer='home.pt')
19 class TutorialViews:
20     def __init__(self, request):
21         self.request = request
675e0d 22         self.logged_in = request.authenticated_userid
b1b922 23
PE 24     @view_config(route_name='home')
25     def home(self):
26         return {'name': 'Home View'}
27
28     @view_config(route_name='hello')
29     def hello(self):
30         return {'name': 'Hello View'}
31
32     @view_config(route_name='login', renderer='login.pt')
33     def login(self):
34         request = self.request
35         login_url = request.route_url('login')
36         referrer = request.url
37         if referrer == login_url:
38             referrer = '/'  # never use login form itself as came_from
39         came_from = request.params.get('came_from', referrer)
40         message = ''
41         login = ''
42         password = ''
43         if 'form.submitted' in request.params:
44             login = request.params['login']
45             password = request.params['password']
906cee 46             hashed_pw = USERS.get(login)
S 47             if hashed_pw and check_password(password, hashed_pw):
0dcd56 48                 headers = remember(request, login)
CM 49                 return HTTPFound(location=came_from,
50                                  headers=headers)
b1b922 51             message = 'Failed login'
PE 52
53         return dict(
54             name='Login',
55             message=message,
56             url=request.application_url + '/login',
57             came_from=came_from,
58             login=login,
59             password=password,
60         )
61
62     @view_config(route_name='logout')
63     def logout(self):
64         request = self.request
0dcd56 65         headers = forget(request)
b1b922 66         url = request.route_url('home')
0dcd56 67         return HTTPFound(location=url,
CM 68                          headers=headers)