// Convert a "normal" user to a "system" user func (*UsersController) Convert(ctx *gin.Context) { var convertJSON convertUserJSON ctx.Bind(&convertJSON) if !strings.HasPrefix(convertJSON.Username, "tat.system") { AbortWithReturnError(ctx, http.StatusBadRequest, fmt.Errorf("Username does not begin with tat.system (%s), it's not possible to convert this user", convertJSON.Username)) return } var userToConvert = models.User{} err := userToConvert.FindByUsername(convertJSON.Username) if err != nil { AbortWithReturnError(ctx, http.StatusBadRequest, fmt.Errorf("user with username %s does not exist", convertJSON.Username)) return } if userToConvert.IsSystem { AbortWithReturnError(ctx, http.StatusBadRequest, fmt.Errorf("user with username %s is already a system user", convertJSON.Username)) return } newPassword, err := userToConvert.ConvertToSystem(utils.GetCtxUsername(ctx), convertJSON.CanWriteNotifications) if err != nil { AbortWithReturnError(ctx, http.StatusBadRequest, fmt.Errorf("Convert %s to system user failed", convertJSON.Username)) return } ctx.JSON(http.StatusOK, gin.H{ "message": "Verification successfull", "username": userToConvert.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")), }) }