1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package certdb
- import (
- "database/sql"
- "encoding/json"
- "time"
- "github.com/jmoiron/sqlx/types"
- )
- // CertificateRecord encodes a certificate and its metadata
- // that will be recorded in a database.
- type CertificateRecord struct {
- Serial string `db:"serial_number"`
- AKI string `db:"authority_key_identifier"`
- CALabel string `db:"ca_label"`
- Status string `db:"status"`
- Reason int `db:"reason"`
- Expiry time.Time `db:"expiry"`
- RevokedAt time.Time `db:"revoked_at"`
- PEM string `db:"pem"`
- // the following fields will be empty for data inserted before migrate 002 has been run.
- IssuedAt *time.Time `db:"issued_at"`
- NotBefore *time.Time `db:"not_before"`
- MetadataJSON types.JSONText `db:"metadata"`
- SANsJSON types.JSONText `db:"sans"`
- CommonName sql.NullString `db:"common_name"`
- }
- // SetMetadata sets the metadata json
- func (c *CertificateRecord) SetMetadata(meta map[string]interface{}) error {
- marshaled, err := json.Marshal(meta)
- if err != nil {
- return err
- }
- c.MetadataJSON = types.JSONText(marshaled)
- return nil
- }
- // GetMetadata returns the json metadata
- func (c *CertificateRecord) GetMetadata() (map[string]interface{}, error) {
- var meta map[string]interface{}
- err := c.MetadataJSON.Unmarshal(&meta)
- return meta, err
- }
- // SetSANs sets the list of sans
- func (c *CertificateRecord) SetSANs(meta []string) error {
- marshaled, err := json.Marshal(meta)
- if err != nil {
- return err
- }
- c.SANsJSON = types.JSONText(marshaled)
- return nil
- }
- // GetSANs returns the json SANs
- func (c *CertificateRecord) GetSANs() ([]string, error) {
- var sans []string
- err := c.SANsJSON.Unmarshal(&sans)
- return sans, err
- }
- // OCSPRecord encodes a OCSP response body and its metadata
- // that will be recorded in a database.
- type OCSPRecord struct {
- Serial string `db:"serial_number"`
- AKI string `db:"authority_key_identifier"`
- Body string `db:"body"`
- Expiry time.Time `db:"expiry"`
- }
- // Accessor abstracts the CRUD of certdb objects from a DB.
- type Accessor interface {
- InsertCertificate(cr CertificateRecord) error
- GetCertificate(serial, aki string) ([]CertificateRecord, error)
- GetUnexpiredCertificates() ([]CertificateRecord, error)
- GetRevokedAndUnexpiredCertificates() ([]CertificateRecord, error)
- GetUnexpiredCertificatesByLabel(labels []string) (crs []CertificateRecord, err error)
- GetRevokedAndUnexpiredCertificatesByLabel(label string) ([]CertificateRecord, error)
- GetRevokedAndUnexpiredCertificatesByLabelSelectColumns(label string) ([]CertificateRecord, error)
- RevokeCertificate(serial, aki string, reasonCode int) error
- InsertOCSP(rr OCSPRecord) error
- GetOCSP(serial, aki string) ([]OCSPRecord, error)
- GetUnexpiredOCSPs() ([]OCSPRecord, error)
- UpdateOCSP(serial, aki, body string, expiry time.Time) error
- UpsertOCSP(serial, aki, body string, expiry time.Time) error
- }
|