diff options
Diffstat (limited to 'internal/db/two_factor.go')
-rw-r--r-- | internal/db/two_factor.go | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/internal/db/two_factor.go b/internal/db/two_factor.go index a46fb992..e827d59b 100644 --- a/internal/db/two_factor.go +++ b/internal/db/two_factor.go @@ -12,7 +12,6 @@ import ( "github.com/pquerna/otp/totp" "github.com/unknwon/com" - log "unknwon.dev/clog/v2" "xorm.io/xorm" "gogs.io/gogs/internal/conf" @@ -54,15 +53,6 @@ func (t *TwoFactor) ValidateTOTP(passcode string) (bool, error) { return totp.Validate(passcode, string(decryptSecret)), nil } -// IsUserEnabledTwoFactor returns true if user has enabled two-factor authentication. -func IsUserEnabledTwoFactor(userID int64) bool { - has, err := x.Where("user_id = ?", userID).Get(new(TwoFactor)) - if err != nil { - log.Error("IsUserEnabledTwoFactor [user_id: %d]: %v", userID, err) - } - return has -} - func generateRecoveryCodes(userID int64) ([]*TwoFactorRecoveryCode, error) { recoveryCodes := make([]*TwoFactorRecoveryCode, 10) for i := 0; i < 10; i++ { @@ -182,6 +172,19 @@ func RegenerateRecoveryCodes(userID int64) error { return sess.Commit() } +type ErrTwoFactorRecoveryCodeNotFound struct { + Code string +} + +func IsTwoFactorRecoveryCodeNotFound(err error) bool { + _, ok := err.(ErrTwoFactorRecoveryCodeNotFound) + return ok +} + +func (err ErrTwoFactorRecoveryCodeNotFound) Error() string { + return fmt.Sprintf("two-factor recovery code does not found [code: %s]", err.Code) +} + // UseRecoveryCode validates recovery code of given user and marks it is used if valid. func UseRecoveryCode(userID int64, code string) error { recoveryCode := new(TwoFactorRecoveryCode) @@ -189,7 +192,7 @@ func UseRecoveryCode(userID int64, code string) error { if err != nil { return fmt.Errorf("get unused code: %v", err) } else if !has { - return errors.TwoFactorRecoveryCodeNotFound{Code: code} + return ErrTwoFactorRecoveryCodeNotFound{Code: code} } recoveryCode.IsUsed = true |