forked from
tangled.org/core
Monorepo for Tangled
2.4 kB
102 lines
1package db
2
3import (
4 "time"
5
6 "tangled.org/core/appview/models"
7)
8
9func UpsertPublicKey(e Execer, pubKey models.PublicKey) error {
10 _, err := e.Exec(
11 `insert into public_keys (did, rkey, name, key, created)
12 values (?, ?, ?, ?, ?)
13 on conflict(did, rkey) do update set
14 name = excluded.name,
15 key = excluded.key,
16 created = excluded.created`,
17 pubKey.Did,
18 pubKey.Rkey,
19 pubKey.Name,
20 pubKey.Key,
21 pubKey.Created.Format(time.RFC3339),
22 )
23 return err
24}
25
26func UpdatePublicKey(e Execer, did, name, key, rkey string) error {
27 _, err := e.Exec(
28 `update public_keys set name = ? where did = ? and key = ? and rkey = ?`,
29 name, did, key, rkey)
30 return err
31}
32
33// for public_keys with empty rkey
34func DeletePublicKeyLegacy(e Execer, did, name string) error {
35 _, err := e.Exec(`
36 delete from public_keys
37 where did = ? and name = ? and rkey = ''`,
38 did, name)
39 return err
40}
41
42func DeletePublicKeyByRkey(e Execer, did, rkey string) error {
43 _, err := e.Exec(`
44 delete from public_keys
45 where did = ? and rkey = ?`,
46 did, rkey)
47 return err
48}
49
50func GetAllPublicKeys(e Execer) ([]models.PublicKey, error) {
51 var keys []models.PublicKey
52
53 rows, err := e.Query(`select key, name, did, rkey, created from public_keys`)
54 if err != nil {
55 return nil, err
56 }
57 defer rows.Close()
58
59 for rows.Next() {
60 var publicKey models.PublicKey
61 var createdAt string
62 if err := rows.Scan(&publicKey.Key, &publicKey.Name, &publicKey.Did, &publicKey.Rkey, &createdAt); err != nil {
63 return nil, err
64 }
65 createdAtTime, _ := time.Parse(time.RFC3339, createdAt)
66 publicKey.Created = &createdAtTime
67 keys = append(keys, publicKey)
68 }
69
70 if err := rows.Err(); err != nil {
71 return nil, err
72 }
73
74 return keys, nil
75}
76
77func GetPublicKeysForDid(e Execer, did string) ([]models.PublicKey, error) {
78 var keys []models.PublicKey
79
80 rows, err := e.Query(`select did, key, name, rkey, created from public_keys where did = ?`, did)
81 if err != nil {
82 return nil, err
83 }
84 defer rows.Close()
85
86 for rows.Next() {
87 var publicKey models.PublicKey
88 var createdAt string
89 if err := rows.Scan(&publicKey.Did, &publicKey.Key, &publicKey.Name, &publicKey.Rkey, &createdAt); err != nil {
90 return nil, err
91 }
92 createdAtTime, _ := time.Parse(time.RFC3339, createdAt)
93 publicKey.Created = &createdAtTime
94 keys = append(keys, publicKey)
95 }
96
97 if err := rows.Err(); err != nil {
98 return nil, err
99 }
100
101 return keys, nil
102}