1818
1919use std:: collections:: HashSet ;
2020
21- use actix_web:: { HttpResponse , Responder , web} ;
21+ use actix_web:: { HttpResponse , web} ;
22+ use http:: StatusCode ;
2223
2324use crate :: {
2425 handlers:: http:: {
@@ -27,7 +28,7 @@ use crate::{
2728 } ,
2829 rbac:: {
2930 Users ,
30- map:: { roles, users } ,
31+ map:: roles,
3132 user:: { self , User as ParseableUser } ,
3233 } ,
3334 storage,
@@ -38,10 +39,9 @@ use crate::{
3839pub async fn post_user (
3940 username : web:: Path < String > ,
4041 body : Option < web:: Json < serde_json:: Value > > ,
41- ) -> Result < impl Responder , RBACError > {
42+ ) -> Result < HttpResponse , RBACError > {
4243 let username = username. into_inner ( ) ;
4344
44- let generated_password = String :: default ( ) ;
4545 let metadata = get_metadata ( ) . await ?;
4646 if let Some ( body) = body {
4747 let user: ParseableUser = serde_json:: from_value ( body. into_inner ( ) ) ?;
@@ -51,25 +51,18 @@ pub async fn post_user(
5151 Users . add_roles ( & username, created_role. clone ( ) ) ;
5252 }
5353
54- Ok ( HttpResponse :: Ok ( ) . json ( generated_password ) )
54+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
5555}
5656
5757// 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 > {
5959 let userid = userid. into_inner ( ) ;
6060 let _guard = UPDATE_LOCK . lock ( ) . await ;
6161 // fail this request if the user does not exists
6262 if !Users . contains ( & userid) {
6363 return Err ( RBACError :: UserDoesNotExist ) ;
6464 } ;
6565
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-
7366 // delete from parseable.json first
7467 let mut metadata = get_metadata ( ) . await ?;
7568 metadata. users . retain ( |user| user. userid ( ) != userid) ;
@@ -78,28 +71,21 @@ pub async fn delete_user(userid: web::Path<String>) -> Result<impl Responder, RB
7871
7972 // update in mem table
8073 Users . delete_user ( & userid) ;
81- Ok ( HttpResponse :: Ok ( ) . json ( format ! ( "deleted user: {username}" ) ) )
74+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
8275}
8376
8477// Handler PATCH /user/{userid}/role/sync/add => Add roles to a user
8578pub async fn add_roles_to_user (
8679 userid : web:: Path < String > ,
8780 roles_to_add : web:: Json < HashSet < String > > ,
88- ) -> Result < String , RBACError > {
81+ ) -> Result < HttpResponse , RBACError > {
8982 let userid = userid. into_inner ( ) ;
9083 let roles_to_add = roles_to_add. into_inner ( ) ;
9184
9285 if !Users . contains ( & userid) {
9386 return Err ( RBACError :: UserDoesNotExist ) ;
9487 } ;
9588
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-
10389 // check if all roles exist
10490 let mut non_existent_roles = Vec :: new ( ) ;
10591 roles_to_add. iter ( ) . for_each ( |r| {
@@ -128,28 +114,21 @@ pub async fn add_roles_to_user(
128114 let _ = storage:: put_staging_metadata ( & metadata) ;
129115 // update in mem table
130116 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 ( ) )
132118}
133119
134120// Handler PATCH /user/{userid}/role/sync/add => Add roles to a user
135121pub async fn remove_roles_from_user (
136122 userid : web:: Path < String > ,
137123 roles_to_remove : web:: Json < HashSet < String > > ,
138- ) -> Result < String , RBACError > {
124+ ) -> Result < HttpResponse , RBACError > {
139125 let userid = userid. into_inner ( ) ;
140126 let roles_to_remove = roles_to_remove. into_inner ( ) ;
141127
142128 if !Users . contains ( & userid) {
143129 return Err ( RBACError :: UserDoesNotExist ) ;
144130 } ;
145131
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-
153132 // check if all roles exist
154133 let mut non_existent_roles = Vec :: new ( ) ;
155134 roles_to_remove. iter ( ) . for_each ( |r| {
@@ -192,12 +171,12 @@ pub async fn remove_roles_from_user(
192171 // update in mem table
193172 Users . remove_roles ( & userid. clone ( ) , roles_to_remove. clone ( ) ) ;
194173
195- Ok ( format ! ( "Roles updated successfully for {username}" ) )
174+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
196175}
197176
198177// Handler for POST /api/v1/user/{username}/generate-new-password
199178// 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 > {
201180 let username = username. into_inner ( ) ;
202181 let mut new_hash = String :: default ( ) ;
203182 let mut metadata = get_metadata ( ) . await ?;
@@ -217,5 +196,5 @@ pub async fn post_gen_password(username: web::Path<String>) -> Result<impl Respo
217196 return Err ( RBACError :: UserDoesNotExist ) ;
218197 }
219198 Users . change_password_hash ( & username, & new_hash) ;
220- Ok ( HttpResponse :: Ok ( ) . json ( "Updated" ) )
199+ Ok ( HttpResponse :: Ok ( ) . status ( StatusCode :: OK ) . finish ( ) )
221200}
0 commit comments