exposure-notifications-server: github.com/google/exposure-notifications-server/internal/publish/model Index | Files

package model

import "github.com/google/exposure-notifications-server/internal/publish/model"

Package model is a model abstraction of publish.


Package Files



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")

func DaysFromSymptomOnset Uses

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 Uses

func IntervalNumber(t time.Time) int32

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

func ReportTypeTransmissionRisk Uses

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 Uses

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 Uses

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

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

type ErrorKeyInvalidReportTypeTransition Uses

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 Uses

func (e *ErrorKeyInvalidReportTypeTransition) Error() string

Error implements error.

type Exposure Uses

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 Uses

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 Uses

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 Uses

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 Uses

func (e *Exposure) ExposureKeyBase64() string

ExposureKeyBase64 returns the ExposureKey property base64 encoded.

func (*Exposure) HasBeenRevised Uses

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 Uses

func (e *Exposure) HasDaysSinceSymptomOnset() bool

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

func (*Exposure) HasHealthAuthorityID Uses

func (e *Exposure) HasHealthAuthorityID() bool

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

func (*Exposure) Revise Uses

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

Revise updates the Revised fields of a key

func (*Exposure) SetDaysSinceSymptomOnset Uses

func (e *Exposure) SetDaysSinceSymptomOnset(d int32)

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

func (*Exposure) SetHealthAuthorityID Uses

func (e *Exposure) SetHealthAuthorityID(haID int64)

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

func (*Exposure) SetRevisedAt Uses

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 Uses

func (e *Exposure) SetRevisedDaysSinceSymptomOnset(d int32)

SetRevisedDaysSinceSymptomOnset will set the revised days since symptom onset.

func (*Exposure) SetRevisedReportType Uses

func (e *Exposure) SetRevisedReportType(rt string)

SetRevisedReportType will set the revised report type.

func (*Exposure) SetRevisedTransmissionRisk Uses

func (e *Exposure) SetRevisedTransmissionRisk(tr int)

SetRevisedTransmissionRisk will set the revised transmission risk.

type KeyTransform Uses

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 Uses

type Transformer struct {
    // contains filtered or unexported fields

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

func NewTransformer Uses

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 Uses

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 Uses

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`

Package model imports 12 packages (graph) and is imported by 7 packages. Updated 2020-09-27. Refresh now. Tools for package owners.