1package db
2
3import (
4 "time"
5
6 "tangled.sh/tangled.sh/core/api/tangled"
7)
8
9type PublicKey struct {
10 Did string
11 tangled.PublicKey
12}
13
14func (d *DB) AddPublicKeyFromRecord(did string, recordIface map[string]interface{}) error {
15 record := make(map[string]string)
16 for k, v := range recordIface {
17 if str, ok := v.(string); ok {
18 record[k] = str
19 }
20 }
21
22 pk := PublicKey{
23 Did: did,
24 }
25 pk.Key = record["key"]
26 pk.Created = record["created"]
27
28 return d.AddPublicKey(pk)
29}
30
31func (d *DB) AddPublicKey(pk PublicKey) error {
32 if pk.Created == "" {
33 pk.Created = time.Now().Format(time.RFC3339)
34 }
35
36 query := `insert or ignore into public_keys (did, key, created) values (?, ?, ?)`
37 _, err := d.db.Exec(query, pk.Did, pk.Key, pk.Created)
38 return err
39}
40
41func (d *DB) RemovePublicKey(did string) error {
42 query := `delete from public_keys where did = ?`
43 _, err := d.db.Exec(query, did)
44 return err
45}
46
47func (pk *PublicKey) JSON() map[string]any {
48 return map[string]any{
49 "did": pk.Did,
50 "key": pk.Key,
51 "created": pk.Created,
52 }
53}
54
55func (d *DB) GetAllPublicKeys() ([]PublicKey, error) {
56 var keys []PublicKey
57
58 rows, err := d.db.Query(`select key, did, created from public_keys`)
59 if err != nil {
60 return nil, err
61 }
62 defer rows.Close()
63
64 for rows.Next() {
65 var publicKey PublicKey
66 if err := rows.Scan(&publicKey.Key, &publicKey.Did, &publicKey.Created); err != nil {
67 return nil, err
68 }
69 keys = append(keys, publicKey)
70 }
71
72 if err := rows.Err(); err != nil {
73 return nil, err
74 }
75
76 return keys, nil
77}
78
79func (d *DB) GetPublicKeys(did string) ([]PublicKey, error) {
80 var keys []PublicKey
81
82 rows, err := d.db.Query(`select did, key, created from public_keys where did = ?`, did)
83 if err != nil {
84 return nil, err
85 }
86 defer rows.Close()
87
88 for rows.Next() {
89 var publicKey PublicKey
90 if err := rows.Scan(&publicKey.Did, &publicKey.Key, &publicKey.Created); err != nil {
91 return nil, err
92 }
93 keys = append(keys, publicKey)
94 }
95
96 if err := rows.Err(); err != nil {
97 return nil, err
98 }
99
100 return keys, nil
101}