Quellcode durchsuchen

Better session api spec : POST instead of GET, Json body instead of query params for login

Guénaël Muller vor 6 Jahren
Ursprung
Commit
2420e62485
2 geänderte Dateien mit 23 neuen und 16 gelöschten Zeilen
  1. 6 5
      tracim/tests/functional/test_session.py
  2. 17 11
      tracim/views/core_api/session_controller.py

+ 6 - 5
tracim/tests/functional/test_session.py Datei anzeigen

@@ -7,6 +7,7 @@ from tracim.tests import FunctionalTest
7 7
 class TestLogoutEndpoint(FunctionalTest):
8 8
 
9 9
     def test_logout(self):
10
+        res = self.testapp.post_json('/api/v2/sessions/logout', status=204)
10 11
         res = self.testapp.get('/api/v2/sessions/logout', status=204)
11 12
 
12 13
 
@@ -17,10 +18,10 @@ class TestLoginEndpoint(FunctionalTest):
17 18
             'email': 'admin@admin.admin',
18 19
             'password': 'admin@admin.admin',
19 20
         }
20
-        res = self.testapp.get(
21
+        res = self.testapp.post_json(
21 22
             '/api/v2/sessions/login',
23
+            params=params,
22 24
             status=204,
23
-            params=params
24 25
         )
25 26
 
26 27
     def test_bad_password(self):
@@ -28,7 +29,7 @@ class TestLoginEndpoint(FunctionalTest):
28 29
             'email': 'admin@admin.admin',
29 30
             'password': 'bad_password',
30 31
         }
31
-        res = self.testapp.get(
32
+        res = self.testapp.post_json(
32 33
             '/api/v2/sessions/login',
33 34
             status=400,
34 35
             params=params,
@@ -39,14 +40,14 @@ class TestLoginEndpoint(FunctionalTest):
39 40
             'email': 'unknown_user@unknown.unknown',
40 41
             'password': 'bad_password',
41 42
         }
42
-        res = self.testapp.get(
43
+        res = self.testapp.post_json(
43 44
             '/api/v2/sessions/login',
44 45
             status=400,
45 46
             params=params,
46 47
         )
47 48
 
48 49
     def test_uncomplete(self):
49
-        res = self.testapp.get('/api/v2/sessions/login', status=400)
50
+        res = self.testapp.post_json('/api/v2/sessions/login', status=400)
50 51
 
51 52
 
52 53
 class TestWhoamiEndpoint(FunctionalTest):

+ 17 - 11
tracim/views/core_api/session_controller.py Datei anzeigen

@@ -29,7 +29,7 @@ class SessionController(Controller):
29 29
 
30 30
     @hapic.with_api_doc()
31 31
     @hapic.input_headers(LoginOutputHeaders())
32
-    @hapic.input_query(BasicAuthSchema())
32
+    @hapic.input_body(BasicAuthSchema())
33 33
     @hapic.handle_exception(LoginFailed, http_code=HTTPStatus.BAD_REQUEST)
34 34
     # TODO - G.M - 17-04-2018 - fix output header ?
35 35
     # @hapic.output_headers()
@@ -41,10 +41,8 @@ class SessionController(Controller):
41 41
         """
42 42
         Logs user into the system
43 43
         """
44
-        email = request.params['email']
45
-        password = request.params['password']
46
-        if not (email and password):
47
-            raise Exception
44
+        email = request.json_body['email']
45
+        password = request.json_body['password']
48 46
         app_config = request.registry.settings['CFG']
49 47
         try:
50 48
             uapi = UserApi(
@@ -99,7 +97,7 @@ class SessionController(Controller):
99 97
         configurator.add_route(
100 98
             'login',
101 99
             os.path.join(BASE_API_V2, 'sessions', 'login'),
102
-            request_method='GET'
100
+            request_method='POST',
103 101
         )
104 102
         configurator.add_view(
105 103
             self.login,
@@ -107,20 +105,28 @@ class SessionController(Controller):
107 105
         )
108 106
         # Logout
109 107
         configurator.add_route(
110
-            'logout',
108
+            'post_logout',
111 109
             os.path.join(BASE_API_V2, 'sessions', 'logout'),
112
-            request_method='GET'
110
+            request_method='POST',
111
+        )
112
+        configurator.add_route(
113
+            'get_logout',
114
+            os.path.join(BASE_API_V2, 'sessions', 'logout'),
115
+            request_method='GET',
116
+        )
117
+        configurator.add_view(
118
+            self.logout,
119
+            route_name='get_logout',
113 120
         )
114
-
115 121
         configurator.add_view(
116 122
             self.logout,
117
-            route_name='logout',
123
+            route_name='post_logout',
118 124
         )
119 125
         # Whoami
120 126
         configurator.add_route(
121 127
             'whoami',
122 128
             os.path.join(BASE_API_V2, 'sessions', 'whoami'),
123
-            request_method='GET'
129
+            request_method='GET',
124 130
         )
125 131
         configurator.add_view(
126 132
             self.whoami,