mirror of
https://github.com/phishingclub/phishingclub.git
synced 2026-02-12 16:12:44 +00:00
56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/oapi-codegen/nullable"
|
|
"github.com/phishingclub/phishingclub/database"
|
|
"github.com/phishingclub/phishingclub/vo"
|
|
)
|
|
|
|
// OAuthState represents a temporary state token for oauth flow
|
|
type OAuthState struct {
|
|
ID nullable.Nullable[uuid.UUID] `json:"id"`
|
|
CreatedAt *time.Time `json:"createdAt"`
|
|
|
|
// the state token sent to oauth provider
|
|
StateToken nullable.Nullable[vo.String255] `json:"stateToken"`
|
|
|
|
// the oauth provider this state is for
|
|
OAuthProviderID nullable.Nullable[uuid.UUID] `json:"oauthProviderID"`
|
|
OAuthProvider *OAuthProvider `json:"oauthProvider"`
|
|
|
|
// expiration
|
|
ExpiresAt *time.Time `json:"expiresAt"`
|
|
|
|
// whether this state token has been used
|
|
Used bool `json:"used"`
|
|
UsedAt *time.Time `json:"usedAt"`
|
|
}
|
|
|
|
// OAuthStateFromDB converts database model to model
|
|
func OAuthStateFromDB(db *database.OAuthState) *OAuthState {
|
|
if db == nil {
|
|
return nil
|
|
}
|
|
|
|
stateToken, err := vo.NewString255(db.StateToken)
|
|
if err != nil {
|
|
// fallback to empty if token is invalid (should not happen)
|
|
stateToken = vo.NewString255Must("")
|
|
}
|
|
|
|
state := &OAuthState{
|
|
ID: nullable.NewNullableWithValue(db.ID),
|
|
CreatedAt: db.CreatedAt,
|
|
StateToken: nullable.NewNullableWithValue(*stateToken),
|
|
OAuthProviderID: nullable.NewNullableWithValue(db.OAuthProviderID),
|
|
ExpiresAt: db.ExpiresAt,
|
|
Used: db.Used,
|
|
UsedAt: db.UsedAt,
|
|
}
|
|
|
|
return state
|
|
}
|