Live video on the AT Protocol
at eli/bump-xcode 71 lines 1.9 kB view raw
1package model 2 3import ( 4 "context" 5 "errors" 6 "fmt" 7 "time" 8 9 "go.opentelemetry.io/otel" 10 "gorm.io/gorm" 11) 12 13type SigningKey struct { 14 DID string `gorm:"primaryKey;column:did" json:"did"` 15 RepoDID string `gorm:"primaryKey;column:repo_did" json:"repoDID"` 16 RKey string `gorm:"column:rkey;index" json:"rkey"` 17 Repo *Repo `json:"repo,omitempty" gorm:"foreignKey:RepoDID;references:DID"` 18 CreatedAt time.Time `json:"createdAt"` 19 RevokedAt *time.Time `json:"revokedAt"` 20} 21 22func (SigningKey) TableName() string { 23 return "signing_keys" 24} 25 26func (m *DBModel) UpdateSigningKey(key *SigningKey) error { 27 return m.DB.Save(key).Error 28} 29 30func (m *DBModel) GetSigningKey(ctx context.Context, did, repoDID string) (*SigningKey, error) { 31 _, span := otel.Tracer("signer").Start(ctx, "GetSigningKey") 32 defer span.End() 33 var key SigningKey 34 res := m.DB.Model(SigningKey{}).Where("did = ?", did).Where("repo_did = ?", repoDID).First(&key) 35 if errors.Is(res.Error, gorm.ErrRecordNotFound) { 36 return nil, nil 37 } 38 if key.RevokedAt != nil { 39 return nil, fmt.Errorf("signing key revoked") 40 } 41 if res.Error != nil { 42 return nil, res.Error 43 } 44 return &key, nil 45} 46 47func (m *DBModel) GetSigningKeyByRKey(ctx context.Context, rkey string) (*SigningKey, error) { 48 _, span := otel.Tracer("signer").Start(ctx, "GetSigningKeyByRKey") 49 defer span.End() 50 var key SigningKey 51 res := m.DB.Model(SigningKey{}).Where("rkey = ?", rkey).First(&key) 52 if errors.Is(res.Error, gorm.ErrRecordNotFound) { 53 return nil, nil 54 } 55 if key.RevokedAt != nil { 56 return nil, fmt.Errorf("signing key revoked") 57 } 58 if res.Error != nil { 59 return nil, res.Error 60 } 61 return &key, nil 62} 63 64func (m *DBModel) GetSigningKeysForRepo(repoDID string) ([]SigningKey, error) { 65 var keys []SigningKey 66 res := m.DB.Model(SigningKey{}).Where("repo_did = ?", repoDID).Find(&keys) 67 if res.Error != nil { 68 return nil, res.Error 69 } 70 return keys, nil 71}