Gitfed
bastien-mrq/gitfed / internal / store / meta.go
package store

import (
	bolt "go.etcd.io/bbolt"
)

// TrustPolicy governs how newly-seen remote CAs are handled, per
// DESIGN.md §5.2.
type TrustPolicy string

const (
	TrustPolicyWhitelist TrustPolicy = "whitelist"  // admin must approve (default)
	TrustPolicyAutoTrust TrustPolicy = "auto-trust" // TOFU
)

// InstanceMeta holds this instance's own configuration.
type InstanceMeta struct {
	Domain       string      `json:"domain"`
	TrustPolicy  TrustPolicy `json:"trust_policy"`
	CertTTLHours int         `json:"cert_ttl_hours"`
}

const metaKey = "instance"

func (s *Store) GetInstanceMeta() (InstanceMeta, error) {
	var m InstanceMeta
	err := s.db.View(func(tx *bolt.Tx) error {
		return getJSON(tx, bucketMeta, metaKey, &m)
	})
	return m, err
}

func (s *Store) PutInstanceMeta(m InstanceMeta) error {
	return s.db.Update(func(tx *bolt.Tx) error {
		return putJSON(tx, bucketMeta, metaKey, m)
	})
}