✨ User login
This commit is contained in:
@ -52,6 +52,7 @@ type AuthChallengeState = int8
|
||||
|
||||
const (
|
||||
ActiveChallengeState = AuthChallengeState(iota)
|
||||
ExpiredChallengeState
|
||||
FinishChallengeState
|
||||
)
|
||||
|
||||
|
@ -56,6 +56,8 @@ func NewChallenge(account models.Account, factors []models.AuthFactor, ip, ua st
|
||||
|
||||
func DoChallenge(challenge models.AuthChallenge, factor models.AuthFactor, code string) error {
|
||||
if err := challenge.IsAvailable(); err != nil {
|
||||
challenge.State = models.ExpiredChallengeState
|
||||
database.C.Save(&challenge)
|
||||
return err
|
||||
}
|
||||
if challenge.Progress >= challenge.Requirements {
|
||||
|
@ -7,13 +7,13 @@ import (
|
||||
"github.com/samber/lo"
|
||||
)
|
||||
|
||||
func GetFactorCode(factor models.AuthFactor) error {
|
||||
func GetFactorCode(factor models.AuthFactor) (bool, error) {
|
||||
switch factor.Type {
|
||||
case models.EmailPasswordFactor:
|
||||
// TODO
|
||||
return nil
|
||||
return true, nil
|
||||
default:
|
||||
return fmt.Errorf("unsupported factor to get code")
|
||||
return false, nil
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,7 +89,7 @@ func doChallenge(c *fiber.Ctx) error {
|
||||
|
||||
func exchangeToken(c *fiber.Ctx) error {
|
||||
var data struct {
|
||||
Token string `json:"token"`
|
||||
Code string `json:"code"`
|
||||
GrantType string `json:"grant_type"`
|
||||
}
|
||||
|
||||
@ -99,7 +99,7 @@ func exchangeToken(c *fiber.Ctx) error {
|
||||
|
||||
switch data.GrantType {
|
||||
case "authorization_code":
|
||||
access, refresh, err := security.ExchangeToken(data.Token)
|
||||
access, refresh, err := security.ExchangeToken(data.Code)
|
||||
if err != nil {
|
||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||
}
|
||||
@ -109,7 +109,7 @@ func exchangeToken(c *fiber.Ctx) error {
|
||||
"refresh_token": refresh,
|
||||
})
|
||||
case "refresh_token":
|
||||
access, refresh, err := security.RefreshToken(data.Token)
|
||||
access, refresh, err := security.RefreshToken(data.Code)
|
||||
if err != nil {
|
||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||
}
|
||||
|
@ -14,9 +14,11 @@ func requestFactorToken(c *fiber.Ctx) error {
|
||||
return fiber.NewError(fiber.StatusNotFound, err.Error())
|
||||
}
|
||||
|
||||
if err := security.GetFactorCode(factor); err != nil {
|
||||
if sent, err := security.GetFactorCode(factor); err != nil {
|
||||
return fiber.NewError(fiber.StatusNotFound, err.Error())
|
||||
} else if !sent {
|
||||
return c.SendStatus(fiber.StatusNoContent)
|
||||
} else {
|
||||
return c.SendStatus(fiber.StatusOK)
|
||||
}
|
||||
|
||||
return c.SendStatus(fiber.StatusOK)
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ func LookupAccount(id string) (models.Account, error) {
|
||||
if err := database.C.
|
||||
Where(models.Account{
|
||||
BaseModel: models.BaseModel{ID: contact.AccountID},
|
||||
}).First(&contact).Error; err == nil {
|
||||
}).First(&account).Error; err == nil {
|
||||
return account, err
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user