Files
phishingclub/backend/model/oauthState.go
Ronni Skansing f6eb87fa2b OAuth providers
Signed-off-by: Ronni Skansing <rskansing@gmail.com>
2025-11-20 23:54:00 +01:00

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
}