author | Christophe de Vienne <christophe@unlish.com> |
Mon, 04 Aug 2014 13:06:32 +0200 | |
changeset 11494 | 79ce84750c18 |
parent 11493 | 00e5cb9771c5 |
child 11497 | 855219da7c70 |
permissions | -rw-r--r-- |
11493
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
1 |
from pyramid import security |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
2 |
from pyramid.httpexceptions import HTTPSeeOther |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
3 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
4 |
import cubicweb |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
5 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
6 |
from pyramid_cubicweb.core import render_view |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
7 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
8 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
9 |
def login(request): |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
10 |
repo = request.registry['cubicweb.repository'] |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
11 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
12 |
response = request.response |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
13 |
user_eid = None |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
14 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
15 |
if '__login' in request.params: |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
16 |
login = request.params['__login'] |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
17 |
password = request.params['__password'] |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
18 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
19 |
try: |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
20 |
with repo.internal_cnx() as cnx: |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
21 |
user = repo.authenticate_user(cnx, login, password=password) |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
22 |
user_eid = user.eid |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
23 |
except cubicweb.AuthenticationError: |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
24 |
raise |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
25 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
26 |
if user_eid is not None: |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
27 |
headers = security.remember(request, user_eid) |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
28 |
|
11494
79ce84750c18
If the postlogin_path is 'login', redirect to '/' instead
Christophe de Vienne <christophe@unlish.com>
parents:
11493
diff
changeset
|
29 |
new_path = request.params.get('postlogin_path', '/') |
11493
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
30 |
|
11494
79ce84750c18
If the postlogin_path is 'login', redirect to '/' instead
Christophe de Vienne <christophe@unlish.com>
parents:
11493
diff
changeset
|
31 |
if new_path == 'login': |
79ce84750c18
If the postlogin_path is 'login', redirect to '/' instead
Christophe de Vienne <christophe@unlish.com>
parents:
11493
diff
changeset
|
32 |
new_path = '/' |
79ce84750c18
If the postlogin_path is 'login', redirect to '/' instead
Christophe de Vienne <christophe@unlish.com>
parents:
11493
diff
changeset
|
33 |
|
79ce84750c18
If the postlogin_path is 'login', redirect to '/' instead
Christophe de Vienne <christophe@unlish.com>
parents:
11493
diff
changeset
|
34 |
raise HTTPSeeOther(new_path, headers=headers) |
11493
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
35 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
36 |
response.text = render_view(request, 'login') |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
37 |
return response |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
38 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
39 |
|
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
40 |
def includeme(config): |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
41 |
config.add_route('login', '/login') |
00e5cb9771c5
Put the login view in a separate module.
Christophe de Vienne <christophe@unlish.com>
parents:
diff
changeset
|
42 |
config.add_view(login, route_name='login') |