generated from nhs-england-tools/repository-template
-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature Branch: Flask running in function app #137
Draft
steventux
wants to merge
74
commits into
main
Choose a base branch
from
feature-flask-and-function-apps
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
a4a4cc6
to
62883dc
Compare
62883dc
to
3cbe977
Compare
3cbe977
to
6f47c02
Compare
We all love a bar chart
Uses HMAC signature validation to verify expected headers with a request body. The actual implementation is abstracted from requests themselves so we deal with strings, dictionaries and booleans as inputs and outputs.
Flask titlecases the keys in Headers, make sure we lowercase before attempting access.
Use the OAS file provided by NHS Notify to validate the incoming POST body.
Make healthcheck a top level endpoint, it should not be nested in the sttaus/ route.
Co-authored-by: Nimmo <[email protected]>
Add status endpoint to API
When the status callback endpoint receives requests the post body will be saved to the database to record the channel and message status depending on the payload type. This commit adds the datastore and service module which handles this persistence.
We will be sending messages using NHS Notify's message batch endpoint, this means a revision of how we store incoming data and the success of the requests to Notify. We will be archiving existing data from the pilot, likely by renaming the existing tables so it is fine to start the migration revisions with the intended schema.
This was a temporary measure and a good thing that we are removing it to replace with database migrations.
Integrate db migrations and revised schema
DB creation is handled nicely in the Alembic script, so remove from CI workflow steps and local scripts.
Simplify database setup
We will be requesting the message-batch endpoint on NHS Notify and this will mean how we store the message batch data will be different to the pilot. We will record one message batch record to many message records and merge the response id into the original personalisation data in the messages records.
In this case we want a record of what failed and what the response from Notify was.
Adds /api/message/batch which follows the same HMAC verification and request body schema validation as with status creation.
This is now done via SQLAlchemy in message_batch_recorder.
Add message batch endpoint
…ence-to-sqlalchemy Convert status record persistence to SQLAlchemy
We can't include code from outside the function app root directory without some sort of file moving setup. Models are now a core part of how we persist and retrieve records from the database, so this commit moves the models definition into the function app within the app module namespace.
Fix models import issue in function app
The callback requests we receive from NHS Notify should verify the HMAC signature using the Notify application ID and API key. The requests we receive to send message batches should verify the HMAC signature using client application ID and API key. We will need to provide a way to manage multiple client configurations, but this commit at least separates the two types of verification.
Pass environment to function app when running locally
Update developer documentation
Use unique HMAC verification secrets
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
This Draft PR is here for easy visibility of the feature branch we start with to add Flask to a single function app.
We will raise PRs against this feature branch until we are able to merge into the main branch.
Context
Type of changes
Checklist
Sensitive Information Declaration
To ensure the utmost confidentiality and protect your and others privacy, we kindly ask you to NOT including PII (Personal Identifiable Information) / PID (Personal Identifiable Data) or any other sensitive data in this PR (Pull Request) and the codebase changes. We will remove any PR that do contain any sensitive information. We really appreciate your cooperation in this matter.