Skip to content

bsgip/cactus-client-notifications

Repository files navigation

cactus-client-notifications

This is a mini web server for listening for 2030.5 subscription notifications on behalf of cactus-client. It's designed to be hosted at a publicly available IP and will provide a running test instance with unique callback URIs that can be utilised for the duration of a test.

PKI

This app is expected to be run downstream of TLS termination (eg behind an nginx reverse proxy).

Any mutual TLS / other considerations are expected to be managed at the point of TLS termination.

Development

pip install cactus_client_notifications will install all dependencies for running the server

pip install cactus_client_notifications[dev,test] will install ALL dependencies for development / tests

Configuration

All configuration is managed via a series of environment variables. It's likely SERVER_URL and MOUNT_POINT are the only values you'll need to set for deployment.

Environment Variable Default Value Description
APP_PORT 8080 What port the application will be listening on (reverse proxy target port)
SERVER_URL http://localhost:8080 The public URI that all webhooks will be hosted under (This will need to be resolvable by BOTH the cactus CLI tool AND the utility server for submitting notifications)
MOUNT_POINT / If this service is hosted a path prefix (eg /api/v12/) set that value here.
MAX_IDLE_DURATION_SECONDS 3600 Any notification endpoint that hasn't been interacted with for this many seconds will be deleted
MAX_DURATION_SECONDS 262800 (73 hours) Any notification endpoint that is at least this old will be deleted
MAX_ACTIVE_ENDPOINTS 1024 The maximum number of endpoints that can be in existance at one time.
MAX_ENDPOINT_NOTIFICATIONS 100 The maximum number of (uncollected) notifications that an endpoint can hold
CLEANUP_FREQUENCY_SECONDS 120 How frequently the server checks for expired endpoints

Building

To build a Docker containerised version of the app - use the included Dockerfile:

docker build --build-arg CACTUS_CLIENT_NOTIFICATIONS_VERSION=v0.0.6 .

If you want to run the built image (and host it at my.server/api):

docker run -e SERVER_URL=https://my.server:8080 -e MOUNT_POINT=/api -p 8080:8080 cactus-client-notifications

API

Method/Endpoint Description JSON Models
GET /manage Plaintext app status (eg: describing active endpoints and uncollected notifications) Request: None Response: None - plaintext
POST /manage/endpoint Attempts to create a notification endpoint. response will contain the unique notification endpoint ID and fully qualified URL Request: None Response: cactus_client_notifications.schema.CreateEndpointResponse
GET /manage/endpoint/{endpoint_id} Collects all Notifications for the nominated endpoint_id. Once a notification has been collected it will be cleared. Request: None Response: cactus_client_notifications.schema.CollectEndpointResponse
PUT /manage/endpoint/{endpoint_id} Updates the configuration for endpoint_id (eg enabling / disabling it). Request: cactus_client_notifications.schema.ConfigureEndpointRequest Response: None
DELETE /manage/endpoint/{endpoint_id} Requests the deletion of the endpoint with endpoint_id Request: None Response: None
* /webhook/{endpoint_id} The actual notification webhook that the utility server will be sending requests to. Request: Any Response: None

About

Mini webserver for providing hosted 2030.5 pub/sub notification endpoints for cactus-client

Resources

License

Stars

Watchers

Forks

Packages

No packages published