Browse Source

use post_load to deserialise object

Guénaël Muller 6 years ago
parent
commit
4719a871d8

+ 10 - 0
tracim/models/context_models.py View File

@@ -8,6 +8,16 @@ from tracim.models import User
8 8
 from tracim.models.auth import Profile
9 9
 
10 10
 
11
+class LoginCredentials(object):
12
+    """
13
+    Login credentials model for login
14
+    """
15
+
16
+    def __init__(self, email: str, password: str):
17
+        self.email = email
18
+        self.password = password
19
+
20
+
11 21
 class UserInContext(object):
12 22
     """
13 23
     Interface to get User data and User data related to context.

+ 9 - 0
tracim/views/core_api/schemas.py View File

@@ -1,5 +1,8 @@
1 1
 # coding=utf-8
2 2
 import marshmallow
3
+from marshmallow import post_load
4
+
5
+from tracim.models.context_models import LoginCredentials, UserInContext
3 6
 
4 7
 
5 8
 class ProfileSchema(marshmallow.Schema):
@@ -8,6 +11,7 @@ class ProfileSchema(marshmallow.Schema):
8 11
 
9 12
 
10 13
 class UserSchema(marshmallow.Schema):
14
+
11 15
     user_id = marshmallow.fields.Int(dump_only=True)
12 16
     email = marshmallow.fields.Email(required=True)
13 17
     display_name = marshmallow.fields.String()
@@ -29,9 +33,14 @@ class UserSchema(marshmallow.Schema):
29 33
 
30 34
 
31 35
 class BasicAuthSchema(marshmallow.Schema):
36
+
32 37
     email = marshmallow.fields.Email(required=True)
33 38
     password = marshmallow.fields.String(required=True, load_only=True)
34 39
 
40
+    @post_load
41
+    def make_login(self, data):
42
+        return LoginCredentials(**data)
43
+
35 44
 
36 45
 class LoginOutputHeaders(marshmallow.Schema):
37 46
     expire_after = marshmallow.fields.String()

+ 3 - 3
tracim/views/core_api/session_controller.py View File

@@ -30,15 +30,15 @@ class SessionController(Controller):
30 30
         """
31 31
         Logs user into the system
32 32
         """
33
-        email = request.json_body['email']
34
-        password = request.json_body['password']
33
+
34
+        login = hapic_data.body
35 35
         app_config = request.registry.settings['CFG']
36 36
         uapi = UserApi(
37 37
             None,
38 38
             session=request.dbsession,
39 39
             config=app_config,
40 40
         )
41
-        return uapi.authenticate_user(email, password)
41
+        return uapi.authenticate_user(login.email, login.password)
42 42
 
43 43
     @hapic.with_api_doc()
44 44
     @hapic.output_body(NoContentSchema(), default_http_code=HTTPStatus.NO_CONTENT)  # nopep8