Write on the margins of the internet. Powered by the AT Protocol. margin.at
extension web atproto comments
at ui-refactor 59 lines 1.5 kB view raw
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}