Package publish defines the exposure keys publishing API.

Package publish contains OpenCensus metrics and views for publish operations

Package publish defines the exposure keys publishing API.

Package publish defines the exposure keys publishing API.

Package publish defines the exposure keys publishing API.



View Source
const (
	HeaderAPIVersion = "x-api-version"


This section is empty.


This section is empty.


type Config

type Config struct {
	AuthorizedApp         authorizedapp.Config
	Database              database.Config
	SecretManager         secrets.Config
	KeyManager            keys.Config
	Verification          verification.Config
	ObservabilityExporter observability.Config
	RevisionToken         revision.Config

	Port        string `env:"PORT, default=8080"`
	Maintenance bool   `env:"MAINTENANCE_MODE, default=false"`

	MaxKeysOnPublish uint `env:"MAX_KEYS_ON_PUBLISH, default=30"`
	// Provides compatibility w/ 1.5 release.
	MaxSameStartIntervalKeys uint          `env:"MAX_SAME_START_INTERVAL_KEYS, default=3"`
	MaxIntervalAge           time.Duration `env:"MAX_INTERVAL_AGE_ON_PUBLISH, default=360h"`
	CreatedAtTruncateWindow  time.Duration `env:"TRUNCATE_WINDOW, default=1h"`

	// Symptom onset settings.
	// Maximum valid range. TEKs presneted with values outside this range, but still "reasonable" will not be saved.
	MaxMagnitudeSymptomOnsetDays uint `env:"MAX_SYMPTOM_ONSET_DAYS, default=14"`
	// MaxValidSymptomOnsetReportDays indicates how many days would be considered
	// a valid symptom onset report (-val..+val). Anything outside
	// that range would be subject to the default symptom onset flags (see below).
	MaxSymptomOnsetReportDays uint `env:"MAX_VALID_SYMPTOM_ONSET_REPORT_DAYS, default=28"`

	// TEKs that arrive without a days since symptom onset (i.e. no symptom onset date),
	// then the upload date minus DEFAULT_SYMPTOM_ONSET_DAYS_AGO is used.
	SymptomOnsetDaysAgo uint `env:"DEFAULT_SYMPTOM_ONSET_DAYS_AGO, default=4"`

	ResponsePaddingMinBytes int64 `env:"RESPONSE_PADDING_MIN_BYTES, default=1024"`
	ResponsePaddingRange    int64 `env:"RESPONSE_PADDING_RANGE, default=1024"`

	RevisionKeyCacheDuration time.Duration `env:"REVISION_KEY_CACHE_DURATION, default=1m"`

	// AllowPartialRevisions permits uploading multiple exposure keys with a
	// revision token where only a subset of the keys are in the token. In that
	// case, only the incoming exposure keys that match the revision token are
	// uploaded and the remainder are discarded.
	AllowPartialRevisions bool `env:"ALLOW_PARTIAL_REVISIONS, default=false"`

	// API Versions.
	EnableV1Alpha1API bool `env:"ENABLE_V1ALPHA1_API, default=true"`

	// If set and if a publish request has no regions (v1alpha1) and the health authority
	// has no regions configured, then this default will be assumed.
	// This is present for an upgrade edgecase where empty region list used to mean "all regions"
	// Should only be set if a server is being operated in a single region.
	DefaultRegion string `env:"DEFAULT_REGION"`

	// Flags for local development and testing. This will cause still valid keys
	// to not be embargoed.
	// Normally "still valid" keys can be accepted, but are embargoed.
	ReleaseSameDayKeys      bool `env:"DEBUG_RELEASE_SAME_DAY_KEYS"`
	DebugLogBadCertificates bool `env:"DEBUG_LOG_BAD_CERTIFICATES"`

	// Publish stats API config
	// Minimum number of publish requests that need to be present to see stats for a given day.
	// If the minimum is not met, that day is not revealed or shown in aggregates.
	StatsUploadMinimum           int64 `env:"STATS_UPLOAD_MINIMUM, default=10"`
	StatsResponsePaddingMinBytes int64 `env:"RESPONSE_PADDING_MIN_BYTES, default=2048"`
	StatsResponsePaddingRange    int64 `env:"RESPONSE_PADDING_RANGE, default=1024"`

    Config represents the configuration and associated environment variables for the publish components.

    func (*Config) AuthorizedAppConfig

    func (c *Config) AuthorizedAppConfig() *authorizedapp.Config

    func (*Config) DatabaseConfig

    func (c *Config) DatabaseConfig() *database.Config

    func (*Config) DebugReleaseSameDayKeys

    func (c *Config) DebugReleaseSameDayKeys() bool

    func (*Config) DefaultSymptomOnsetDaysAgo

    func (c *Config) DefaultSymptomOnsetDaysAgo() uint

    func (*Config) KeyManagerConfig

    func (c *Config) KeyManagerConfig() *keys.Config

    func (*Config) MaintenanceMode

    func (c *Config) MaintenanceMode() bool

    func (*Config) MaxExposureKeys

    func (c *Config) MaxExposureKeys() uint

    func (*Config) MaxIntervalStartAge

    func (c *Config) MaxIntervalStartAge() time.Duration

    func (*Config) MaxSameDayKeys

    func (c *Config) MaxSameDayKeys() uint

    func (*Config) MaxSymptomOnsetDays

    func (c *Config) MaxSymptomOnsetDays() uint

    func (*Config) MaxValidSymptomOnsetReportDays

    func (c *Config) MaxValidSymptomOnsetReportDays() uint

    func (*Config) ObservabilityExporterConfig

    func (c *Config) ObservabilityExporterConfig() *observability.Config

    func (*Config) SecretManagerConfig

    func (c *Config) SecretManagerConfig() *secrets.Config

    func (*Config) TruncateWindow

    func (c *Config) TruncateWindow() time.Duration

    func (*Config) Validate

    func (c *Config) Validate() error

    type Server

    type Server struct {
    	// contains filtered or unexported fields

    func NewServer

    func NewServer(ctx context.Context, cfg *Config, env *serverenv.ServerEnv) (*Server, error)

    func (*Server) Routes

    func (s *Server) Routes(ctx context.Context) *mux.Router


    Path Synopsis
    Package database is a database interface to publish.
    Package database is a database interface to publish.
    Package model is a model abstraction of publish.
    Package model is a model abstraction of publish.