model

package
v0.9.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 22, 2020 License: Apache-2.0 Imports: 12 Imported by: 0

Documentation

Overview

Package model is a model abstraction of publish.

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrorExposureKeyMismatch - internal coding error, tried to revise key A by passing in key B
	ErrorExposureKeyMismatch = fmt.Errorf("attempted to revise a key with a different key")
	// ErrorNonLocalProvenance - key revision attempted on federated key, which is not allowed
	ErrorNonLocalProvenance = fmt.Errorf("key not origionally uploaded to this server, cannot revise")
	// ErrorKeyAlreadyRevised - attempt to revise a key that has already been revised.
	ErrorKeyAlreadyRevised = fmt.Errorf("key has already been revised and cannot be revised again")
)

Functions

func DaysFromSymptomOnset

func DaysFromSymptomOnset(onsetInterval int32, checkInterval int32) int32

DaysFromSymptomOnset calculates the number of days between two start intervals. Partial days are rounded up/down to the closest day. If the checkInterval is before the onsetInterval, number of days will be negative.

func IntervalNumber

func IntervalNumber(t time.Time) int32

IntervalNumber calculates the exposure notification system interval number based on the input time.

func ReportTypeTransmissionRisk

func ReportTypeTransmissionRisk(reportType string, providedTR int) int

ReportTypeTransmissionRisk will calculate the backfill, default Transmission Risk. If there is a provided transmission risk that is non-zero, that will be used, otherwise this mapping is used: * Confirmed Test -> 2 * Clinical Diagnosis -> 4 * Negative -> 6 See constants defined in pkg/api/v1alpha1/verification_types.go

func TimeForIntervalNumber

func TimeForIntervalNumber(interval int32) time.Time

TimeForIntervalNumber returns the time at which a specific interval starts. The interval number * 600 (10m = 600s) is the corresponding unix timestamp.

func TruncateWindow

func TruncateWindow(t time.Time, d time.Duration) time.Time

TruncateWindow truncates a time based on the size of the creation window.

Types

type ErrorKeyInvalidReportTypeTransition added in v0.8.0

type ErrorKeyInvalidReportTypeTransition struct {
	// contains filtered or unexported fields
}

ErrorKeyInvalidReportTypeTransition is an error returned when the TEK tried to move to an invalid state (e.g. positive -> likely).

func (*ErrorKeyInvalidReportTypeTransition) Error added in v0.8.0

Error implements error.

type Exposure

type Exposure struct {
	ExposureKey      []byte
	TransmissionRisk int
	AppPackageName   string
	Regions          []string
	Traveler         bool
	IntervalNumber   int32
	IntervalCount    int32
	CreatedAt        time.Time
	LocalProvenance  bool
	FederationSyncID int64

	// These fields are nullable to maintain backwards compatibility with
	// older versions that predate their existence.
	HealthAuthorityID     *int64
	ReportType            string
	DaysSinceSymptomOnset *int32

	// Fields to support key revision.
	RevisedReportType            *string
	RevisedAt                    *time.Time
	RevisedDaysSinceSymptomOnset *int32
	RevisedTransmissionRisk      *int
	// contains filtered or unexported fields
}

Exposure represents the record as stored in the database

func ReviseKeys

func ReviseKeys(ctx context.Context, existing map[string]*Exposure, incoming []*Exposure) ([]*Exposure, error)

ReviseKeys takes a set of existing keys, and a list of keys currently being uploaded. Only keys that need to be revised or are being created for the first time are returned in the output set.

func TransformExposureKey

func TransformExposureKey(exposureKey verifyapi.ExposureKey, appPackageName string, upcaseRegions []string, settings *KeyTransform) (*Exposure, error)

TransformExposureKey converts individual key data to an exposure entity. Validations during the transform include:

* exposure keys are exactly 16 bytes in length after base64 decoding * minInterval <= interval number +intervalCount <= maxInterval * MinIntervalCount <= interval count <= MaxIntervalCount

func (*Exposure) AddMissingRegions

func (e *Exposure) AddMissingRegions(regions []string)

AddMissingRegions will merge the input regions into the regions already on the exposure. Set union operation.

func (*Exposure) ExposureKeyBase64

func (e *Exposure) ExposureKeyBase64() string

ExposureKeyBase64 returns the ExposureKey property base64 encoded.

func (*Exposure) HasBeenRevised

func (e *Exposure) HasBeenRevised() bool

HasBeenRevised returns true if this key has been revised. This is indicated by the RevisedAt time not being nil.

func (*Exposure) HasDaysSinceSymptomOnset

func (e *Exposure) HasDaysSinceSymptomOnset() bool

HasDaysSinceSymptomOnset returns true if the this key has the days since symptom onset field is et.

func (*Exposure) HasHealthAuthorityID

func (e *Exposure) HasHealthAuthorityID() bool

HasHealthAuthorityID returns true if this Exposure has a health authority ID.

func (*Exposure) Revise

func (e *Exposure) Revise(in *Exposure) (bool, error)

Revise updates the Revised fields of a key

func (*Exposure) SetDaysSinceSymptomOnset

func (e *Exposure) SetDaysSinceSymptomOnset(d int32)

SetDaysSinceSymptomOnset sets the days since symptom onset field, possibly allocating a new pointer.

func (*Exposure) SetHealthAuthorityID

func (e *Exposure) SetHealthAuthorityID(haID int64)

SetHealthAuthorityID assigned a health authority ID. Typically done during transform.

func (*Exposure) SetRevisedAt

func (e *Exposure) SetRevisedAt(t time.Time) error

SetRevisedAt will set the revision time on this Exposure. The RevisedAt timestamp can only be set once. Attempting to set it again will result in an error.

func (*Exposure) SetRevisedDaysSinceSymptomOnset

func (e *Exposure) SetRevisedDaysSinceSymptomOnset(d int32)

SetRevisedDaysSinceSymptomOnset will set the revised days since symptom onset.

func (*Exposure) SetRevisedReportType

func (e *Exposure) SetRevisedReportType(rt string)

SetRevisedReportType will set the revised report type.

func (*Exposure) SetRevisedTransmissionRisk

func (e *Exposure) SetRevisedTransmissionRisk(tr int)

SetRevisedTransmissionRisk will set the revised transmission risk.

type KeyTransform

type KeyTransform struct {
	MinStartInterval      int32
	MaxStartInterval      int32
	MaxEndInteral         int32
	CreatedAt             time.Time
	ReleaseStillValidKeys bool
	BatchWindow           time.Duration
}

KeyTransform represents the settings to apply when transforming an individual key on a publish request.

type Transformer

type Transformer struct {
	// contains filtered or unexported fields
}

Transformer represents a configured Publish -> Exposure[] transformer.

func NewTransformer

func NewTransformer(config TransformerConfig) (*Transformer, error)

NewTransformer creates a transformer for turning publish API requests into records for insertion into the database. On the call to TransformPublish all data is validated according to the transformer that is used.

func (*Transformer) TransformPublish

func (t *Transformer) TransformPublish(ctx context.Context, inData *verifyapi.Publish, regions []string, claims *verification.VerifiedClaims, batchTime time.Time) ([]*Exposure, []string, error)

TransformPublish converts incoming key data to a list of exposure entities. The data in the request is validated during the transform, including:

* 0 exposure Keys in the requests * > Transformer.maxExposureKeys in the request

The return params are the list of exposures, a list of warnings, and any errors that occur.

type TransformerConfig

type TransformerConfig interface {
	MaxExposureKeys() uint
	MaxSameDayKeys() uint
	MaxIntervalStartAge() time.Duration
	TruncateWindow() time.Duration
	MaxSymptomOnsetDays() uint
	DebugReleaseSameDayKeys() bool
}

TransformerConfig defines the interface that is needed to configure a `Transformer`

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL