/* openbills - Server for web based Libre Billing Software * Copyright (C) 2023 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" e "errors" "github.com/spf13/viper" "vidhukant.com/openbills/errors" ) 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 } // NOTE: very inefficient and really really really dumb but it works // TODO: find a better (or even a remotely good) way func validateUserField(field, value string) error { if value != "" { var count int64 err := db.Model(&User{}). Where(field + " = ?", value). Count(&count). Error if err != nil { return err } if count > 0 { switch(field) { case "username": return errors.ErrNonUniqueUsername case "email": return errors.ErrNonUniqueEmail default: return e.New(field + " is not unique") } } } return nil } func (u *User) validate() error { u.Username = strings.TrimSpace(u.Username) u.Email = strings.TrimSpace(u.Email) u.IsVerified = false // TODO: validate username length and stuff // TODO: validate if email is valid var err error for _, i := range [][]string{{"username", u.Username}, {"email", u.Email}} { err = validateUserField(i[0], i[1]) if err != nil { return err } } return nil }