Passport/pkg/internal/models/auth.go

77 lines
2.0 KiB
Go
Raw Normal View History

2024-01-06 17:56:32 +00:00
package models
import (
"fmt"
"time"
"gorm.io/datatypes"
)
type AuthFactorType = int8
const (
PasswordAuthFactor = AuthFactorType(iota)
EmailPasswordFactor
)
type AuthFactor struct {
BaseModel
2024-08-24 07:17:26 +00:00
Type int8 `json:"type"`
Secret string `json:"-"`
Config JSONMap `json:"config"`
Account Account `json:"account"`
2024-01-06 17:56:32 +00:00
AccountID uint `json:"account_id"`
}
2024-04-20 11:04:33 +00:00
type AuthTicket struct {
2024-01-06 17:56:32 +00:00
BaseModel
2024-09-15 18:37:02 +00:00
Location string `json:"location"`
IpAddress string `json:"ip_address"`
UserAgent string `json:"user_agent"`
StepRemain int `json:"step_remain"`
Claims datatypes.JSONSlice[string] `json:"claims"`
Audiences datatypes.JSONSlice[string] `json:"audiences"`
FactorTrail datatypes.JSONSlice[int] `json:"factor_trail"`
GrantToken *string `json:"grant_token"`
AccessToken *string `json:"access_token"`
RefreshToken *string `json:"refresh_token"`
ExpiredAt *time.Time `json:"expired_at"`
AvailableAt *time.Time `json:"available_at"`
LastGrantAt *time.Time `json:"last_grant_at"`
Nonce *string `json:"nonce"`
ClientID *uint `json:"client_id"`
2024-08-24 07:17:26 +00:00
Account Account `json:"account"`
AccountID uint `json:"account_id"`
2024-01-06 17:56:32 +00:00
}
2024-04-20 11:04:33 +00:00
func (v AuthTicket) IsAvailable() error {
2024-09-15 18:37:02 +00:00
if v.StepRemain > 0 {
2024-04-21 04:20:06 +00:00
return fmt.Errorf("ticket isn't authenticated yet")
2024-04-20 11:04:33 +00:00
}
2024-01-06 17:56:32 +00:00
if v.AvailableAt != nil && time.Now().Unix() < v.AvailableAt.Unix() {
2024-04-21 04:20:06 +00:00
return fmt.Errorf("ticket isn't available yet")
2024-01-06 17:56:32 +00:00
}
if v.ExpiredAt != nil && time.Now().Unix() > v.ExpiredAt.Unix() {
2024-04-21 04:20:06 +00:00
return fmt.Errorf("ticket expired")
2024-01-06 17:56:32 +00:00
}
return nil
}
2024-09-15 18:37:02 +00:00
func (v AuthTicket) IsCanBeAvailble() error {
if v.StepRemain > 0 {
return fmt.Errorf("ticket isn't authenticated yet")
}
return nil
}
type AuthContext struct {
2024-09-22 05:13:05 +00:00
Ticket AuthTicket `json:"ticket"`
Account Account `json:"account"`
}