github.com/psyb0t/mattermost-server@v4.6.1-0.20180125161845-5503a1351abf+incompatible/utils/password.go (about)

     1  // Copyright (c) 2016-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/mattermost/mattermost-server/model"
    11  )
    12  
    13  func IsPasswordValid(password string) *model.AppError {
    14  	if len(password) > model.PASSWORD_MAXIMUM_LENGTH || len(password) < model.PASSWORD_MINIMUM_LENGTH {
    15  		return model.NewAppError("User.IsValid", "model.user.is_valid.pwd.app_error", map[string]interface{}{"Min": model.PASSWORD_MINIMUM_LENGTH}, "", http.StatusBadRequest)
    16  	}
    17  
    18  	return nil
    19  }
    20  
    21  func IsPasswordValidWithSettings(password string, settings *model.PasswordSettings) *model.AppError {
    22  	id := "model.user.is_valid.pwd"
    23  	isError := false
    24  
    25  	if len(password) < *settings.MinimumLength || len(password) > model.PASSWORD_MAXIMUM_LENGTH {
    26  		isError = true
    27  	}
    28  
    29  	if *settings.Lowercase {
    30  		if !strings.ContainsAny(password, model.LOWERCASE_LETTERS) {
    31  			isError = true
    32  		}
    33  
    34  		id = id + "_lowercase"
    35  	}
    36  
    37  	if *settings.Uppercase {
    38  		if !strings.ContainsAny(password, model.UPPERCASE_LETTERS) {
    39  			isError = true
    40  		}
    41  
    42  		id = id + "_uppercase"
    43  	}
    44  
    45  	if *settings.Number {
    46  		if !strings.ContainsAny(password, model.NUMBERS) {
    47  			isError = true
    48  		}
    49  
    50  		id = id + "_number"
    51  	}
    52  
    53  	if *settings.Symbol {
    54  		if !strings.ContainsAny(password, model.SYMBOLS) {
    55  			isError = true
    56  		}
    57  
    58  		id = id + "_symbol"
    59  	}
    60  
    61  	if isError {
    62  		return model.NewAppError("User.IsValid", id+".app_error", map[string]interface{}{"Min": *settings.MinimumLength}, "", http.StatusBadRequest)
    63  	}
    64  
    65  	return nil
    66  }