Live video on the AT Protocol
1package model
2
3import (
4 "context"
5 "errors"
6 "time"
7
8 "go.opentelemetry.io/otel"
9 "gorm.io/gorm"
10)
11
12type SigningKey struct {
13 DID string `gorm:"primaryKey;column:did" json:"did"`
14 RepoDID string `gorm:"primaryKey;column:repo_did" json:"repoDID"`
15 Repo *Repo `json:"repo,omitempty" gorm:"foreignKey:RepoDID;references:DID"`
16 CreatedAt time.Time `json:"createdAt"`
17 RevokedAt time.Time `json:"revokedAt"`
18}
19
20func (SigningKey) TableName() string {
21 return "signing_keys"
22}
23
24func (m *DBModel) UpdateSigningKey(key *SigningKey) error {
25 return m.DB.Save(key).Error
26}
27
28func (m *DBModel) GetSigningKey(ctx context.Context, did, repoDID string) (*SigningKey, error) {
29 _, span := otel.Tracer("signer").Start(ctx, "GetSigningKey")
30 defer span.End()
31 var key SigningKey
32 res := m.DB.Model(SigningKey{}).Where("did = ?", did).Where("repo_did = ?", repoDID).First(&key)
33 if errors.Is(res.Error, gorm.ErrRecordNotFound) {
34 return nil, nil
35 }
36 if res.Error != nil {
37 return nil, res.Error
38 }
39 return &key, nil
40}
41
42func (m *DBModel) GetSigningKeysForRepo(repoDID string) ([]SigningKey, error) {
43 var keys []SigningKey
44 res := m.DB.Model(SigningKey{}).Where("repo_did = ?", repoDID).Find(&keys)
45 if res.Error != nil {
46 return nil, res.Error
47 }
48 return keys, nil
49}