Documentation ¶
Overview ¶
Package bootstrap contains the domain concept definitions needed to support SuperMQ bootstrap service functionality.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ErrClients indicates failure to communicate with SuperMQ Clients service. // It can be due to networking error or invalid/unauthenticated request. ErrClients = errors.New("failed to receive response from Clients service") // ErrExternalKey indicates a non-existent bootstrap configuration for given external key. ErrExternalKey = errors.New("failed to get bootstrap configuration for given external key") // ErrExternalKeySecure indicates error in getting bootstrap configuration for given encrypted external key. ErrExternalKeySecure = errors.New("failed to get bootstrap configuration for given encrypted external key") // ErrBootstrap indicates error in getting bootstrap configuration. ErrBootstrap = errors.New("failed to read bootstrap configuration") // ErrAddBootstrap indicates error in adding bootstrap configuration. ErrAddBootstrap = errors.New("failed to add bootstrap configuration") )
Functions ¶
This section is empty.
Types ¶
type Channel ¶
type Channel struct { ID string `json:"id"` Name string `json:"name,omitempty"` Metadata map[string]interface{} `json:"metadata,omitempty"` DomainID string `json:"domain_id"` Parent string `json:"parent_id,omitempty"` Description string `json:"description,omitempty"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at,omitempty"` UpdatedBy string `json:"updated_by,omitempty"` Status clients.Status `json:"status"` }
Channel represents SuperMQ channel corresponding SuperMQ Client is connected to.
type Config ¶
type Config struct { ClientID string `json:"client_id"` ClientSecret string `json:"client_secret"` DomainID string `json:"domain_id,omitempty"` Name string `json:"name,omitempty"` ClientCert string `json:"client_cert,omitempty"` ClientKey string `json:"client_key,omitempty"` CACert string `json:"ca_cert,omitempty"` Channels []Channel `json:"channels,omitempty"` ExternalID string `json:"external_id"` ExternalKey string `json:"external_key"` Content string `json:"content,omitempty"` State State `json:"state"` }
Config represents Configuration entity. It wraps information about external entity as well as info about corresponding SuperMQ entities. MGClient represents corresponding SuperMQ Client ID. MGKey is key of corresponding SuperMQ Client. MGChannels is a list of SuperMQ Channels corresponding SuperMQ Client connects to.
type ConfigReader ¶
ConfigReader is used to parse Config into format which will be encoded as a JSON and consumed from the client side. The purpose of this interface is to provide convenient way to generate custom configuration response based on the specific Config which will be consumed by the client.
func NewConfigReader ¶
func NewConfigReader(encKey []byte) ConfigReader
NewConfigReader return new reader which is used to generate response from the config.
type ConfigRepository ¶
type ConfigRepository interface { // Save persists the Config. Successful operation is indicated by non-nil // error response. Save(ctx context.Context, cfg Config, chsConnIDs []string) (string, error) // RetrieveByID retrieves the Config having the provided identifier, that is owned // by the specified user. RetrieveByID(ctx context.Context, domainID, id string) (Config, error) // RetrieveAll retrieves a subset of Configs that are owned // by the specific user, with given filter parameters. RetrieveAll(ctx context.Context, domainID string, clientIDs []string, filter Filter, offset, limit uint64) ConfigsPage // RetrieveByExternalID returns Config for given external ID. RetrieveByExternalID(ctx context.Context, externalID string) (Config, error) // Update updates an existing Config. A non-nil error is returned // to indicate operation failure. Update(ctx context.Context, cfg Config) error // UpdateCerts updates and returns an existing Config certificate and domainID. // A non-nil error is returned to indicate operation failure. UpdateCert(ctx context.Context, domainID, clientID, clientCert, clientKey, caCert string) (Config, error) // UpdateConnections updates a list of Channels the Config is connected to // adding new Channels if needed. UpdateConnections(ctx context.Context, domainID, id string, channels []Channel, connections []string) error // Remove removes the Config having the provided identifier, that is owned // by the specified user. Remove(ctx context.Context, domainID, id string) error // ChangeState changes of the Config, that is owned by the specific user. ChangeState(ctx context.Context, domainID, id string, state State) error // ListExisting retrieves those channels from the given list that exist in DB. ListExisting(ctx context.Context, domainID string, ids []string) ([]Channel, error) // RemoveClient removes Config of the Client with the given ID. RemoveClient(ctx context.Context, id string) error // UpdateChannel updates channel with the given ID. UpdateChannel(ctx context.Context, c Channel) error // RemoveChannel removes channel with the given ID. RemoveChannel(ctx context.Context, id string) error // ConnectClient changes state of the Config when the corresponding Client is connected to the Channel. ConnectClient(ctx context.Context, channelID, clientID string) error // DisconnectClient changes state of the Config when the corresponding Client is disconnected from the Channel. DisconnectClient(ctx context.Context, channelID, clientID string) error }
ConfigRepository specifies a Config persistence API.
type ConfigsPage ¶
type ConfigsPage struct { Total uint64 `json:"total"` Offset uint64 `json:"offset"` Limit uint64 `json:"limit"` Configs []Config `json:"configs"` }
ConfigsPage contains page related metadata as well as list of Configs that belong to this page.
type Service ¶
type Service interface { // Add adds new Client Config to the user identified by the provided token. Add(ctx context.Context, session smqauthn.Session, token string, cfg Config) (Config, error) // View returns Client Config with given ID belonging to the user identified by the given token. View(ctx context.Context, session smqauthn.Session, id string) (Config, error) // Update updates editable fields of the provided Config. Update(ctx context.Context, session smqauthn.Session, cfg Config) error // UpdateCert updates an existing Config certificate and token. // A non-nil error is returned to indicate operation failure. UpdateCert(ctx context.Context, session smqauthn.Session, clientID, clientCert, clientKey, caCert string) (Config, error) // UpdateConnections updates list of Channels related to given Config. UpdateConnections(ctx context.Context, session smqauthn.Session, token, id string, connections []string) error // List returns subset of Configs with given search params that belong to the // user identified by the given token. List(ctx context.Context, session smqauthn.Session, filter Filter, offset, limit uint64) (ConfigsPage, error) // Remove removes Config with specified token that belongs to the user identified by the given token. Remove(ctx context.Context, session smqauthn.Session, id string) error // Bootstrap returns Config to the Client with provided external ID using external key. Bootstrap(ctx context.Context, externalKey, externalID string, secure bool) (Config, error) // ChangeState changes state of the Client with given client ID and domain ID. ChangeState(ctx context.Context, session smqauthn.Session, token, id string, state State) error // UpdateChannelHandler updates Channel with data received from an event. UpdateChannelHandler(ctx context.Context, channel Channel) error // RemoveConfigHandler removes Configuration with id received from an event. RemoveConfigHandler(ctx context.Context, id string) error // RemoveChannelHandler removes Channel with id received from an event. RemoveChannelHandler(ctx context.Context, id string) error // ConnectClientHandler changes state of the Config to active when connect event occurs. ConnectClientHandler(ctx context.Context, channelID, clientID string) error // DisconnectClientHandler changes state of the Config to inactive when disconnect event occurs. DisconnectClientHandler(ctx context.Context, channelID, clientID string) error }
Service specifies an API that must be fulfilled by the domain service implementation, and all of its decorators (e.g. logging & metrics).
type State ¶
type State int
State represents corresponding SuperMQ Client state. The possible Config States as well as description of what that State represents are given in the table: | State | What it means | |----------+--------------------------------------------------------------------------------| | Inactive | Client is created, but isn't able to communicate over SuperMQ | | Active | Client is able to communicate using SuperMQ |.
Directories ¶
Path | Synopsis |
---|---|
Package api contains implementation of bootstrap service HTTP API.
|
Package api contains implementation of bootstrap service HTTP API. |
Package events provides the domain concept definitions needed to support bootstrap events functionality.
|
Package events provides the domain concept definitions needed to support bootstrap events functionality. |
consumer
Package consumer contains events consumer for events published by Bootstrap service.
|
Package consumer contains events consumer for events published by Bootstrap service. |
producer
Package producer contains the domain events needed to support event sourcing of Bootstrap service actions.
|
Package producer contains the domain events needed to support event sourcing of Bootstrap service actions. |
Package mocks contains mocks for testing purposes.
|
Package mocks contains mocks for testing purposes. |
Package postgres contains repository implementations using PostgreSQL as the underlying database.
|
Package postgres contains repository implementations using PostgreSQL as the underlying database. |
Package tracing provides tracing instrumentation for SuperMQ Users service.
|
Package tracing provides tracing instrumentation for SuperMQ Users service. |