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