// Copyright (c) 2025 Nikolai Papin // // This file is part of Easywish // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See // the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . package validation import ( "easywish/config" "regexp" "github.com/go-playground/validator/v10" ) type CustomValidatorHandler struct { Function func(fl validator.FieldLevel) bool FieldName string } func GetCustomHandlers() []CustomValidatorHandler { handlers := []CustomValidatorHandler{ { FieldName: "username", Function: func(fl validator.FieldLevel) bool { username := fl.Field().String() return regexp.MustCompile(`^[a-zA-Z0-9_]{3,20}$`).MatchString(username) }}, { FieldName: "name", Function: func(fl validator.FieldLevel) bool { username := fl.Field().String() return regexp.MustCompile(`^.{1,75}$`).MatchString(username) }}, { FieldName: "password", Function: func(fl validator.FieldLevel) bool { password := fl.Field().String() cfg := config.GetConfig() if cfg.PasswordMaxLength < len(password) || len(password) < cfg.PasswordMinLength { return false } if cfg.PasswordCheckNumbers && !regexp.MustCompile(`\d+`).MatchString(password) { return false } if cfg.PasswordCheckCases && !regexp.MustCompile(`^(?=.*[a-z])(?=.*[A-Z]).*$`).MatchString(password) || cfg.PasswordCheckCharacters && !regexp.MustCompile(`[a-zA-Z]`).MatchString(password) { return false } if cfg.PasswordCheckSymbols && !regexp.MustCompile(`[.,/;'[\]\-=_+{}:"<>?\/|!@#$%^&*()~]`).MatchString(password) { return false } if cfg.PasswordCheckLeaked { // TODO: implement rockme check } return true }}, } return handlers }