Browse Source

feat(go): allow only master user to unset user's mfa;

Vishal Dalwadi 4 months ago
parent
commit
7445ce4768
2 changed files with 11 additions and 1 deletions
  1. 6 1
      controllers/user.go
  2. 5 0
      logic/auth.go

+ 6 - 1
controllers/user.go

@@ -1105,7 +1105,6 @@ func updateUser(w http.ResponseWriter, r *http.Request) {
 				return
 				return
 			}
 			}
 		}
 		}
-
 	}
 	}
 	if ismaster {
 	if ismaster {
 		if user.PlatformRoleID != models.SuperAdminRole && userchange.PlatformRoleID == models.SuperAdminRole {
 		if user.PlatformRoleID != models.SuperAdminRole && userchange.PlatformRoleID == models.SuperAdminRole {
@@ -1115,6 +1114,12 @@ 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 != "" {
 	if logic.IsOauthUser(user) == nil && userchange.Password != "" {
 		err := fmt.Errorf("cannot update user's password for an oauth user %s", username)
 		err := fmt.Errorf("cannot update user's password for an oauth user %s", username)
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "forbidden"))

+ 5 - 0
logic/auth.go

@@ -369,6 +369,11 @@ func UpdateUser(userchange, user *models.User) (*models.User, error) {
 		}
 		}
 	}
 	}
 
 
+	user.IsMFAEnabled = userchange.IsMFAEnabled
+	if !user.IsMFAEnabled {
+		user.TOTPSecret = ""
+	}
+
 	user.UserGroups = userchange.UserGroups
 	user.UserGroups = userchange.UserGroups
 	user.NetworkRoles = userchange.NetworkRoles
 	user.NetworkRoles = userchange.NetworkRoles
 	AddGlobalNetRolesToAdmins(user)
 	AddGlobalNetRolesToAdmins(user)