pyramid_cubicweb/login.py
changeset 11493 00e5cb9771c5
child 11494 79ce84750c18
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pyramid_cubicweb/login.py	Mon Aug 04 13:04:19 2014 +0200
@@ -0,0 +1,41 @@
+from pyramid import security
+from pyramid.httpexceptions import HTTPSeeOther
+
+import cubicweb
+
+from pyramid_cubicweb.core import render_view
+
+
+def login(request):
+    repo = request.registry['cubicweb.repository']
+
+    response = request.response
+    user_eid = None
+
+    if '__login' in request.params:
+        login = request.params['__login']
+        password = request.params['__password']
+
+        try:
+            with repo.internal_cnx() as cnx:
+                user = repo.authenticate_user(cnx, login, password=password)
+                user_eid = user.eid
+        except cubicweb.AuthenticationError:
+            raise
+
+    if user_eid is not None:
+        headers = security.remember(request, user_eid)
+
+        raise HTTPSeeOther(
+            request.params.get('postlogin_path', '/'),
+            headers=headers)
+
+        response.headerlist.extend(headers)
+
+    response.text = render_view(request, 'login')
+    return response
+
+
+def includeme(config):
+    config.add_route('login', '/login')
+    config.add_view(login, route_name='login')