Files
pocket-id/backend/internal/webauthn/models.go

59 lines
1.6 KiB
Go

package webauthn
import (
"database/sql/driver"
"encoding/json"
"time"
"github.com/go-webauthn/webauthn/protocol"
"github.com/pocket-id/pocket-id/backend/internal/model"
datatype "github.com/pocket-id/pocket-id/backend/internal/model/types"
"github.com/pocket-id/pocket-id/backend/internal/utils"
)
// WebauthnSession holds the transient challenge state for an in-progress registration or login
type WebauthnSession struct {
model.Base
Challenge string
ExpiresAt datatype.DateTime
UserVerification string
CredentialParams CredentialParameters
}
// ReauthenticationToken is a short-lived token proving a user recently re-verified themselves
type ReauthenticationToken struct {
model.Base
Token string
ExpiresAt datatype.DateTime
UserID string
User model.User
}
// PublicKeyCredentialCreationOptions is the registration challenge returned to the browser
type PublicKeyCredentialCreationOptions struct {
Response protocol.PublicKeyCredentialCreationOptions
SessionID string
Timeout time.Duration
}
// PublicKeyCredentialRequestOptions is the login challenge returned to the browser
type PublicKeyCredentialRequestOptions struct {
Response protocol.PublicKeyCredentialRequestOptions
SessionID string
Timeout time.Duration
}
type CredentialParameters []protocol.CredentialParameter //nolint:recvcheck
// Scan and Value methods for GORM to handle the custom type
func (cp *CredentialParameters) Scan(value any) error {
return utils.UnmarshalJSONFromDatabase(cp, value)
}
func (cp CredentialParameters) Value() (driver.Value, error) {
return json.Marshal(cp)
}