101 lines
2.0 kB
1
package db
2
3
import (
4
"time"
5
6
"github.com/sotangled/tangled/api/tangled"
7
)
8
9
type PublicKey struct {
10
Did string
11
tangled.PublicKey
12
}
13
14
func (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
31
func (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
41
func (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
47
func (pk *PublicKey) JSON() map[string]interface{} {
48
return map[string]interface{}{
49
"did": pk.Did,
50
"key": pk.Key,
51
"created": pk.Created,
52
}
53
}
54
55
func (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
79
func (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
}
102