mirror of
https://github.com/pocket-id/pocket-id.git
synced 2026-07-18 16:59:53 +00:00
59 lines
1.6 KiB
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)
|
|
}
|