Skip to content
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
wants to merge 74 commits into
base: main
Choose a base branch
from

Conversation

steventux
Copy link
Contributor

@steventux steventux commented Jan 8, 2025

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

  • Refactoring (non-breaking change)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would change existing functionality)
  • Bug fix (non-breaking change which fixes an issue)

Checklist

  • I am familiar with the contributing guidelines
  • I have followed the code style of the project
  • I have added tests to cover my changes
  • I have updated the documentation accordingly
  • This PR is a result of pair or mob programming

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.

  • I confirm that neither PII/PID nor sensitive data are included in this PR and the codebase changes.

@steventux steventux force-pushed the feature-flask-and-function-apps branch from a4a4cc6 to 62883dc Compare January 9, 2025 12:12
@steventux steventux force-pushed the feature-flask-and-function-apps branch from 62883dc to 3cbe977 Compare January 9, 2025 13:57
@steventux steventux force-pushed the feature-flask-and-function-apps branch from 3cbe977 to 6f47c02 Compare January 9, 2025 14:15
dnimmo and others added 15 commits January 14, 2025 12:45
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.
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.
steventux and others added 30 commits January 21, 2025 11:54
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.
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.
…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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants