12
12
# See the License for the specific language governing permissions and
13
13
# limitations under the License.
14
14
15
+
16
+ from typing import Optional
17
+
15
18
from pyramid .view import view_config
16
19
from pyramid .request import Request
17
20
from pyramid .httpexceptions import HTTPNoContent , HTTPForbidden , HTTPNotFound
@@ -37,6 +40,32 @@ class UserUpdateRequest(DataHolderBase):
37
40
38
41
@dataclass
39
42
class UserResponseElement (DataHolderBase ):
43
+ """Class for User Update Request communication to OpenApi"""
44
+ id : dict
45
+ name : str # why is this name when it is called fullname in the db?
46
+ group : dict
47
+ group_admin : Optional [bool ] = None
48
+ site_admin : Optional [bool ] = None
49
+ site_read : Optional [bool ] = None
50
+ email : Optional [str ] = None
51
+
52
+ @classmethod
53
+ def from_user (cls , target_user , requesting_user ):
54
+ restricted_fields = dict ()
55
+
56
+ if authz .view_restricted_user_info (requesting_user , target_user ):
57
+ restricted_fields .update ({
58
+ "group_admin" : target_user .group_admin ,
59
+ "site_admin" : target_user .site_admin ,
60
+ "site_read" : target_user .site_read ,
61
+ "email" : target_user .email
62
+ })
63
+
64
+ return cls (id = get_identifier (target_user ), name = target_user .fullname , group = get_identifier (target_user .group ), ** restricted_fields )
65
+
66
+
67
+ @dataclass
68
+ class WhoamiResponseElement (DataHolderBase ):
40
69
"""Class for User Update Request communication to OpenApi"""
41
70
id : dict
42
71
name : str # why is this name when it is called fullname in the db?
@@ -53,11 +82,11 @@ class UserResponseElement(DataHolderBase):
53
82
request_method = "GET" ,
54
83
openapi = True
55
84
)
56
- def get_whoami (request : Request ) -> UserResponseElement :
85
+ def get_whoami (request : Request ) -> WhoamiResponseElement :
57
86
58
87
auth_user = security .revalidate_user (request )
59
88
60
- return UserResponseElement (
89
+ return WhoamiResponseElement (
61
90
id = get_identifier (auth_user ),
62
91
name = auth_user .fullname ,
63
92
group_admin = auth_user .group_admin ,
@@ -68,6 +97,31 @@ def get_whoami(request: Request) -> UserResponseElement:
68
97
)
69
98
70
99
100
+ @view_config (
101
+ route_name = "user_id" ,
102
+ renderer = "json" ,
103
+ request_method = "GET" ,
104
+ openapi = True
105
+ )
106
+ def get (request : Request ):
107
+
108
+ # Authenticate the user
109
+ auth_user = security .revalidate_user (request )
110
+
111
+ user_id = request .matchdict ["id" ]
112
+ db = request .dbsession
113
+
114
+ # Get the targeted user
115
+ target_user = resource_by_id (db , User , user_id )
116
+ if target_user is None :
117
+ raise HTTPNotFound ()
118
+
119
+ if not authz .view_user (auth_user , target_user ):
120
+ raise HTTPForbidden ()
121
+
122
+ return UserResponseElement .from_user (target_user , auth_user )
123
+
124
+
71
125
@view_config (
72
126
route_name = "user_id" ,
73
127
renderer = 'json' ,
0 commit comments