aboutsummaryrefslogtreecommitdiff
path: root/internal/model/webauthn.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/model/webauthn.go')
-rw-r--r--internal/model/webauthn.go52
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)
+}