Write on the margins of the internet. Powered by the AT Protocol.
margin.at
extension
web
atproto
comments
1package db
2
3import (
4 "time"
5)
6
7func (db *DB) CreateAPIKey(key *APIKey) error {
8 _, err := db.Exec(db.Rebind(`
9 INSERT INTO api_keys (id, owner_did, name, key_hash, created_at)
10 VALUES (?, ?, ?, ?, ?)
11 `), key.ID, key.OwnerDID, key.Name, key.KeyHash, key.CreatedAt)
12 return err
13}
14
15func (db *DB) GetAPIKeysByOwner(ownerDID string) ([]APIKey, error) {
16 rows, err := db.Query(db.Rebind(`
17 SELECT id, owner_did, name, key_hash, created_at, last_used_at
18 FROM api_keys
19 WHERE owner_did = ?
20 ORDER BY created_at DESC
21 `), ownerDID)
22 if err != nil {
23 return nil, err
24 }
25 defer rows.Close()
26
27 var keys []APIKey
28 for rows.Next() {
29 var k APIKey
30 if err := rows.Scan(&k.ID, &k.OwnerDID, &k.Name, &k.KeyHash, &k.CreatedAt, &k.LastUsedAt); err != nil {
31 return nil, err
32 }
33 keys = append(keys, k)
34 }
35 return keys, nil
36}
37
38func (db *DB) GetAPIKeyByHash(keyHash string) (*APIKey, error) {
39 var k APIKey
40 err := db.QueryRow(db.Rebind(`
41 SELECT id, owner_did, name, key_hash, created_at, last_used_at
42 FROM api_keys
43 WHERE key_hash = ?
44 `), keyHash).Scan(&k.ID, &k.OwnerDID, &k.Name, &k.KeyHash, &k.CreatedAt, &k.LastUsedAt)
45 if err != nil {
46 return nil, err
47 }
48 return &k, nil
49}
50
51func (db *DB) DeleteAPIKey(id, ownerDID string) error {
52 _, err := db.Exec(db.Rebind(`DELETE FROM api_keys WHERE id = ? AND owner_did = ?`), id, ownerDID)
53 return err
54}
55
56func (db *DB) UpdateAPIKeyLastUsed(id string) error {
57 _, err := db.Exec(db.Rebind(`UPDATE api_keys SET last_used_at = ? WHERE id = ?`), time.Now(), id)
58 return err
59}