/* openbills - Server for web based Libre Billing Software * Copyright (C) 2023-2025 Vidhu Kant Sharma * * 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 user import ( "strings" "github.com/spf13/viper" "vidhukant.com/openbills/errors" "vidhukant.com/openbills/util" ) func validatePassword(pass string) error { // check if password is too short if len(pass) < viper.GetInt("security.min_password_length") { return errors.ErrPasswordTooShort } // check if password is too long if len(pass) > viper.GetInt("security.max_password_length") { return errors.ErrPasswordTooLong } return nil } func validateUsername(username string) error { // check if username is too short if len(username) < 2 { return errors.ErrUsernameTooShort } // check if username is too long if len(username) > 32 { return errors.ErrUsernameTooLong } // (11th October 2025) what the fuck even is this // I'm not even deleting this I can't stop laughing // // for _, char := range username { // if !strings.Contains(username, string(char)) { // return errors.ErrInvalidUsername // } // } return nil } func (u *User) validate() error { u.Email = strings.TrimSpace(u.Email) u.Username = strings.TrimSpace(u.Username) // don't accept empty username if u.Username == "" { return errors.ErrEmptyUsername } else { // validate username err := validateUsername(u.Username) if err != nil { return err } } // don't accept empty email if u.Email == "" { return errors.ErrEmptyEmail } else { // validate email if !util.ValidateEmail(u.Email) { return errors.ErrInvalidEmail } } // validate password err := validatePassword(u.Password) if err != nil { return err } return nil }