User login

This commit is contained in:
2024-01-28 00:05:19 +08:00
parent d484b6b973
commit 4f33b9e0f6
49 changed files with 2303 additions and 10 deletions

View File

@ -52,6 +52,7 @@ type AuthChallengeState = int8
const (
ActiveChallengeState = AuthChallengeState(iota)
ExpiredChallengeState
FinishChallengeState
)

View File

@ -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 {

View File

@ -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
}
}

View File

@ -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())
}

View File

@ -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)
}

View File

@ -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
}
}