Преглед изворни кода

feat(go): allow super-admins and admins to unset mfa;

Vishal Dalwadi пре 4 месеци
родитељ
комит
af964e869b
1 измењених фајлова са 8 додато и 6 уклоњено
  1. 8 6
      controllers/user.go

+ 8 - 6
controllers/user.go

@@ -1087,6 +1087,14 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
 			return
 
 		}
+
+		if user.IsMFAEnabled && !userchange.IsMFAEnabled {
+			err = errors.New("user cannot unset their own mfa")
+			slog.Error("failed to update user", "caller", caller.UserName, "attempted to update user", username, "error", err)
+			logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))
+			return
+		}
+
 		if servercfg.IsPro {
 			// user cannot update his own roles and groups
 			if len(user.NetworkRoles) != len(userchange.NetworkRoles) || !reflect.DeepEqual(user.NetworkRoles, userchange.NetworkRoles) {
@@ -1112,12 +1120,6 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
 		}
 	}
 
-	if !ismaster && !userchange.IsMFAEnabled && user.IsMFAEnabled {
-		err = fmt.Errorf("mfa removal requires the master user key, operation is not permitted for other users")
-		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))
-		return
-	}
-
 	if logic.IsOauthUser(user) == nil && userchange.Password != "" {
 		err := fmt.Errorf("cannot update user's password for an oauth user %s", username)
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))