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 DeletePublicKey(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
24func DeletePublicKeyByRkey(e Execer, did, rkey string) error {
25 _, err := e.Exec(`
26 delete from public_keys
27 where did = ? and rkey = ?`,
28 did, rkey)
29 return err
30}
31
32type PublicKey struct {
33 Did string `json:"did"`
34 Key string `json:"key"`
35 Name string `json:"name"`
36 Rkey string `json:"rkey"`
37 Created *time.Time
38}
39
40func (p PublicKey) MarshalJSON() ([]byte, error) {
41 type Alias PublicKey
42 return json.Marshal(&struct {
43 Created string `json:"created"`
44 *Alias
45 }{
46 Created: p.Created.Format(time.RFC3339),
47 Alias: (*Alias)(&p),
48 })
49}
50
51func GetAllPublicKeys(e Execer) ([]PublicKey, error) {
52 var keys []PublicKey
53
54 rows, err := e.Query(`select key, name, did, rkey, created from public_keys`)
55 if err != nil {
56 return nil, err
57 }
58 defer rows.Close()
59
60 for rows.Next() {
61 var publicKey PublicKey
62 var createdAt string
63 if err := rows.Scan(&publicKey.Key, &publicKey.Name, &publicKey.Did, &publicKey.Rkey, &createdAt); err != nil {
64 return nil, err
65 }
66 createdAtTime, _ := time.Parse(time.RFC3339, createdAt)
67 publicKey.Created = &createdAtTime
68 keys = append(keys, publicKey)
69 }
70
71 if err := rows.Err(); err != nil {
72 return nil, err
73 }
74
75 return keys, nil
76}
77
78func GetPublicKeys(e Execer, did string) ([]PublicKey, error) {
79 var keys []PublicKey
80
81 rows, err := e.Query(`select did, key, name, rkey, created from public_keys where did = ?`, did)
82 if err != nil {
83 return nil, err
84 }
85 defer rows.Close()
86
87 for rows.Next() {
88 var publicKey PublicKey
89 var createdAt string
90 if err := rows.Scan(&publicKey.Did, &publicKey.Key, &publicKey.Name, &publicKey.Rkey, &createdAt); err != nil {
91 return nil, err
92 }
93 createdAtTime, _ := time.Parse(time.RFC3339, createdAt)
94 publicKey.Created = &createdAtTime
95 keys = append(keys, publicKey)
96 }
97
98 if err := rows.Err(); err != nil {
99 return nil, err
100 }
101
102 return keys, nil
103}