Compare commits

..

No commits in common. "fca744f17abbb7c52c9dd533e727eeb3bdfcc077" and "3d1c1d7538163142e76978693afce8fe96e5b806" have entirely different histories.

5 changed files with 6 additions and 42 deletions

11
cache/cache.go vendored
View File

@ -54,14 +54,3 @@ func GetValueByKey(key string) ([]byte, error) {
ctx := context.Background() ctx := context.Background()
return c.Get(ctx, key).Bytes() return c.Get(ctx, key).Bytes()
} }
func GetJSON(key string, result interface{}) bool {
v, err := GetValueByKey(key)
if err != nil {
return false
}
if err = json.Unmarshal(v, result); err != nil {
return false
}
return true
}

9
cache/key.go vendored
View File

@ -1,9 +0,0 @@
package cache
const (
keyPrefix = "usermngmt_"
)
const (
KeyLoginFailedTimes = keyPrefix + "login_failed_time"
)

View File

@ -1,12 +1,5 @@
package config package config
import "time"
const (
MaximumLoginFailedTime = 5
LoginFailedBlockedDuration = time.Hour
)
type Configuration struct { type Configuration struct {
EmailIsUnique bool EmailIsUnique bool
PhoneNumberIsUnique bool PhoneNumberIsUnique bool

View File

@ -29,6 +29,4 @@ const (
// Incorrect // Incorrect
ErrorIncorrectPassword = "mật khẩu không chính xác" ErrorIncorrectPassword = "mật khẩu không chính xác"
ErrorInvalidLogin = "thông tin đăng nhập không đúng"
ErrorExceedMaximumLoginFail = "bạn đã đăng nhập sai thông tin quá số lần cho phép"
) )

View File

@ -579,21 +579,15 @@ func ChangeAllUsersStatus(roleID, status string) error {
func LoginWithEmailAndPassword(email, password string) (result model.User, err error) { func LoginWithEmailAndPassword(email, password string) (result model.User, err error) {
var ( var (
ctx = context.Background() ctx = context.Background()
numOfLoginFail int
) )
k := cache.KeyLoginFailedTimes + email
// process block if reach maximum of login failed
if ok := cache.GetJSON(k, &numOfLoginFail); ok && numOfLoginFail >= config.MaximumLoginFailedTime {
return model.User{}, errors.New(internal.ErrorExceedMaximumLoginFail)
}
// Validate email, password // Validate email, password
if email == "" { if email == "" {
err = errors.New(internal.ErrorInvalidLogin) err = errors.New(internal.ErrorInvalidEmail)
return return
} }
if password == "" { if password == "" {
err = errors.New(internal.ErrorInvalidLogin) err = errors.New(internal.ErrorInvalidPassword)
return return
} }
@ -603,14 +597,13 @@ func LoginWithEmailAndPassword(email, password string) (result model.User, err e
"deleted": false, "deleted": false,
}) })
if user.ID.IsZero() { if user.ID.IsZero() {
err = errors.New(internal.ErrorInvalidLogin) err = errors.New(internal.ErrorNotFoundUser)
return return
} }
// Check Password // Check Password
if !internal.CheckPasswordHash(password, user.HashedPassword) { if !internal.CheckPasswordHash(password, user.HashedPassword) {
err = errors.New(internal.ErrorInvalidLogin) err = errors.New(internal.ErrorIncorrectPassword)
cache.SetKeyValue(k, numOfLoginFail+1, config.LoginFailedBlockedDuration)
return return
} }