// ResetSystemUser reset password for a system user func (*UsersController) ResetSystemUser(ctx *gin.Context) { var systemUserJSON resetSystemUserJSON ctx.Bind(&systemUserJSON) if !strings.HasPrefix(systemUserJSON.Username, "tat.system") { AbortWithReturnError(ctx, http.StatusBadRequest, fmt.Errorf("Username does not begin with tat.system (%s), it's not possible to reset password for this user", systemUserJSON.Username)) return } var systemUserToReset = models.User{} err := systemUserToReset.FindByUsername(systemUserJSON.Username) if err != nil { AbortWithReturnError(ctx, http.StatusBadRequest, fmt.Errorf("user with username %s does not exist", systemUserJSON.Username)) return } if !systemUserToReset.IsSystem { AbortWithReturnError(ctx, http.StatusBadRequest, fmt.Errorf("user with username %s is not a system user", systemUserJSON.Username)) return } newPassword, err := systemUserToReset.ResetSystemUserPassword() if err != nil { AbortWithReturnError(ctx, http.StatusBadRequest, fmt.Errorf("Reset password for %s (system user) failed", systemUserJSON.Username)) return } ctx.JSON(http.StatusOK, gin.H{ "message": "Reset password successfull", "username": systemUserToReset.Username, "password": newPassword, "url": fmt.Sprintf("%s://%s:%s%s", viper.GetString("exposed_scheme"), viper.GetString("exposed_host"), viper.GetString("exposed_port"), viper.GetString("exposed_path")), }) }