1package db
2
3import (
4 "encoding/json"
5 "time"
6)
7
8func AddPublicKey(e Execer, did, name, key, rkey string) error {
9 _, err := e.Exec(
10 `insert or ignore into public_keys (did, name, key, rkey)
11 values (?, ?, ?, ?)`,
12 did, name, key, rkey)
13 return err
14}
15
16func RemovePublicKey(e Execer, did, name, key string) error {
17 _, err := e.Exec(`
18 delete from public_keys
19 where did = ? and name = ? and key = ?`,
20 did, name, key)
21 return err
22}
23
24type PublicKey struct {
25 Did string `json:"did"`
26 Key string `json:"key"`
27 Name string `json:"name"`
28 Rkey string `json:"rkey"`
29 Created *time.Time
30}
31
32func (p PublicKey) MarshalJSON() ([]byte, error) {
33 type Alias PublicKey
34 return json.Marshal(&struct {
35 Created string `json:"created"`
36 *Alias
37 }{
38 Created: p.Created.Format(time.RFC3339),
39 Alias: (*Alias)(&p),
40 })
41}
42
43func GetAllPublicKeys(e Execer) ([]PublicKey, error) {
44 var keys []PublicKey
45
46 rows, err := e.Query(`select key, name, did, rkey, created from public_keys`)
47 if err != nil {
48 return nil, err
49 }
50 defer rows.Close()
51
52 for rows.Next() {
53 var publicKey PublicKey
54 var createdAt string
55 if err := rows.Scan(&publicKey.Key, &publicKey.Name, &publicKey.Did, &publicKey.Rkey, &createdAt); err != nil {
56 return nil, err
57 }
58 createdAtTime, _ := time.Parse(time.RFC3339, createdAt)
59 publicKey.Created = &createdAtTime
60 keys = append(keys, publicKey)
61 }
62
63 if err := rows.Err(); err != nil {
64 return nil, err
65 }
66
67 return keys, nil
68}
69
70func GetPublicKeys(e Execer, did string) ([]PublicKey, error) {
71 var keys []PublicKey
72
73 rows, err := e.Query(`select did, key, name, rkey, created from public_keys where did = ?`, did)
74 if err != nil {
75 return nil, err
76 }
77 defer rows.Close()
78
79 for rows.Next() {
80 var publicKey PublicKey
81 var createdAt string
82 if err := rows.Scan(&publicKey.Did, &publicKey.Key, &publicKey.Name, &publicKey.Rkey, &createdAt); err != nil {
83 return nil, err
84 }
85 createdAtTime, _ := time.Parse(time.RFC3339, createdAt)
86 publicKey.Created = &createdAtTime
87 keys = append(keys, publicKey)
88 }
89
90 if err := rows.Err(); err != nil {
91 return nil, err
92 }
93
94 return keys, nil
95}