@@ -331,7 +331,18 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
331331 w .Header ().Set ("Content-Type" , "application/json" )
332332 var params = mux .Vars (r )
333333 // start here
334+ jwtUser , _ , isadmin , err := logic .VerifyJWT (r .Header .Get ("Authorization" ))
335+ if err != nil {
336+ logger .Log (0 , "verifyJWT error" , err .Error ())
337+ logic .ReturnErrorResponse (w , r , logic .FormatError (err , "internal" ))
338+ return
339+ }
334340 username := params ["username" ]
341+ if username != jwtUser && ! isadmin {
342+ logger .Log (0 , "non-admin user" , jwtUser , "attempted to update user" , username )
343+ logic .ReturnErrorResponse (w , r , logic .FormatError (errors .New ("not authorizied" ), "unauthorized" ))
344+ return
345+ }
335346 user , err := logic .GetUser (username )
336347 if err != nil {
337348 logger .Log (0 , username ,
@@ -354,6 +365,11 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
354365 logic .ReturnErrorResponse (w , r , logic .FormatError (err , "badrequest" ))
355366 return
356367 }
368+ if userchange .IsAdmin && ! isadmin {
369+ logger .Log (0 , "non-admin user" , jwtUser , "attempted get admin privilages" )
370+ logic .ReturnErrorResponse (w , r , logic .FormatError (errors .New ("not authorizied" ), "unauthorized" ))
371+ return
372+ }
357373 userchange .Networks = nil
358374 user , err = logic .UpdateUser (& userchange , user )
359375 if err != nil {
0 commit comments