|
@@ -42,7 +42,7 @@ class TracimRequest(Request):
|
42
|
42
|
|
43
|
43
|
# User found from request headers, content, distinct from authenticated
|
44
|
44
|
# user
|
45
|
|
- self._user_candidate = None # type: User
|
|
45
|
+ self._candidate_user = None # type: User
|
46
|
46
|
|
47
|
47
|
# INFO - G.M - 18-05-2018 - Close db at the end of the request
|
48
|
48
|
self.add_finished_callback(self._cleanup)
|
|
@@ -56,7 +56,7 @@ class TracimRequest(Request):
|
56
|
56
|
:return: Workspace of the request
|
57
|
57
|
"""
|
58
|
58
|
if self._current_workspace is None:
|
59
|
|
- self.current_workspace = get_workspace(self.current_user, self)
|
|
59
|
+ self.current_workspace = self._get_workspace(self.current_user, self)
|
60
|
60
|
return self._current_workspace
|
61
|
61
|
|
62
|
62
|
@current_workspace.setter
|
|
@@ -78,7 +78,7 @@ class TracimRequest(Request):
|
78
|
78
|
Get user from authentication mecanism.
|
79
|
79
|
"""
|
80
|
80
|
if self._current_user is None:
|
81
|
|
- self.current_user = get_auth_safe_user(self)
|
|
81
|
+ self.current_user = self._get_auth_safe_user(self)
|
82
|
82
|
return self._current_user
|
83
|
83
|
|
84
|
84
|
@current_user.setter
|
|
@@ -98,9 +98,9 @@ class TracimRequest(Request):
|
98
|
98
|
can help user to know about who one page is about in
|
99
|
99
|
a similar way as current_workspace.
|
100
|
100
|
"""
|
101
|
|
- if self._user_candidate is None:
|
102
|
|
- self.candidate_user = get_candidate_user(self)
|
103
|
|
- return self._user_candidate
|
|
101
|
+ if self._candidate_user is None:
|
|
102
|
+ self.candidate_user = self._get_candidate_user(self)
|
|
103
|
+ return self._candidate_user
|
104
|
104
|
|
105
|
105
|
def _cleanup(self, request: 'TracimRequest') -> None:
|
106
|
106
|
"""
|
|
@@ -118,86 +118,87 @@ class TracimRequest(Request):
|
118
|
118
|
|
119
|
119
|
@candidate_user.setter
|
120
|
120
|
def candidate_user(self, user: User) -> None:
|
121
|
|
- if self._user_candidate is not None:
|
|
121
|
+ if self._candidate_user is not None:
|
122
|
122
|
raise ImmutableAttribute(
|
123
|
123
|
"Can't modify already setted candidate_user"
|
124
|
124
|
)
|
125
|
|
- self._user_candidate = user
|
126
|
|
-###
|
127
|
|
-# Utils for TracimRequest
|
128
|
|
-###
|
|
125
|
+ self._candidate_user = user
|
129
|
126
|
|
|
127
|
+ ###
|
|
128
|
+ # Utils for TracimRequest
|
|
129
|
+ ###
|
130
|
130
|
|
131
|
|
-def get_candidate_user(
|
132
|
|
- request: TracimRequest
|
133
|
|
-) -> User:
|
134
|
|
- """
|
135
|
|
- Get candidate user
|
136
|
|
- :param request: pyramid request
|
137
|
|
- :return: user found from header/body
|
138
|
|
- """
|
139
|
|
- app_config = request.registry.settings['CFG']
|
140
|
|
- uapi = UserApi(None, session=request.dbsession, config=app_config)
|
141
|
|
-
|
142
|
|
- try:
|
143
|
|
- login = None
|
144
|
|
- if 'user_id' in request.matchdict:
|
145
|
|
- login = request.matchdict['user_id']
|
146
|
|
- if not login:
|
147
|
|
- raise UserNotFoundInTracimRequest('You request a candidate user but the context not permit to found one') # nopep8
|
148
|
|
- user = uapi.get_one(login)
|
149
|
|
- except UserNotFoundInTracimRequest as exc:
|
150
|
|
- raise UserDoesNotExist('User {} not found'.format(login)) from exc
|
151
|
|
- return user
|
152
|
|
-
|
153
|
|
-
|
154
|
|
-def get_auth_safe_user(
|
155
|
|
- request: TracimRequest,
|
156
|
|
-) -> User:
|
157
|
|
- """
|
158
|
|
- Get current pyramid authenticated user from request
|
159
|
|
- :param request: pyramid request
|
160
|
|
- :return: current authenticated user
|
161
|
|
- """
|
162
|
|
- app_config = request.registry.settings['CFG']
|
163
|
|
- uapi = UserApi(None, session=request.dbsession, config=app_config)
|
164
|
|
- try:
|
165
|
|
- login = request.authenticated_userid
|
166
|
|
- if not login:
|
167
|
|
- raise UserNotFoundInTracimRequest('You request a current user but the context not permit to found one') # nopep8
|
168
|
|
- user = uapi.get_one_by_email(login)
|
169
|
|
- except (UserDoesNotExist, UserNotFoundInTracimRequest) as exc:
|
170
|
|
- raise NotAuthenticated('User {} not found'.format(login)) from exc
|
171
|
|
- return user
|
172
|
|
-
|
173
|
|
-
|
174
|
|
-def get_workspace(
|
175
|
|
- user: User,
|
176
|
|
- request: TracimRequest
|
177
|
|
-) -> Workspace:
|
178
|
|
- """
|
179
|
|
- Get current workspace from request
|
180
|
|
- :param user: User who want to check the workspace
|
181
|
|
- :param request: pyramid request
|
182
|
|
- :return: current workspace
|
183
|
|
- """
|
184
|
|
- workspace_id = ''
|
185
|
|
- try:
|
186
|
|
- if 'workspace_id' in request.matchdict:
|
187
|
|
- workspace_id = request.matchdict['workspace_id']
|
188
|
|
- if not workspace_id:
|
189
|
|
- raise WorkspaceNotFound('No workspace_id property found in request')
|
190
|
|
- wapi = WorkspaceApi(
|
191
|
|
- current_user=user,
|
192
|
|
- session=request.dbsession,
|
193
|
|
- config=request.registry.settings['CFG']
|
194
|
|
- )
|
195
|
|
- workspace = wapi.get_one(workspace_id)
|
196
|
|
- except JSONDecodeError:
|
197
|
|
- raise WorkspaceNotFound('Bad json body')
|
198
|
|
- except NoResultFound:
|
199
|
|
- raise WorkspaceNotFound(
|
200
|
|
- 'Workspace {} does not exist '
|
201
|
|
- 'or is not visible for this user'.format(workspace_id)
|
202
|
|
- )
|
203
|
|
- return workspace
|
|
131
|
+ def _get_candidate_user(
|
|
132
|
+ self,
|
|
133
|
+ request: 'TracimRequest',
|
|
134
|
+ ) -> User:
|
|
135
|
+ """
|
|
136
|
+ Get candidate user
|
|
137
|
+ :param request: pyramid request
|
|
138
|
+ :return: user found from header/body
|
|
139
|
+ """
|
|
140
|
+ app_config = request.registry.settings['CFG']
|
|
141
|
+ uapi = UserApi(None, session=request.dbsession, config=app_config)
|
|
142
|
+
|
|
143
|
+ try:
|
|
144
|
+ login = None
|
|
145
|
+ if 'user_id' in request.matchdict:
|
|
146
|
+ login = request.matchdict['user_id']
|
|
147
|
+ if not login:
|
|
148
|
+ raise UserNotFoundInTracimRequest('You request a candidate user but the context not permit to found one') # nopep8
|
|
149
|
+ user = uapi.get_one(login)
|
|
150
|
+ except UserNotFoundInTracimRequest as exc:
|
|
151
|
+ raise UserDoesNotExist('User {} not found'.format(login)) from exc
|
|
152
|
+ return user
|
|
153
|
+
|
|
154
|
+ def _get_auth_safe_user(
|
|
155
|
+ self,
|
|
156
|
+ request: 'TracimRequest',
|
|
157
|
+ ) -> User:
|
|
158
|
+ """
|
|
159
|
+ Get current pyramid authenticated user from request
|
|
160
|
+ :param request: pyramid request
|
|
161
|
+ :return: current authenticated user
|
|
162
|
+ """
|
|
163
|
+ app_config = request.registry.settings['CFG']
|
|
164
|
+ uapi = UserApi(None, session=request.dbsession, config=app_config)
|
|
165
|
+ try:
|
|
166
|
+ login = request.authenticated_userid
|
|
167
|
+ if not login:
|
|
168
|
+ raise UserNotFoundInTracimRequest('You request a current user but the context not permit to found one') # nopep8
|
|
169
|
+ user = uapi.get_one_by_email(login)
|
|
170
|
+ except (UserDoesNotExist, UserNotFoundInTracimRequest) as exc:
|
|
171
|
+ raise NotAuthenticated('User {} not found'.format(login)) from exc
|
|
172
|
+ return user
|
|
173
|
+
|
|
174
|
+ def _get_workspace(
|
|
175
|
+ self,
|
|
176
|
+ user: User,
|
|
177
|
+ request: 'TracimRequest'
|
|
178
|
+ ) -> Workspace:
|
|
179
|
+ """
|
|
180
|
+ Get current workspace from request
|
|
181
|
+ :param user: User who want to check the workspace
|
|
182
|
+ :param request: pyramid request
|
|
183
|
+ :return: current workspace
|
|
184
|
+ """
|
|
185
|
+ workspace_id = ''
|
|
186
|
+ try:
|
|
187
|
+ if 'workspace_id' in request.matchdict:
|
|
188
|
+ workspace_id = request.matchdict['workspace_id']
|
|
189
|
+ if not workspace_id:
|
|
190
|
+ raise WorkspaceNotFound('No workspace_id property found in request')
|
|
191
|
+ wapi = WorkspaceApi(
|
|
192
|
+ current_user=user,
|
|
193
|
+ session=request.dbsession,
|
|
194
|
+ config=request.registry.settings['CFG']
|
|
195
|
+ )
|
|
196
|
+ workspace = wapi.get_one(workspace_id)
|
|
197
|
+ except JSONDecodeError:
|
|
198
|
+ raise WorkspaceNotFound('Bad json body')
|
|
199
|
+ except NoResultFound:
|
|
200
|
+ raise WorkspaceNotFound(
|
|
201
|
+ 'Workspace {} does not exist '
|
|
202
|
+ 'or is not visible for this user'.format(workspace_id)
|
|
203
|
+ )
|
|
204
|
+ return workspace
|