github.com/vnforks/kid/v5@v5.22.1-0.20200408055009-b89d99c65676/utils/password.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package utils 5 6 import ( 7 "net/http" 8 "strings" 9 10 "github.com/vnforks/kid/v5/model" 11 ) 12 13 func IsPasswordValidWithSettings(password string, settings *model.PasswordSettings) *model.AppError { 14 id := "model.user.is_valid.pwd" 15 isError := false 16 17 if len(password) < *settings.MinimumLength || len(password) > model.PASSWORD_MAXIMUM_LENGTH { 18 isError = true 19 } 20 21 if *settings.Lowercase { 22 if !strings.ContainsAny(password, model.LOWERCASE_LETTERS) { 23 isError = true 24 } 25 26 id = id + "_lowercase" 27 } 28 29 if *settings.Uppercase { 30 if !strings.ContainsAny(password, model.UPPERCASE_LETTERS) { 31 isError = true 32 } 33 34 id = id + "_uppercase" 35 } 36 37 if *settings.Number { 38 if !strings.ContainsAny(password, model.NUMBERS) { 39 isError = true 40 } 41 42 id = id + "_number" 43 } 44 45 if *settings.Symbol { 46 if !strings.ContainsAny(password, model.SYMBOLS) { 47 isError = true 48 } 49 50 id = id + "_symbol" 51 } 52 53 if isError { 54 return model.NewAppError("User.IsValid", id+".app_error", map[string]interface{}{"Min": *settings.MinimumLength}, "", http.StatusBadRequest) 55 } 56 57 return nil 58 }