datastore

package
v0.7.4 Latest Latest
Warning

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

Go to latest
Published: Nov 25, 2022 License: MPL-2.0 Imports: 22 Imported by: 2

Documentation

Index

Constants

View Source
const (
	ConfigCollection              = "configurations"
	GroupCollection               = "groups"
	OrganisationCollection        = "organisations"
	OrganisationInvitesCollection = "organisation_invites"
	OrganisationMembersCollection = "organisation_members"
	AppCollection                 = "applications"
	EventCollection               = "events"
	SourceCollection              = "sources"
	UserCollection                = "users"
	SubscriptionCollection        = "subscriptions"
	EventDeliveryCollection       = "eventdeliveries"
	APIKeyCollection              = "apiKeys"
	DeviceCollection              = "devices"
)
View Source
const (
	DefaultStrategyProvider     = LinearStrategyProvider
	LinearStrategyProvider      = "linear"
	ExponentialStrategyProvider = "exponential"
)

Variables

View Source
var (
	DefaultStrategyConfig = StrategyConfiguration{
		Type:       DefaultStrategyProvider,
		Duration:   100,
		RetryCount: 10,
	}

	DefaultRateLimitConfig = RateLimitConfiguration{
		Count:    1000,
		Duration: 60,
	}

	DefaultRetryConfig = RetryConfiguration{
		Type:       LinearStrategyProvider,
		Duration:   10,
		RetryCount: 3,
	}

	DefaultAlertConfig = AlertConfiguration{
		Count:     4,
		Threshold: "1h",
	}
	DefaultStoragePolicy = StoragePolicyConfiguration{
		Type: OnPrem,
		OnPrem: &OnPremStorage{
			Path: convoy.DefaultOnPremDir,
		},
	}

	DefaultRetentionPolicy = RetentionPolicyConfiguration{
		Policy: "60d",
	}
)
View Source
var (
	ErrOrgNotFound       = errors.New("organisation not found")
	ErrDeviceNotFound    = errors.New("device not found")
	ErrOrgInviteNotFound = errors.New("organisation invite not found")
	ErrOrgMemberNotFound = errors.New("organisation member not found")
)
View Source
var (
	ErrUserNotFound                  = errors.New("user not found")
	ErrSourceNotFound                = errors.New("source not found")
	ErrEventNotFound                 = errors.New("event not found")
	ErrGroupNotFound                 = errors.New("group not found")
	ErrAPIKeyNotFound                = errors.New("api key not found")
	ErrEndpointNotFound              = errors.New("endpoint not found")
	ErrApplicationNotFound           = errors.New("application not found")
	ErrSubscriptionNotFound          = errors.New("subscription not found")
	ErrEventDeliveryNotFound         = errors.New("event delivery not found")
	ErrEventDeliveryAttemptNotFound  = errors.New("event delivery attempt not found")
	ErrDuplicateAppName              = errors.New("an application with this name exists")
	ErrNotAuthorisedToAccessDocument = errors.New("your credentials cannot access or modify this resource")
	ErrConfigNotFound                = errors.New("config not found")
	ErrDuplicateGroupName            = errors.New("a group with this name already exists")
	ErrDuplicateEmail                = errors.New("a user with this email already exists")
	ErrNoActiveSecret                = errors.New("no active secret found")
)
View Source
var ErrInvalidCollection = errors.New("Invalid collection type")
View Source
var (
	ErrInvalidPtr = errors.New("out param is not a valid pointer")
)
View Source
var PeriodValues = map[string]Period{
	"daily":   Daily,
	"weekly":  Weekly,
	"monthly": Monthly,
	"yearly":  Yearly,
}

Functions

func IsValidPeriod

func IsValidPeriod(period string) bool

func IsValidPointer added in v0.6.0

func IsValidPointer(i interface{}) bool

Types

type APIKey

type APIKey struct {
	ID        primitive.ObjectID `json:"-" bson:"_id"`
	UID       string             `json:"uid" bson:"uid"`
	MaskID    string             `json:"mask_id,omitempty" bson:"mask_id"`
	Name      string             `json:"name" bson:"name"`
	Role      auth.Role          `json:"role" bson:"role"`
	Hash      string             `json:"hash,omitempty" bson:"hash"`
	Salt      string             `json:"salt,omitempty" bson:"salt"`
	Type      KeyType            `json:"key_type" bson:"key_type"`
	UserID    string             `json:"user_id" bson:"user_id"`
	ExpiresAt primitive.DateTime `json:"expires_at,omitempty" bson:"expires_at,omitempty"`
	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

type APIKeyRepository

type APIKeyRepository interface {
	CreateAPIKey(context.Context, *APIKey) error
	UpdateAPIKey(context.Context, *APIKey) error
	FindAPIKeyByID(context.Context, string) (*APIKey, error)
	FindAPIKeyByMaskID(context.Context, string) (*APIKey, error)
	FindAPIKeyByHash(context.Context, string) (*APIKey, error)
	RevokeAPIKeys(context.Context, []string) error
	LoadAPIKeysPaged(context.Context, *ApiKeyFilter, *Pageable) ([]APIKey, PaginationData, error)
}

type AlertConfiguration added in v0.6.0

type AlertConfiguration struct {
	Count     int    `json:"count" bson:"count,omitempty"`
	Threshold string `json:"threshold" bson:"threshold,omitempty" valid:"duration~please provide a valid time duration"`
}

type ApiKey added in v0.6.0

type ApiKey struct {
	HeaderValue string `json:"header_value" bson:"header_value" valid:"required"`
	HeaderName  string `json:"header_name" bson:"header_name" valid:"required"`
}

type ApiKeyFilter added in v0.7.0

type ApiKeyFilter struct {
	GroupID string
	AppID   string
	UserID  string
	KeyType KeyType
}

type AppMap added in v0.6.0

type AppMap map[string]*Application

type AppMetadata

type AppMetadata struct {
	UID          string `json:"uid" bson:"uid"`
	Title        string `json:"title" bson:"title"`
	GroupID      string `json:"group_id" bson:"group_id"`
	SupportEmail string `json:"support_email" bson:"support_email"`
}

type Application

type Application struct {
	ID              primitive.ObjectID `json:"-" bson:"_id"`
	UID             string             `json:"uid" bson:"uid"`
	GroupID         string             `json:"group_id" bson:"group_id"`
	Title           string             `json:"name" bson:"title"`
	SupportEmail    string             `json:"support_email,omitempty" bson:"support_email"`
	SlackWebhookURL string             `json:"slack_webhook_url,omitempty" bson:"slack_webhook_url"`
	IsDisabled      bool               `json:"is_disabled,omitempty" bson:"is_disabled"`

	Endpoints []Endpoint         `json:"endpoints,omitempty" bson:"endpoints"`
	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`

	Events int64 `json:"events,omitempty" bson:"-"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

func (*Application) FindEndpoint added in v0.7.2

func (app *Application) FindEndpoint(id string) (*Endpoint, error)

type ApplicationRepository

type ApplicationRepository interface {
	CreateApplication(context.Context, *Application, string) error
	LoadApplicationsPaged(context.Context, string, string, Pageable) ([]Application, PaginationData, error)
	FindApplicationByID(context.Context, string) (*Application, error)
	UpdateApplication(context.Context, *Application, string) error
	DeleteApplication(context.Context, *Application) error
	CountGroupApplications(ctx context.Context, groupID string) (int64, error)
	DeleteGroupApps(context.Context, string) error
	LoadApplicationsPagedByGroupId(context.Context, string, Pageable) ([]Application, PaginationData, error)
	SearchApplicationsByGroupId(context.Context, string, SearchParams) ([]Application, error)
	FindApplicationEndpointByID(context.Context, string, string) (*Endpoint, error)
	CreateApplicationEndpoint(context.Context, string, string, *Endpoint) error
	ExpireSecret(ctx context.Context, appID string, endpointID string, secrets []Secret) error
}

type BasicAuth added in v0.6.0

type BasicAuth struct {
	UserName string `json:"username" bson:"username" valid:"required" `
	Password string `json:"password" bson:"password" valid:"required"`
}

type CLIMetadata added in v0.7.0

type CLIMetadata struct {
	EventType string `json:"event_type" bson:"event_type"`
	HostName  string `json:"host_name,omitempty" bson:"-"`
}

type CollectionKey added in v0.7.0

type CollectionKey string
const CollectionCtx CollectionKey = "collection"

type Configuration added in v0.6.0

type Configuration struct {
	ID                 primitive.ObjectID          `json:"-" bson:"_id"`
	UID                string                      `json:"uid" bson:"uid"`
	IsAnalyticsEnabled bool                        `json:"is_analytics_enabled" bson:"is_analytics_enabled"`
	IsSignupEnabled    bool                        `json:"is_signup_enabled" bson:"is_signup_enabled"`
	StoragePolicy      *StoragePolicyConfiguration `json:"storage_policy" bson:"storage_policy"`
	DocumentStatus     DocumentStatus              `json:"-" bson:"document_status"`

	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`
}

type ConfigurationRepository added in v0.6.0

type ConfigurationRepository interface {
	CreateConfiguration(context.Context, *Configuration) error
	LoadConfiguration(context.Context) (*Configuration, error)
	UpdateConfiguration(context.Context, *Configuration) error
}

type DeliveryAttempt

type DeliveryAttempt struct {
	ID         primitive.ObjectID `json:"-" bson:"_id"`
	UID        string             `json:"uid" bson:"uid"`
	MsgID      string             `json:"msg_id" bson:"msg_id"`
	URL        string             `json:"url" bson:"url"`
	Method     string             `json:"method" bson:"method"`
	EndpointID string             `json:"endpoint_id" bson:"endpoint_id"`
	APIVersion string             `json:"api_version" bson:"api_version"`

	IPAddress        string     `json:"ip_address,omitempty" bson:"ip_address,omitempty"`
	RequestHeader    HttpHeader `json:"request_http_header,omitempty" bson:"request_http_header,omitempty"`
	ResponseHeader   HttpHeader `json:"response_http_header,omitempty" bson:"response_http_header,omitempty"`
	HttpResponseCode string     `json:"http_status,omitempty" bson:"http_status,omitempty"`
	ResponseData     string     `json:"response_data,omitempty" bson:"response_data,omitempty"`
	Error            string     `json:"error,omitempty" bson:"error,omitempty"`
	Status           bool       `json:"status,omitempty" bson:"status,omitempty"`

	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`
}

type Device added in v0.7.0

type Device struct {
	ID             primitive.ObjectID `json:"-" bson:"_id"`
	UID            string             `json:"uid" bson:"uid"`
	GroupID        string             `json:"group_id,omitempty" bson:"group_id"`
	AppID          string             `json:"app_id,omitempty" bson:"app_id"`
	HostName       string             `json:"host_name,omitempty" bson:"host_name"`
	Status         DeviceStatus       `json:"status,omitempty" bson:"status"`
	DocumentStatus DocumentStatus     `json:"-" bson:"document_status"`
	LastSeenAt     primitive.DateTime `json:"last_seen_at,omitempty" bson:"last_seen_at,omitempty" swaggertype:"string"`
	CreatedAt      primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt      primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt      primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`
}

type DeviceMap added in v0.7.0

type DeviceMap map[string]*Device

type DeviceRepository added in v0.7.0

type DeviceRepository interface {
	CreateDevice(ctx context.Context, device *Device) error
	UpdateDevice(ctx context.Context, device *Device, appID, groupID string) error
	UpdateDeviceLastSeen(ctx context.Context, device *Device, appID, groupID string, status DeviceStatus) error
	DeleteDevice(ctx context.Context, uid string, appID, groupID string) error
	FetchDeviceByID(ctx context.Context, uid string, appID, groupID string) (*Device, error)
	FetchDeviceByHostName(ctx context.Context, hostName string, appID, groupID string) (*Device, error)
	LoadDevicesPaged(ctx context.Context, groupID string, filter *ApiKeyFilter, pageable Pageable) ([]Device, PaginationData, error)
}

type DeviceStatus added in v0.7.0

type DeviceStatus string
const (
	DeviceStatusOffline  DeviceStatus = "offline"
	DeviceStatusOnline   DeviceStatus = "online"
	DeviceStatusDisabled DeviceStatus = "disabled"
)

type DocumentStatus

type DocumentStatus string
const (
	ActiveDocumentStatus   DocumentStatus = "Active"
	InactiveDocumentStatus DocumentStatus = "Inactive"
	DeletedDocumentStatus  DocumentStatus = "Deleted"
)

type EncodingType added in v0.6.0

type EncodingType string
const (
	Base64Encoding EncodingType = "base64"
	HexEncoding    EncodingType = "hex"
)

func (EncodingType) String added in v0.7.2

func (e EncodingType) String() string

type Endpoint

type Endpoint struct {
	UID                string   `json:"uid" bson:"uid"`
	TargetURL          string   `json:"target_url" bson:"target_url"`
	Description        string   `json:"description" bson:"description"`
	Secret             string   `json:"-" bson:"secret"` // Deprecated but necessary for migration to run
	Secrets            []Secret `json:"secrets" bson:"secrets"`
	AdvancedSignatures bool     `json:"advanced_signatures" bson:"advanced_signatures"`

	HttpTimeout       string                  `json:"http_timeout" bson:"http_timeout"`
	RateLimit         int                     `json:"rate_limit" bson:"rate_limit"`
	RateLimitDuration string                  `json:"rate_limit_duration" bson:"rate_limit_duration"`
	Authentication    *EndpointAuthentication `json:"authentication" bson:"authentication"`

	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

func (*Endpoint) GetActiveSecretIndex added in v0.7.2

func (e *Endpoint) GetActiveSecretIndex() (int, error)

type EndpointAuthentication added in v0.7.0

type EndpointAuthentication struct {
	Type   EndpointAuthenticationType `json:"type,omitempty" bson:"type" valid:"optional,in(api_key)~unsupported authentication type"`
	ApiKey *ApiKey                    `json:"api_key" bson:"api_key"`
}

type EndpointAuthenticationType added in v0.7.0

type EndpointAuthenticationType string
const (
	APIKeyAuthentication EndpointAuthenticationType = "api_key"
)

type EndpointMap added in v0.6.0

type EndpointMap map[string]*Endpoint

type Event

type Event struct {
	ID               primitive.ObjectID `json:"-" bson:"_id"`
	UID              string             `json:"uid" bson:"uid"`
	EventType        EventType          `json:"event_type" bson:"event_type"`
	MatchedEndpoints int                `json:"matched_endpoints" bson:"matched_enpoints"` // TODO(all) remove this field

	// ProviderID is a custom ID that can be used to reconcile this Event
	// with your internal systems.
	// This is optional
	// If not provided, we will generate one for you
	ProviderID string                `json:"provider_id,omitempty" bson:"provider_id"`
	SourceID   string                `json:"source_id,omitempty" bson:"source_id"`
	GroupID    string                `json:"group_id,omitempty" bson:"group_id"`
	AppID      string                `json:"app_id,omitempty" bson:"app_id"`
	Headers    httpheader.HTTPHeader `json:"headers" bson:"headers"`
	App        *Application          `json:"app_metadata,omitempty" bson:"-"`
	Source     *Source               `json:"source_metadata,omitempty" bson:"-"`

	// Data is an arbitrary JSON value that gets sent as the body of the
	// webhook to the endpoints
	Data json.RawMessage `json:"data,omitempty" bson:"data"`

	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

Event defines a payload to be sent to an application

type EventDelivery

type EventDelivery struct {
	ID             primitive.ObjectID    `json:"-" bson:"_id"`
	UID            string                `json:"uid" bson:"uid"`
	AppID          string                `json:"app_id,omitempty" bson:"app_id"`
	GroupID        string                `json:"group_id,omitempty" bson:"group_id"`
	EventID        string                `json:"event_id,omitempty" bson:"event_id"`
	EndpointID     string                `json:"endpoint_id,omitempty" bson:"endpoint_id"`
	DeviceID       string                `json:"device_id" bson:"device_id"`
	SubscriptionID string                `json:"subscription_id,omitempty" bson:"subscription_id"`
	Headers        httpheader.HTTPHeader `json:"headers" bson:"headers"`

	Endpoint *Endpoint    `json:"endpoint_metadata,omitempty" bson:"-"`
	Event    *Event       `json:"event_metadata,omitempty" bson:"-"`
	App      *Application `json:"app_metadata,omitempty" bson:"-"`

	DeliveryAttempts []DeliveryAttempt   `json:"-" bson:"attempts"`
	Status           EventDeliveryStatus `json:"status" bson:"status"`
	Metadata         *Metadata           `json:"metadata" bson:"metadata"`
	CLIMetadata      *CLIMetadata        `json:"cli_metadata" bson:"cli_metadata"`
	Description      string              `json:"description,omitempty" bson:"description"`
	CreatedAt        primitive.DateTime  `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt        primitive.DateTime  `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt        primitive.DateTime  `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

Event defines a payload to be sent to an application

type EventDeliveryFilter added in v0.6.0

type EventDeliveryFilter struct {
	GroupID        string `json:"group_id" bson:"group_id"`
	CreatedAtStart int64  `json:"created_at_start" bson:"created_at_start"`
	CreatedAtEnd   int64  `json:"created_at_end" bson:"created_at_end"`
}

type EventDeliveryRepository

type EventDeliveryRepository interface {
	CreateEventDelivery(context.Context, *EventDelivery) error
	FindEventDeliveryByID(context.Context, string) (*EventDelivery, error)
	FindEventDeliveriesByIDs(context.Context, []string) ([]EventDelivery, error)
	FindEventDeliveriesByEventID(context.Context, string) ([]EventDelivery, error)
	CountDeliveriesByStatus(context.Context, EventDeliveryStatus, SearchParams) (int64, error)
	UpdateStatusOfEventDelivery(context.Context, EventDelivery, EventDeliveryStatus) error
	UpdateStatusOfEventDeliveries(context.Context, []string, EventDeliveryStatus) error
	FindDiscardedEventDeliveries(ctx context.Context, appId, deviceId string, searchParams SearchParams) ([]EventDelivery, error)

	UpdateEventDeliveryWithAttempt(context.Context, EventDelivery, DeliveryAttempt) error
	CountEventDeliveries(context.Context, string, string, string, []EventDeliveryStatus, SearchParams) (int64, error)
	DeleteGroupEventDeliveries(ctx context.Context, filter *EventDeliveryFilter, hardDelete bool) error
	LoadEventDeliveriesPaged(context.Context, string, string, string, []EventDeliveryStatus, SearchParams, Pageable) ([]EventDelivery, PaginationData, error)
}

type EventDeliveryStatus

type EventDeliveryStatus string
const (
	// ScheduledEventStatus : when  a Event has been scheduled for delivery
	ScheduledEventStatus  EventDeliveryStatus = "Scheduled"
	ProcessingEventStatus EventDeliveryStatus = "Processing"
	DiscardedEventStatus  EventDeliveryStatus = "Discarded"
	FailureEventStatus    EventDeliveryStatus = "Failure"
	SuccessEventStatus    EventDeliveryStatus = "Success"
	RetryEventStatus      EventDeliveryStatus = "Retry"
)

func (EventDeliveryStatus) IsValid added in v0.4.10

func (e EventDeliveryStatus) IsValid() bool

type EventFilter added in v0.6.0

type EventFilter struct {
	GroupID        string         `json:"group_id" bson:"group_id"`
	DocumentStatus DocumentStatus `json:"document_status" bson:"document_status"`
	CreatedAtStart int64          `json:"created_at_start" bson:"created_at_start"`
	CreatedAtEnd   int64          `json:"created_at_end" bson:"created_at_end"`
}

type EventInterval

type EventInterval struct {
	Data  EventIntervalData `json:"data" bson:"_id"`
	Count uint64            `json:"count" bson:"count"`
}

type EventIntervalData

type EventIntervalData struct {
	Interval int64  `json:"index" bson:"index"`
	Time     string `json:"date" bson:"total_time"`
}

type EventMap added in v0.6.0

type EventMap map[string]*Event

type EventRepository

type EventRepository interface {
	CreateEvent(context.Context, *Event) error
	LoadEventIntervals(context.Context, string, SearchParams, Period, int) ([]EventInterval, error)
	FindEventByID(ctx context.Context, id string) (*Event, error)
	FindEventsByIDs(context.Context, []string) ([]Event, error)
	CountGroupMessages(ctx context.Context, groupID string) (int64, error)
	LoadEventsPaged(context.Context, *Filter) ([]Event, PaginationData, error)
	DeleteGroupEvents(context.Context, *EventFilter, bool) error
}

type EventType

type EventType string

EventType is used to identify an specific event. This could be "user.new" This will be used for data indexing Makes it easy to filter by a list of events

type Filter added in v0.5.0

type Filter struct {
	Query        string
	Group        *Group
	AppID        string
	EventID      string
	SourceID     string
	Pageable     Pageable
	Status       []EventDeliveryStatus
	SearchParams SearchParams
}

type FilterBy added in v0.6.5

type FilterBy struct {
	AppID        string
	GroupID      string
	SourceID     string
	SearchParams SearchParams
}

func (*FilterBy) String added in v0.6.5

func (f *FilterBy) String() *string

type FilterConfiguration added in v0.6.0

type FilterConfiguration struct {
	EventTypes []string `json:"event_types" bson:"event_types,omitempty"`
}

type Group

type Group struct {
	ID             primitive.ObjectID `json:"-" bson:"_id"`
	UID            string             `json:"uid" bson:"uid"`
	Name           string             `json:"name" bson:"name"`
	LogoURL        string             `json:"logo_url" bson:"logo_url"`
	OrganisationID string             `json:"organisation_id" bson:"organisation_id"`
	Type           GroupType          `json:"type" bson:"type"`
	Config         *GroupConfig       `json:"config" bson:"config"`
	Statistics     *GroupStatistics   `json:"statistics" bson:"-"`

	// TODO(subomi): refactor this into the Instance API.
	RateLimit         int            `json:"rate_limit" bson:"rate_limit"`
	RateLimitDuration string         `json:"rate_limit_duration" bson:"rate_limit_duration"`
	Metadata          *GroupMetadata `json:"metadata" bson:"metadata"`

	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

func (*Group) IsDeleted

func (o *Group) IsDeleted() bool

func (*Group) IsOwner

func (o *Group) IsOwner(a *Application) bool

type GroupConfig

type GroupConfig struct {
	RateLimit                *RateLimitConfiguration       `json:"ratelimit"`
	Strategy                 *StrategyConfiguration        `json:"strategy"`
	Signature                *SignatureConfiguration       `json:"signature"`
	RetentionPolicy          *RetentionPolicyConfiguration `json:"retention_policy" bson:"retention_policy"`
	DisableEndpoint          bool                          `json:"disable_endpoint" bson:"disable_endpoint"`
	ReplayAttacks            bool                          `json:"replay_attacks" bson:"replay_attacks"`
	IsRetentionPolicyEnabled bool                          `json:"is_retention_policy_enabled" bson:"is_retention_policy_enabled"`
}

type GroupFilter

type GroupFilter struct {
	OrgID string   `json:"org_id" bson:"org_id"`
	Names []string `json:"name" bson:"name"`
}

func (*GroupFilter) ToGenericMap added in v0.6.0

func (g *GroupFilter) ToGenericMap() map[string]interface{}

func (*GroupFilter) WithNamesTrimmed added in v0.5.3

func (g *GroupFilter) WithNamesTrimmed() *GroupFilter

type GroupMetadata added in v0.6.0

type GroupMetadata struct {
	RetainedEvents int `json:"retained_events" bson:"retained_events"`
}

type GroupRepository

type GroupRepository interface {
	LoadGroups(context.Context, *GroupFilter) ([]*Group, error)
	CreateGroup(context.Context, *Group) error
	UpdateGroup(context.Context, *Group) error
	DeleteGroup(ctx context.Context, uid string) error
	FetchGroupByID(context.Context, string) (*Group, error)
	FetchGroupsByIDs(context.Context, []string) ([]Group, error)
	FillGroupsStatistics(ctx context.Context, groups []*Group) error
}

type GroupStatistics

type GroupStatistics struct {
	GroupID      string `json:"-" bson:"group_id"`
	MessagesSent int64  `json:"messages_sent" bson:"messages_sent"`
	TotalApps    int64  `json:"total_apps" bson:"total_apps"`
}

type GroupType added in v0.6.0

type GroupType string
const (
	OutgoingGroup GroupType = "outgoing"
	IncomingGroup GroupType = "incoming"
)

type HMac added in v0.6.0

type HMac struct {
	Header   string       `json:"header" bson:"header" valid:"required"`
	Hash     string       `json:"hash" bson:"hash" valid:"supported_hash,required"`
	Secret   string       `json:"secret" bson:"secret" valid:"required"`
	Encoding EncodingType `json:"encoding" bson:"encoding" valid:"supported_encoding~please provide a valid encoding type,required"`
}

type HttpHeader

type HttpHeader map[string]string

func (HttpHeader) SetHeadersInRequest added in v0.6.0

func (h HttpHeader) SetHeadersInRequest(r *http.Request)

type InviteStatus added in v0.6.0

type InviteStatus string
const (
	InviteStatusAccepted  InviteStatus = "accepted"
	InviteStatusDeclined  InviteStatus = "declined"
	InviteStatusPending   InviteStatus = "pending"
	InviteStatusCancelled InviteStatus = "cancelled"
)

func (InviteStatus) String added in v0.6.0

func (i InviteStatus) String() string

type KeyType

type KeyType string
const (
	ProjectKey   KeyType = "project"
	AppPortalKey KeyType = "app_portal"
	CLIKey       KeyType = "cli"
	PersonalKey  KeyType = "personal_key"
)

func (KeyType) IsValid added in v0.7.0

func (k KeyType) IsValid() bool

func (KeyType) IsValidAppKey added in v0.7.0

func (k KeyType) IsValidAppKey() bool

type Metadata

type Metadata struct {
	// Data to be sent to endpoint.
	Data     json.RawMessage  `json:"data" bson:"data"`
	Strategy StrategyProvider `json:"strategy" bson:"strategy"`

	NextSendTime primitive.DateTime `json:"next_send_time" bson:"next_send_time"`
	// NumTrials: number of times we have tried to deliver this Event to
	// an application
	NumTrials uint64 `json:"num_trials" bson:"num_trials"`

	IntervalSeconds uint64 `json:"interval_seconds" bson:"interval_seconds"`

	RetryLimit uint64 `json:"retry_limit" bson:"retry_limit"`
}

func (Metadata) Value

func (em Metadata) Value() (driver.Value, error)

type MongoStore added in v0.7.0

type MongoStore struct {
	IsConnected bool
	Database    *mongo.Database
}

func (*MongoStore) Aggregate added in v0.7.0

func (d *MongoStore) Aggregate(ctx context.Context, pipeline mongo.Pipeline, output interface{}, allowDiskUse bool) error

func (*MongoStore) Count added in v0.7.0

func (d *MongoStore) Count(ctx context.Context, filter map[string]interface{}) (int64, error)

func (*MongoStore) DeleteByID added in v0.7.0

func (d *MongoStore) DeleteByID(ctx context.Context, id string, hardDelete bool) error

*

  • DeleteByID
  • Deletes a single record by id
  • where ID can be a string or whatever. *
  • param: interface{} id
  • param: bool hardDelete
  • return: error
  • If hard delete is false, a soft delete is executed where the document status is changed.
  • If hardDelete is true, the document is completely deleted.

func (*MongoStore) DeleteMany added in v0.7.0

func (d *MongoStore) DeleteMany(ctx context.Context, filter, payload bson.M, hardDelete bool) error

*

  • DeleteMany
  • Hard Deletes many items in the collection
  • `filter` this is the search criteria *
  • param: bson.M filter
  • param: bool hardDelete
  • If hardDelete is false, a soft delete is executed where the document status is changed.
  • If hardDelete is true, the document is completely deleted.
  • return: error

func (*MongoStore) DeleteOne added in v0.7.0

func (d *MongoStore) DeleteOne(ctx context.Context, filter bson.M, hardDelete bool) error

*

  • DeleteOne
  • Deletes one item from the MongoStore using filter a hash map to properly filter what is to be deleted. *
  • param: bson.M filter
  • param: bool hardDelete
  • return: error
  • If hard delete is false, a soft delete is executed where the document status is changed.
  • If hardDelete is true, the document is completely deleted.

func (*MongoStore) FindAll added in v0.7.0

func (d *MongoStore) FindAll(ctx context.Context, filter bson.M, sort interface{}, projection, results interface{}) error

func (*MongoStore) FindByID added in v0.7.0

func (d *MongoStore) FindByID(ctx context.Context, id string, projection bson.M, result interface{}) error

*

  • FindByID
  • FindByID finds a single record by id in the MongoStore
  • returns nil if record is not found. *
  • param: interface{} id
  • param: bson.M projection
  • return: bson.M

func (*MongoStore) FindMany added in v0.7.0

func (d *MongoStore) FindMany(ctx context.Context, filter, projection bson.M, sort interface{}, page, limit int64, results interface{}) (PaginationData, error)

func (*MongoStore) FindManyWithDeletedAt added in v0.7.0

func (d *MongoStore) FindManyWithDeletedAt(ctx context.Context, filter, projection bson.M, sort interface{}, limit, skip int64, results interface{}) error

func (*MongoStore) FindOne added in v0.7.0

func (d *MongoStore) FindOne(ctx context.Context, filter, projection bson.M, result interface{}) error

*

  • Find One by

func (*MongoStore) Inc added in v0.7.0

func (d *MongoStore) Inc(ctx context.Context, filter bson.M, payload interface{}) error

func (*MongoStore) Save added in v0.7.0

func (d *MongoStore) Save(ctx context.Context, payload interface{}, out interface{}) error

*

  • Save
  • Save is used to save a record in the MongoStore

func (*MongoStore) SaveMany added in v0.7.0

func (d *MongoStore) SaveMany(ctx context.Context, payload []interface{}) error

*

  • SaveMany
  • SaveMany is used to bulk insert into the MongoStore *
  • param: []interface{} payload
  • return: error

func (*MongoStore) UpdateByID added in v0.7.0

func (d *MongoStore) UpdateByID(ctx context.Context, id string, payload interface{}) error

*

  • UpdateByID
  • Updates a single record by id in the MongoStore *
  • param: interface{} id
  • param: interface{} payload
  • return: error

func (*MongoStore) UpdateMany added in v0.7.0

func (d *MongoStore) UpdateMany(ctx context.Context, filter, payload bson.M, bulk bool) error

*

  • UpdateMany
  • Updates many items in the collection
  • `filter` this is the search criteria
  • `payload` this is the update payload. *
  • param: bson.M filter
  • param: interface{} payload
  • return: error

func (*MongoStore) UpdateOne added in v0.7.0

func (d *MongoStore) UpdateOne(ctx context.Context, filter bson.M, payload interface{}) error

func (*MongoStore) WithTransaction added in v0.7.0

func (d *MongoStore) WithTransaction(ctx context.Context, fn func(sessCtx mongo.SessionContext) error) error

type OnPremStorage added in v0.6.0

type OnPremStorage struct {
	Path string `json:"path" bson:"path"`
}

type Organisation added in v0.6.0

type Organisation struct {
	ID             primitive.ObjectID `json:"-" bson:"_id"`
	UID            string             `json:"uid" bson:"uid"`
	OwnerID        string             `json:"-" bson:"owner_id"`
	Name           string             `json:"name" bson:"name"`
	DocumentStatus DocumentStatus     `json:"-" bson:"document_status"`
	CreatedAt      primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt      primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt      primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`
}

type OrganisationInvite added in v0.6.0

type OrganisationInvite struct {
	ID             primitive.ObjectID `json:"-" bson:"_id"`
	UID            string             `json:"uid" bson:"uid"`
	OrganisationID string             `json:"organisation_id" bson:"organisation_id"`
	InviteeEmail   string             `json:"invitee_email" bson:"invitee_email"`
	Token          string             `json:"token" bson:"token"`
	Role           auth.Role          `json:"role" bson:"role"`
	Status         InviteStatus       `json:"status" bson:"status"`
	DocumentStatus DocumentStatus     `json:"-" bson:"document_status"`
	ExpiresAt      primitive.DateTime `json:"-" bson:"expires_at"`
	CreatedAt      primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt      primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt      primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`
}

type OrganisationInviteRepository added in v0.6.0

type OrganisationInviteRepository interface {
	LoadOrganisationsInvitesPaged(ctx context.Context, orgID string, inviteStatus InviteStatus, pageable Pageable) ([]OrganisationInvite, PaginationData, error)
	CreateOrganisationInvite(ctx context.Context, iv *OrganisationInvite) error
	UpdateOrganisationInvite(ctx context.Context, iv *OrganisationInvite) error
	DeleteOrganisationInvite(ctx context.Context, uid string) error
	FetchOrganisationInviteByID(ctx context.Context, uid string) (*OrganisationInvite, error)
	FetchOrganisationInviteByToken(ctx context.Context, token string) (*OrganisationInvite, error)
}

type OrganisationMember added in v0.6.0

type OrganisationMember struct {
	ID             primitive.ObjectID `json:"-" bson:"_id"`
	UID            string             `json:"uid" bson:"uid"`
	OrganisationID string             `json:"organisation_id" bson:"organisation_id"`
	UserID         string             `json:"user_id" bson:"user_id"`
	Role           auth.Role          `json:"role" bson:"role"`
	UserMetadata   *UserMetadata      `json:"user_metadata" bson:"-"`
	DocumentStatus DocumentStatus     `json:"-" bson:"document_status"`
	CreatedAt      primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt      primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt      primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`
}

type OrganisationMemberRepository added in v0.6.0

type OrganisationMemberRepository interface {
	LoadOrganisationMembersPaged(ctx context.Context, organisationID string, pageable Pageable) ([]*OrganisationMember, PaginationData, error)
	LoadUserOrganisationsPaged(ctx context.Context, userID string, pageable Pageable) ([]Organisation, PaginationData, error)
	CreateOrganisationMember(ctx context.Context, member *OrganisationMember) error
	UpdateOrganisationMember(ctx context.Context, member *OrganisationMember) error
	DeleteOrganisationMember(ctx context.Context, memberID string, orgID string) error
	FetchOrganisationMemberByID(ctx context.Context, memberID string, organisationID string) (*OrganisationMember, error)
	FetchOrganisationMemberByUserID(ctx context.Context, userID string, organisationID string) (*OrganisationMember, error)
}

type OrganisationRepository added in v0.6.0

type OrganisationRepository interface {
	LoadOrganisationsPaged(context.Context, Pageable) ([]Organisation, PaginationData, error)
	CreateOrganisation(context.Context, *Organisation) error
	UpdateOrganisation(context.Context, *Organisation) error
	DeleteOrganisation(context.Context, string) error
	FetchOrganisationByID(context.Context, string) (*Organisation, error)
}

type Pageable

type Pageable struct {
	Page    int `json:"page" bson:"page"`
	PerPage int `json:"per_page" bson:"per_page"`
	Sort    int `json:"sort" bson:"sort"`
}

type PaginationData

type PaginationData struct {
	Total     int64 `json:"total"`
	Page      int64 `json:"page"`
	PerPage   int64 `json:"perPage"`
	Prev      int64 `json:"prev"`
	Next      int64 `json:"next"`
	TotalPage int64 `json:"totalPage"`
}

type Password added in v0.6.0

type Password struct {
	Plaintext string
	Hash      []byte
}

func (*Password) GenerateHash added in v0.6.0

func (p *Password) GenerateHash() error

func (*Password) Matches added in v0.6.0

func (p *Password) Matches() (bool, error)

type Period

type Period int
const (
	Daily Period = iota
	Weekly
	Monthly
	Yearly
)

type ProviderConfig added in v0.6.0

type ProviderConfig struct {
	Twitter *TwitterProviderConfig `json:"twitter" bson:"twitter"`
}

type RateLimitConfiguration added in v0.6.0

type RateLimitConfiguration struct {
	Count    int    `json:"count" bson:"count"`
	Duration uint64 `json:"duration" bson:"duration"`
}

type RetentionPolicyConfiguration added in v0.6.0

type RetentionPolicyConfiguration struct {
	Policy string `json:"policy" valid:"required~please provide a valid retention policy"`
}

type RetryConfiguration added in v0.6.0

type RetryConfiguration struct {
	Type       StrategyProvider `json:"type,omitempty" bson:"type,omitempty" valid:"supported_retry_strategy~please provide a valid retry strategy type"`
	Duration   uint64           `json:"duration,omitempty" bson:"duration,omitempty" valid:"duration~please provide a valid time duration"`
	RetryCount uint64           `json:"retry_count" bson:"retry_count" valid:"int~please provide a valid retry count"`
}

type S3Storage added in v0.6.0

type S3Storage struct {
	Bucket       string `json:"bucket" bson:"bucket" valid:"required~please provide a bucket name"`
	AccessKey    string `json:"access_key,omitempty" bson:"access_key" valid:"required~please provide an access key"`
	SecretKey    string `json:"secret_key,omitempty" bson:"secret_key" valid:"required~please provide a secret key"`
	Region       string `json:"region,omitempty" bson:"region"`
	SessionToken string `json:"-" bson:"session_token"`
	Endpoint     string `json:"endpoint,omitempty" bson:"endpoint"`
}

type SearchFilter added in v0.6.5

type SearchFilter struct {
	Query    string
	FilterBy FilterBy
	Pageable Pageable
}

type SearchParams

type SearchParams struct {
	CreatedAtStart int64 `json:"created_at_start" bson:"created_at_start"`
	CreatedAtEnd   int64 `json:"created_at_end" bson:"created_at_end"`
}

type Secret added in v0.7.2

type Secret struct {
	UID   string `json:"uid" bson:"uid"`
	Value string `json:"value" bson:"value"`

	ExpiresAt      primitive.DateTime `json:"expires_at,omitempty" bson:"expires_at,omitempty" swaggertype:"string"`
	CreatedAt      primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt      primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt      primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`
	DocumentStatus DocumentStatus     `json:"-" bson:"document_status"`
}

type SignatureConfiguration

type SignatureConfiguration struct {
	Header   config.SignatureHeaderProvider `json:"header,omitempty" valid:"required~please provide a valid signature header"`
	Versions []SignatureVersion             `json:"versions" bson:"versions"`

	Hash string `json:"-" bson:"hash"`
}

func GetDefaultSignatureConfig added in v0.7.2

func GetDefaultSignatureConfig() *SignatureConfiguration

type SignatureVersion added in v0.7.2

type SignatureVersion struct {
	UID       string             `json:"uid" bson:"uid"`
	Hash      string             `json:"hash,omitempty" valid:"required~please provide a valid hash,supported_hash~unsupported hash type"`
	Encoding  EncodingType       `json:"encoding" bson:"encoding" valid:"required~please provide a valid signature header"`
	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
}

type Source added in v0.6.0

type Source struct {
	ID             primitive.ObjectID `json:"-" bson:"_id"`
	UID            string             `json:"uid" bson:"uid"`
	GroupID        string             `json:"group_id" bson:"group_id"`
	MaskID         string             `json:"mask_id" bson:"mask_id"`
	Name           string             `json:"name" bson:"name"`
	Type           SourceType         `json:"type" bson:"type"`
	Provider       SourceProvider     `json:"provider" bson:"provider"`
	IsDisabled     bool               `json:"is_disabled" bson:"is_disabled"`
	Verifier       *VerifierConfig    `json:"verifier" bson:"verifier"`
	ProviderConfig *ProviderConfig    `json:"provider_config" bson:"provider_config"`
	ForwardHeaders []string           `json:"forward_headers" bson:"forward_headers"`

	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at" swaggertype:"string"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at" swaggertype:"string"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at" swaggertype:"string"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

type SourceFilter added in v0.6.0

type SourceFilter struct {
	Type     string
	Provider string
}

type SourceMap added in v0.6.0

type SourceMap map[string]*Source

type SourceProvider added in v0.6.0

type SourceProvider string
const (
	GithubSourceProvider  SourceProvider = "github"
	TwitterSourceProvider SourceProvider = "twitter"
	ShopifySourceProvider SourceProvider = "shopify"
)

func (SourceProvider) IsValid added in v0.7.0

func (s SourceProvider) IsValid() bool

type SourceRepository added in v0.6.0

type SourceRepository interface {
	CreateSource(context.Context, *Source) error
	UpdateSource(ctx context.Context, groupID string, source *Source) error
	FindSourceByID(ctx context.Context, groupID string, id string) (*Source, error)
	FindSourceByMaskID(ctx context.Context, maskID string) (*Source, error)
	DeleteSourceByID(ctx context.Context, groupID string, id string) error
	LoadSourcesPaged(ctx context.Context, groupID string, filter *SourceFilter, pageable Pageable) ([]Source, PaginationData, error)
}

type SourceType added in v0.6.0

type SourceType string
const (
	HTTPSource     SourceType = "http"
	RestApiSource  SourceType = "rest_api"
	PubSubSource   SourceType = "pub_sub"
	DBChangeStream SourceType = "db_change_stream"
)

func (SourceType) IsValid added in v0.7.0

func (s SourceType) IsValid() bool

type StoragePolicyConfiguration added in v0.6.0

type StoragePolicyConfiguration struct {
	Type   StorageType    `json:"type,omitempty" bson:"type" valid:"supported_storage~please provide a valid storage type,required"`
	S3     *S3Storage     `json:"s3" bson:"s3"`
	OnPrem *OnPremStorage `json:"on_prem" bson:"on_prem"`
}

type StorageType added in v0.6.0

type StorageType string
const (
	S3     StorageType = "s3"
	OnPrem StorageType = "on_prem"
)

type Store added in v0.6.0

type Store interface {
	Save(ctx context.Context, payload interface{}, result interface{}) error
	SaveMany(ctx context.Context, payload []interface{}) error

	FindByID(ctx context.Context, id string, projection bson.M, result interface{}) error
	FindOne(ctx context.Context, filter, projection bson.M, result interface{}) error
	FindMany(ctx context.Context, filter, projection bson.M, sort interface{}, page, limit int64, results interface{}) (PaginationData, error)
	FindManyWithDeletedAt(ctx context.Context, filter, projection bson.M, sort interface{}, limit, skip int64, results interface{}) error
	FindAll(ctx context.Context, filter bson.M, sort interface{}, projection, results interface{}) error

	UpdateByID(ctx context.Context, id string, payload interface{}) error
	UpdateOne(ctx context.Context, filter bson.M, payload interface{}) error
	UpdateMany(ctx context.Context, filter, payload bson.M, bulk bool) error

	Inc(ctx context.Context, filter bson.M, payload interface{}) error

	DeleteByID(ctx context.Context, id string, hardDelete bool) error
	DeleteOne(ctx context.Context, filter bson.M, hardDelete bool) error
	DeleteMany(ctx context.Context, filter, payload bson.M, hardDelete bool) error

	Count(ctx context.Context, filter map[string]interface{}) (int64, error)

	Aggregate(ctx context.Context, pipeline mongo.Pipeline, result interface{}, allowDiskUse bool) error
	WithTransaction(ctx context.Context, fn func(sessCtx mongo.SessionContext) error) error
}

func New added in v0.1.0

func New(database *mongo.Database) Store

* New * This initialises a new MongoDB repo for the collection

type StrategyConfiguration

type StrategyConfiguration struct {
	Type       StrategyProvider `json:"type" valid:"optional~please provide a valid strategy type, in(linear|exponential)~unsupported strategy type"`
	Duration   uint64           `json:"duration" valid:"optional~please provide a valid duration in seconds,int"`
	RetryCount uint64           `json:"retry_count" valid:"optional~please provide a valid retry count,int"`
}

type StrategyProvider added in v0.6.0

type StrategyProvider string

type Subscription added in v0.6.0

type Subscription struct {
	ID         primitive.ObjectID `json:"-" bson:"_id"`
	UID        string             `json:"uid" bson:"uid"`
	Name       string             `json:"name" bson:"name"`
	Type       SubscriptionType   `json:"type" bson:"type"`
	AppID      string             `json:"-" bson:"app_id"`
	GroupID    string             `json:"-" bson:"group_id"`
	SourceID   string             `json:"-" bson:"source_id"`
	EndpointID string             `json:"-" bson:"endpoint_id"`
	Status     SubscriptionStatus `json:"status" bson:"status"`
	DeviceID   string             `json:"device_id" bson:"device_id"`

	Source   *Source      `json:"source_metadata" bson:"source_metadata,omitempty"`
	Endpoint *Endpoint    `json:"endpoint_metadata" bson:"endpoint_metadata,omitempty"`
	App      *Application `json:"app_metadata" bson:"app_metadata,omitempty"`

	// subscription config
	AlertConfig     *AlertConfiguration     `json:"alert_config,omitempty" bson:"alert_config,omitempty"`
	RetryConfig     *RetryConfiguration     `json:"retry_config,omitempty" bson:"retry_config,omitempty"`
	FilterConfig    *FilterConfiguration    `json:"filter_config,omitempty" bson:"filter_config,omitempty"`
	RateLimitConfig *RateLimitConfiguration `json:"rate_limit_config,omitempty" bson:"rate_limit_config,omitempty"`
	DisableEndpoint *bool                   `json:"disable_endpoint,omitempty" bson:"disable_endpoint"`

	CreatedAt primitive.DateTime `json:"created_at,omitempty" bson:"created_at" swaggertype:"string"`
	UpdatedAt primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at" swaggertype:"string"`
	DeletedAt primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at" swaggertype:"string"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

type SubscriptionRepository added in v0.6.0

type SubscriptionRepository interface {
	CreateSubscription(context.Context, string, *Subscription) error
	UpdateSubscription(context.Context, string, *Subscription) error
	LoadSubscriptionsPaged(context.Context, string, *FilterBy, Pageable) ([]Subscription, PaginationData, error)
	DeleteSubscription(context.Context, string, *Subscription) error
	FindSubscriptionByID(context.Context, string, string) (*Subscription, error)
	FindSubscriptionsByEventType(context.Context, string, string, EventType) ([]Subscription, error)
	FindSubscriptionsBySourceIDs(context.Context, string, string) ([]Subscription, error)
	FindSubscriptionsByAppID(ctx context.Context, groupId string, appID string) ([]Subscription, error)
	FindSubscriptionByDeviceID(ctx context.Context, groupId string, deviceID string) (*Subscription, error)
	UpdateSubscriptionStatus(context.Context, string, string, SubscriptionStatus) error
}

type SubscriptionStatus added in v0.6.0

type SubscriptionStatus string
const (
	ActiveSubscriptionStatus   SubscriptionStatus = "active"
	InactiveSubscriptionStatus SubscriptionStatus = "inactive"
	PendingSubscriptionStatus  SubscriptionStatus = "pending"
)

type SubscriptionType added in v0.7.0

type SubscriptionType string
const (
	SubscriptionTypeCLI SubscriptionType = "cli"
	SubscriptionTypeAPI SubscriptionType = "api"
)

type TwitterProviderConfig added in v0.6.0

type TwitterProviderConfig struct {
	CrcVerifiedAt primitive.DateTime `json:"crc_verified_at" bson:"crc_verified_at"`
}

type User added in v0.6.0

type User struct {
	ID                     primitive.ObjectID `json:"-" bson:"_id"`
	UID                    string             `json:"uid" bson:"uid"`
	FirstName              string             `json:"first_name" bson:"first_name"`
	LastName               string             `json:"last_name" bson:"last_name"`
	Email                  string             `json:"email" bson:"email"`
	Password               string             `json:"-" bson:"password"`
	Role                   auth.Role          `json:"role" bson:"role"`
	ResetPasswordToken     string             `json:"-" bson:"reset_password_token"`
	CreatedAt              primitive.DateTime `json:"created_at,omitempty" bson:"created_at,omitempty" swaggertype:"string"`
	UpdatedAt              primitive.DateTime `json:"updated_at,omitempty" bson:"updated_at,omitempty" swaggertype:"string"`
	DeletedAt              primitive.DateTime `json:"deleted_at,omitempty" bson:"deleted_at,omitempty" swaggertype:"string"`
	ResetPasswordExpiresAt primitive.DateTime `json:"reset_password_expires_at,omitempty" bson:"reset_password_expires_at,omitempty" swaggertype:"string"`

	DocumentStatus DocumentStatus `json:"-" bson:"document_status"`
}

type UserMetadata added in v0.6.0

type UserMetadata struct {
	UserID    string `json:"-" bson:"user_id"`
	FirstName string `json:"first_name" bson:"first_name"`
	LastName  string `json:"last_name" bson:"last_name"`
	Email     string `json:"email" bson:"email"`
}

type UserRepository added in v0.6.0

type UserRepository interface {
	CreateUser(context.Context, *User) error
	UpdateUser(ctx context.Context, user *User) error
	FindUserByEmail(context.Context, string) (*User, error)
	FindUserByID(context.Context, string) (*User, error)
	FindUserByToken(context.Context, string) (*User, error)
	LoadUsersPaged(context.Context, Pageable) ([]User, PaginationData, error)
}

type VerifierConfig added in v0.6.0

type VerifierConfig struct {
	Type      VerifierType `json:"type,omitempty" bson:"type" valid:"supported_verifier~please provide a valid verifier type,required"`
	HMac      *HMac        `json:"hmac" bson:"hmac"`
	BasicAuth *BasicAuth   `json:"basic_auth" bson:"basic_auth"`
	ApiKey    *ApiKey      `json:"api_key" bson:"api_key"`
}

type VerifierType added in v0.6.0

type VerifierType string
const (
	NoopVerifier      VerifierType = "noop"
	HMacVerifier      VerifierType = "hmac"
	BasicAuthVerifier VerifierType = "basic_auth"
	APIKeyVerifier    VerifierType = "api_key"
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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