diff options
Diffstat (limited to 'internal/model/webauthn.go')
-rw-r--r-- | internal/model/webauthn.go | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/internal/model/webauthn.go b/internal/model/webauthn.go new file mode 100644 index 00000000..9d9bddf7 --- /dev/null +++ b/internal/model/webauthn.go @@ -0,0 +1,52 @@ +// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved. +// SPDX-License-Identifier: Apache-2.0 + +package model // import "miniflux.app/v2/internal/model" + +import ( + "database/sql/driver" + "encoding/hex" + "encoding/json" + "errors" + "fmt" + "time" + + "github.com/go-webauthn/webauthn/webauthn" +) + +// handle marshalling / unmarshalling session data +type WebAuthnSession struct { + *webauthn.SessionData +} + +func (s WebAuthnSession) Value() (driver.Value, error) { + return json.Marshal(s) +} + +func (s *WebAuthnSession) Scan(value interface{}) error { + b, ok := value.([]byte) + if !ok { + return errors.New("type assertion to []byte failed") + } + + return json.Unmarshal(b, &s) +} + +func (s WebAuthnSession) String() string { + if s.SessionData == nil { + return "{}" + } + return fmt.Sprintf("{Challenge: %s, UserID: %x}", s.SessionData.Challenge, s.SessionData.UserID) +} + +type WebAuthnCredential struct { + Credential webauthn.Credential + Name string + AddedOn *time.Time + LastSeenOn *time.Time + Handle []byte +} + +func (s WebAuthnCredential) HandleEncoded() string { + return hex.EncodeToString(s.Handle) +} |