Webapp for maintaining settings for the Guardian's Supporter platform and acquisition channels.
Uses play-googleauth for authorisation.
- /switches - switchboard for contributions landing page
- /contribution-types - maintains contribution type settings on contributions landing page
- /amounts - maintains amounts settings on contributions landing page
For theguardian.com channel tests (see here for details):
- tools for channel test configuration (epic, banner, header)
- /banner-deploy - for manually redeploying the banners
- /campaigns - for managing groups of channel tests in a "campaign"
Fetch DEV config by getting membership
janus credentials and running:
./fetch-config.sh
Build the client:
npm install
npm run build-dev
Run the play server on port http://localhost:9000/:
sbt run
Refresh automatically:
npm run watch
The scala backend tests use dynamodb-local. This doesn't support Apple Silicon (M1).
If while running sbt test
you get the error cannot load library: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-aarch64
, use this work around:
- download the correct
.dylib
from e.g. https://repo1.maven.org/maven2/io/github/ganadist/sqlite4java/libsqlite4java-osx-arm64/1.0.392/libsqlite4java-osx-arm64-1.0.392.dylib - copy it into the
dynamodb-local/DynamoDBLocal_lib/
directory in this project
You can ssh using ssm-scala:
ssm ssh --profile membership --ssm-tunnel --tags admin-console,support,CODE -a -x --newest
The cloudformation stacks are managed by cdk.
The stack is defined in admin-console.ts.
When you make a change to the stack you must update the snapshot by going to the cdk directory and running:
yarn test -u
Riffraff will make the cloudformation changes during the deploy.
There are three types of abstract controller for managing objects in S3:
Provides get
and set
handlers for a single object in S3.
It prevents users from overwriting the object if they have an old version. It returns the current version ID of the S3 object to the client, and requires the client to provide the latest version ID when updating it.
Provides get
, set
and list
handlers for many S3 objects under a specific path. Also requires a version ID for updates.
Provides get
and set
handlers for a single object in S3, but also a mechanism for requiring users to 'lock' the object to prevent concurrent editing.
The lock status of the object is returned by get
, containing the email address of the current owner and timestamp of the lock.
Updates are only permitted if the user has a lock.
A separate S3 object is used for recording the lock status.
Optionally sends a Fastly PURGE request after updates to S3.