18
18
19
19
use std:: collections:: HashSet ;
20
20
21
- use actix_web:: { HttpResponse , Responder , web} ;
21
+ use actix_web:: { HttpResponse , web} ;
22
+ use http:: StatusCode ;
22
23
23
24
use crate :: {
24
25
handlers:: http:: {
@@ -27,7 +28,7 @@ use crate::{
27
28
} ,
28
29
rbac:: {
29
30
Users ,
30
- map:: { roles, users } ,
31
+ map:: roles,
31
32
user:: { self , User as ParseableUser } ,
32
33
} ,
33
34
storage,
@@ -38,10 +39,9 @@ use crate::{
38
39
pub async fn post_user (
39
40
username : web:: Path < String > ,
40
41
body : Option < web:: Json < serde_json:: Value > > ,
41
- ) -> Result < impl Responder , RBACError > {
42
+ ) -> Result < HttpResponse , RBACError > {
42
43
let username = username. into_inner ( ) ;
43
44
44
- let generated_password = String :: default ( ) ;
45
45
let metadata = get_metadata ( ) . await ?;
46
46
if let Some ( body) = body {
47
47
let user: ParseableUser = serde_json:: from_value ( body. into_inner ( ) ) ?;
@@ -51,25 +51,18 @@ pub async fn post_user(
51
51
Users . add_roles ( & username, created_role. clone ( ) ) ;
52
52
}
53
53
54
- Ok ( HttpResponse :: Ok ( ) . json ( generated_password ) )
54
+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
55
55
}
56
56
57
57
// Handler for DELETE /api/v1/user/delete/{userid}
58
- pub async fn delete_user ( userid : web:: Path < String > ) -> Result < impl Responder , RBACError > {
58
+ pub async fn delete_user ( userid : web:: Path < String > ) -> Result < HttpResponse , RBACError > {
59
59
let userid = userid. into_inner ( ) ;
60
60
let _guard = UPDATE_LOCK . lock ( ) . await ;
61
61
// fail this request if the user does not exists
62
62
if !Users . contains ( & userid) {
63
63
return Err ( RBACError :: UserDoesNotExist ) ;
64
64
} ;
65
65
66
- // find username by userid, for native users, username is userid, for oauth users, we need to look up
67
- let username = if let Some ( user) = users ( ) . get ( & userid) {
68
- user. username_by_userid ( )
69
- } else {
70
- return Err ( RBACError :: UserDoesNotExist ) ;
71
- } ;
72
-
73
66
// delete from parseable.json first
74
67
let mut metadata = get_metadata ( ) . await ?;
75
68
metadata. users . retain ( |user| user. userid ( ) != userid) ;
@@ -78,28 +71,21 @@ pub async fn delete_user(userid: web::Path<String>) -> Result<impl Responder, RB
78
71
79
72
// update in mem table
80
73
Users . delete_user ( & userid) ;
81
- Ok ( HttpResponse :: Ok ( ) . json ( format ! ( "deleted user: {username}" ) ) )
74
+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
82
75
}
83
76
84
77
// Handler PATCH /user/{userid}/role/sync/add => Add roles to a user
85
78
pub async fn add_roles_to_user (
86
79
userid : web:: Path < String > ,
87
80
roles_to_add : web:: Json < HashSet < String > > ,
88
- ) -> Result < String , RBACError > {
81
+ ) -> Result < HttpResponse , RBACError > {
89
82
let userid = userid. into_inner ( ) ;
90
83
let roles_to_add = roles_to_add. into_inner ( ) ;
91
84
92
85
if !Users . contains ( & userid) {
93
86
return Err ( RBACError :: UserDoesNotExist ) ;
94
87
} ;
95
88
96
- // find username by userid, for native users, username is userid, for oauth users, we need to look up
97
- let username = if let Some ( user) = users ( ) . get ( & userid) {
98
- user. username_by_userid ( )
99
- } else {
100
- return Err ( RBACError :: UserDoesNotExist ) ;
101
- } ;
102
-
103
89
// check if all roles exist
104
90
let mut non_existent_roles = Vec :: new ( ) ;
105
91
roles_to_add. iter ( ) . for_each ( |r| {
@@ -128,28 +114,21 @@ pub async fn add_roles_to_user(
128
114
let _ = storage:: put_staging_metadata ( & metadata) ;
129
115
// update in mem table
130
116
Users . add_roles ( & userid. clone ( ) , roles_to_add. clone ( ) ) ;
131
- Ok ( format ! ( "Roles updated successfully for {username}" ) )
117
+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
132
118
}
133
119
134
120
// Handler PATCH /user/{userid}/role/sync/add => Add roles to a user
135
121
pub async fn remove_roles_from_user (
136
122
userid : web:: Path < String > ,
137
123
roles_to_remove : web:: Json < HashSet < String > > ,
138
- ) -> Result < String , RBACError > {
124
+ ) -> Result < HttpResponse , RBACError > {
139
125
let userid = userid. into_inner ( ) ;
140
126
let roles_to_remove = roles_to_remove. into_inner ( ) ;
141
127
142
128
if !Users . contains ( & userid) {
143
129
return Err ( RBACError :: UserDoesNotExist ) ;
144
130
} ;
145
131
146
- // find username by userid, for native users, username is userid, for oauth users, we need to look up
147
- let username = if let Some ( user) = users ( ) . get ( & userid) {
148
- user. username_by_userid ( )
149
- } else {
150
- return Err ( RBACError :: UserDoesNotExist ) ;
151
- } ;
152
-
153
132
// check if all roles exist
154
133
let mut non_existent_roles = Vec :: new ( ) ;
155
134
roles_to_remove. iter ( ) . for_each ( |r| {
@@ -192,12 +171,12 @@ pub async fn remove_roles_from_user(
192
171
// update in mem table
193
172
Users . remove_roles ( & userid. clone ( ) , roles_to_remove. clone ( ) ) ;
194
173
195
- Ok ( format ! ( "Roles updated successfully for {username}" ) )
174
+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
196
175
}
197
176
198
177
// Handler for POST /api/v1/user/{username}/generate-new-password
199
178
// Resets password for the user to a newly generated one and returns it
200
- pub async fn post_gen_password ( username : web:: Path < String > ) -> Result < impl Responder , RBACError > {
179
+ pub async fn post_gen_password ( username : web:: Path < String > ) -> Result < HttpResponse , RBACError > {
201
180
let username = username. into_inner ( ) ;
202
181
let mut new_hash = String :: default ( ) ;
203
182
let mut metadata = get_metadata ( ) . await ?;
@@ -217,5 +196,5 @@ pub async fn post_gen_password(username: web::Path<String>) -> Result<impl Respo
217
196
return Err ( RBACError :: UserDoesNotExist ) ;
218
197
}
219
198
Users . change_password_hash ( & username, & new_hash) ;
220
- Ok ( HttpResponse :: Ok ( ) . json ( "Updated" ) )
199
+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
221
200
}
0 commit comments