diff --git a/app/commands.py b/app/commands.py index 74361b497..1529d9c37 100644 --- a/app/commands.py +++ b/app/commands.py @@ -754,3 +754,13 @@ def create_admin_jwt(): current_app.logger.error('Can only be run in development') return print(create_jwt_token(current_app.config['SECRET_KEY'], current_app.config['ADMIN_CLIENT_ID'])) + +@notify_command(name='create-user-jwt') +@click.option('-t', '--token', required=True, prompt=False) +def create_user_jwt(token): + if getenv('NOTIFY_ENVIRONMENT', '') != 'development': + current_app.logger.error('Can only be run in development') + return + service_id = token[-73:-37] + api_key = token[-36:] + print(create_jwt_token(api_key, service_id)) diff --git a/docs/api-usage.md b/docs/api-usage.md index e4a9646d4..e7a8d2969 100644 --- a/docs/api-usage.md +++ b/docs/api-usage.md @@ -11,18 +11,28 @@ An API key can be created at https://notifications-admin.app.cloud.gov/services/ ## Using OpenAPI documentation -### Retrieving a bearer token for use +### Retrieving a jwt-encoded bearer token for use On a mac, run +#### Admin UI token + ``` flask command create-admin-jwt | tail -n 1 | pbcopy ``` +#### User token + +``` +flask command create-user-jwt --token= | tail -n 1 | pbcopy +``` + to copy a token usable by the admin UI to your pasteboard. This token will expire in 30 seconds ### Disable token expiration checking in development +Because jwt tokens expire so quickly, the development server can be set to allow tokens older than 30 seconds: + ``` env ALLOW_EXPIRED_API_TOKEN=1 make run-flask ``` diff --git a/docs/openapi.yml b/docs/openapi.yml index 38f2c3877..6e49947de 100644 --- a/docs/openapi.yml +++ b/docs/openapi.yml @@ -441,3 +441,28 @@ paths: type: array items: $ref: "#/components/schemas/userObject" + /v2/notifications/sms: + post: + security: + - bearerAuth: [] + description: 'Send an SMS message' + tags: + - external-api + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + phone_number: + type: string + template_id: + type: string + personalisation: + type: object + reference: + type: string + responses: + '201': + description: Sent