mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-25 08:44:23 -04:00
Added current_service to flask context and template context.
Fix all tests and conflicts. Removed comment line.
This commit is contained in:
@@ -3,7 +3,15 @@ import re
|
|||||||
|
|
||||||
import dateutil
|
import dateutil
|
||||||
import urllib
|
import urllib
|
||||||
from flask import (Flask, session, Markup, escape, render_template, make_response, current_app)
|
from flask import (
|
||||||
|
Flask,
|
||||||
|
session,
|
||||||
|
Markup,
|
||||||
|
escape,
|
||||||
|
render_template,
|
||||||
|
make_response,
|
||||||
|
current_app,
|
||||||
|
request)
|
||||||
from flask._compat import string_types
|
from flask._compat import string_types
|
||||||
from flask_login import LoginManager
|
from flask_login import LoginManager
|
||||||
from flask_wtf import CsrfProtect
|
from flask_wtf import CsrfProtect
|
||||||
@@ -27,6 +35,10 @@ from utils.recipients import validate_phone_number, InvalidPhoneError
|
|||||||
import app.proxy_fix
|
import app.proxy_fix
|
||||||
from config import configs
|
from config import configs
|
||||||
from utils import logging
|
from utils import logging
|
||||||
|
from werkzeug.local import LocalStack, LocalProxy
|
||||||
|
from flask.globals import _lookup_req_object
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
|
|
||||||
login_manager = LoginManager()
|
login_manager = LoginManager()
|
||||||
csrf = CsrfProtect()
|
csrf = CsrfProtect()
|
||||||
@@ -41,6 +53,9 @@ invite_api_client = InviteApiClient()
|
|||||||
statistics_api_client = StatisticsApiClient()
|
statistics_api_client = StatisticsApiClient()
|
||||||
asset_fingerprinter = AssetFingerprinter()
|
asset_fingerprinter = AssetFingerprinter()
|
||||||
|
|
||||||
|
# The current service attached to the request stack.
|
||||||
|
current_service = LocalProxy(partial(_lookup_req_object, 'service'))
|
||||||
|
|
||||||
|
|
||||||
def create_app():
|
def create_app():
|
||||||
application = Flask(__name__)
|
application = Flask(__name__)
|
||||||
@@ -82,6 +97,12 @@ def create_app():
|
|||||||
application.add_template_filter(linkable_name)
|
application.add_template_filter(linkable_name)
|
||||||
|
|
||||||
application.after_request(useful_headers_after_request)
|
application.after_request(useful_headers_after_request)
|
||||||
|
application.after_request(save_service_after_request)
|
||||||
|
application.before_request(load_service_before_request)
|
||||||
|
|
||||||
|
def _attach_current_service():
|
||||||
|
return {'current_service': current_service}
|
||||||
|
application.context_processor(_attach_current_service)
|
||||||
register_errorhandlers(application)
|
register_errorhandlers(application)
|
||||||
|
|
||||||
return application
|
return application
|
||||||
@@ -167,7 +188,26 @@ def load_user(user_id):
|
|||||||
return user_api_client.get_user(user_id)
|
return user_api_client.get_user(user_id)
|
||||||
|
|
||||||
|
|
||||||
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
|
def load_service_before_request():
|
||||||
|
service_id = request.view_args.get('service_id', None) if request.view_args else None
|
||||||
|
if service_id:
|
||||||
|
from flask.globals import _request_ctx_stack
|
||||||
|
if _request_ctx_stack.top is not None:
|
||||||
|
setattr(
|
||||||
|
_request_ctx_stack.top,
|
||||||
|
'service',
|
||||||
|
service_api_client.get_service(service_id)['data'])
|
||||||
|
|
||||||
|
|
||||||
|
def save_service_after_request(response):
|
||||||
|
# Only save the current session if the request is 200
|
||||||
|
service_id = request.view_args.get('service_id', None) if request.view_args else None
|
||||||
|
if response.status_code == 200 and service_id:
|
||||||
|
session['service_id'] = service_id
|
||||||
|
return response
|
||||||
|
|
||||||
|
|
||||||
|
# https://www.owasp.org/index.php/List_of_useful_HTTP_headers
|
||||||
def useful_headers_after_request(response):
|
def useful_headers_after_request(response):
|
||||||
response.headers.add('X-Frame-Options', 'deny')
|
response.headers.add('X-Frame-Options', 'deny')
|
||||||
response.headers.add('X-Content-Type-Options', 'nosniff')
|
response.headers.add('X-Content-Type-Options', 'nosniff')
|
||||||
|
|||||||
@@ -35,9 +35,8 @@ def add_service():
|
|||||||
form = AddServiceForm(service_api_client.find_all_service_email_from)
|
form = AddServiceForm(service_api_client.find_all_service_email_from)
|
||||||
heading = 'Which service do you want to set up notifications for?'
|
heading = 'Which service do you want to set up notifications for?'
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
session['service_name'] = form.name.data
|
email_from = email_safe(form.name.data)
|
||||||
email_from = email_safe(session['service_name'])
|
service_id = service_api_client.create_service(service_name=form.name.data,
|
||||||
service_id = service_api_client.create_service(service_name=session['service_name'],
|
|
||||||
active=False,
|
active=False,
|
||||||
limit=current_app.config['DEFAULT_SERVICE_LIMIT'],
|
limit=current_app.config['DEFAULT_SERVICE_LIMIT'],
|
||||||
restricted=True,
|
restricted=True,
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ def documentation():
|
|||||||
def api_keys(service_id):
|
def api_keys(service_id):
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/api-keys.html',
|
'views/api-keys.html',
|
||||||
service_id=service_id,
|
|
||||||
keys=api_key_api_client.get_api_keys(service_id=service_id)['apiKeys']
|
keys=api_key_api_client.get_api_keys(service_id=service_id)['apiKeys']
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -32,11 +31,10 @@ def create_api_key(service_id):
|
|||||||
form = CreateKeyForm(key_names)
|
form = CreateKeyForm(key_names)
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
secret = api_key_api_client.create_api_key(service_id=service_id, key_name=form.key_name.data)
|
secret = api_key_api_client.create_api_key(service_id=service_id, key_name=form.key_name.data)
|
||||||
return render_template('views/api-keys/show.html', service_id=service_id, secret=secret,
|
return render_template('views/api-keys/show.html', secret=secret,
|
||||||
key_name=form.key_name.data)
|
key_name=form.key_name.data)
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/api-keys/create.html',
|
'views/api-keys/create.html',
|
||||||
service_id=service_id,
|
|
||||||
key_name=form.key_name
|
key_name=form.key_name
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -49,7 +47,6 @@ def revoke_api_key(service_id, key_id):
|
|||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/api-keys/revoke.html',
|
'views/api-keys/revoke.html',
|
||||||
service_id=service_id,
|
|
||||||
key_name=key_name
|
key_name=key_name
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
|
|||||||
@@ -23,4 +23,7 @@ def show_all_services_or_dashboard():
|
|||||||
if 1 == len(services):
|
if 1 == len(services):
|
||||||
return redirect(url_for('.service_dashboard', service_id=services[0]['id']))
|
return redirect(url_for('.service_dashboard', service_id=services[0]['id']))
|
||||||
else:
|
else:
|
||||||
|
service_id = session.get('service_id', None)
|
||||||
|
if any([service_id == x['id'] for x in services]):
|
||||||
|
return redirect(url_for('.service_dashboard', service_id=service_id))
|
||||||
return redirect(url_for('.choose_service'))
|
return redirect(url_for('.choose_service'))
|
||||||
|
|||||||
@@ -2,13 +2,14 @@ from flask import (
|
|||||||
render_template,
|
render_template,
|
||||||
session,
|
session,
|
||||||
flash,
|
flash,
|
||||||
jsonify
|
jsonify,
|
||||||
|
request
|
||||||
)
|
)
|
||||||
from datetime import date
|
from datetime import date
|
||||||
|
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
from app.main import main
|
from app.main import main
|
||||||
from app import (job_api_client, statistics_api_client, service_api_client)
|
from app import (job_api_client, statistics_api_client, service_api_client, current_service)
|
||||||
from app.utils import user_has_permissions
|
from app.utils import user_has_permissions
|
||||||
|
|
||||||
|
|
||||||
@@ -19,14 +20,10 @@ def service_dashboard(service_id):
|
|||||||
templates = service_api_client.get_service_templates(service_id)['data']
|
templates = service_api_client.get_service_templates(service_id)['data']
|
||||||
jobs = job_api_client.get_job(service_id)['data']
|
jobs = job_api_client.get_job(service_id)['data']
|
||||||
|
|
||||||
service = service_api_client.get_service(service_id)
|
|
||||||
session['service_name'] = service['data']['name']
|
|
||||||
session['service_id'] = service['data']['id']
|
|
||||||
|
|
||||||
if session.get('invited_user'):
|
if session.get('invited_user'):
|
||||||
session.pop('invited_user', None)
|
session.pop('invited_user', None)
|
||||||
service_name = service['data']['name']
|
message = 'You have successfully accepted your invitation and been added to {}'.format(
|
||||||
message = 'You have successfully accepted your invitation and been added to {}'.format(service_name)
|
current_service['name'])
|
||||||
flash(message, 'default_with_tick')
|
flash(message, 'default_with_tick')
|
||||||
|
|
||||||
statistics = statistics_api_client.get_statistics_for_service(service_id)['data']
|
statistics = statistics_api_client.get_statistics_for_service(service_id)['data']
|
||||||
@@ -37,7 +34,6 @@ def service_dashboard(service_id):
|
|||||||
more_jobs_to_show=(len(jobs) > 5),
|
more_jobs_to_show=(len(jobs) > 5),
|
||||||
free_text_messages_remaining='250,000',
|
free_text_messages_remaining='250,000',
|
||||||
spent_this_month='0.00',
|
spent_this_month='0.00',
|
||||||
service=service['data'],
|
|
||||||
statistics=add_rates_to(statistics),
|
statistics=add_rates_to(statistics),
|
||||||
templates=templates,
|
templates=templates,
|
||||||
service_id=str(service_id))
|
service_id=str(service_id))
|
||||||
|
|||||||
@@ -12,7 +12,11 @@ from flask_login import login_required
|
|||||||
from werkzeug.datastructures import MultiDict
|
from werkzeug.datastructures import MultiDict
|
||||||
from utils.template import Template
|
from utils.template import Template
|
||||||
|
|
||||||
from app import (job_api_client, notification_api_client, service_api_client)
|
from app import (
|
||||||
|
job_api_client,
|
||||||
|
notification_api_client,
|
||||||
|
service_api_client,
|
||||||
|
current_service)
|
||||||
from app.main import main
|
from app.main import main
|
||||||
from app.utils import (
|
from app.utils import (
|
||||||
get_page_from_request,
|
get_page_from_request,
|
||||||
@@ -38,8 +42,7 @@ def view_jobs(service_id):
|
|||||||
jobs = job_api_client.get_job(service_id)['data']
|
jobs = job_api_client.get_job(service_id)['data']
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/jobs/jobs.html',
|
'views/jobs/jobs.html',
|
||||||
jobs=jobs,
|
jobs=jobs
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -47,7 +50,6 @@ def view_jobs(service_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('view_activity', admin_override=True)
|
@user_has_permissions('view_activity', admin_override=True)
|
||||||
def view_job(service_id, job_id):
|
def view_job(service_id, job_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
job = job_api_client.get_job(service_id, job_id)['data']
|
job = job_api_client.get_job(service_id, job_id)['data']
|
||||||
template = service_api_client.get_service_template(service_id, job['template'])['data']
|
template = service_api_client.get_service_template(service_id, job['template'])['data']
|
||||||
notifications = notification_api_client.get_notifications_for_service(service_id, job_id)
|
notifications = notification_api_client.get_notifications_for_service(service_id, job_id)
|
||||||
@@ -64,10 +66,8 @@ def view_job(service_id, job_id):
|
|||||||
uploaded_file_name=job['original_file_name'],
|
uploaded_file_name=job['original_file_name'],
|
||||||
template=Template(
|
template=Template(
|
||||||
template,
|
template,
|
||||||
prefix=service['name']
|
prefix=current_service['name']
|
||||||
),
|
),
|
||||||
service_id=service_id,
|
|
||||||
service=service,
|
|
||||||
job_id=job_id
|
job_id=job_id
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -76,7 +76,6 @@ def view_job(service_id, job_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('view_activity')
|
@user_has_permissions('view_activity')
|
||||||
def view_job_updates(service_id, job_id):
|
def view_job_updates(service_id, job_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
job = job_api_client.get_job(service_id, job_id)['data']
|
job = job_api_client.get_job(service_id, job_id)['data']
|
||||||
notifications = notification_api_client.get_notifications_for_service(service_id, job_id)
|
notifications = notification_api_client.get_notifications_for_service(service_id, job_id)
|
||||||
finished = job['status'] == 'finished'
|
finished = job['status'] == 'finished'
|
||||||
@@ -135,7 +134,6 @@ def view_notifications(service_id):
|
|||||||
'page {}'.format(page + 1))
|
'page {}'.format(page + 1))
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/notifications.html',
|
'views/notifications.html',
|
||||||
service_id=service_id,
|
|
||||||
notifications=notifications['notifications'],
|
notifications=notifications['notifications'],
|
||||||
page=page,
|
page=page,
|
||||||
prev_page=prev_page,
|
prev_page=prev_page,
|
||||||
@@ -157,6 +155,5 @@ def view_notification(service_id, job_id, notification_id):
|
|||||||
][0],
|
][0],
|
||||||
delivered_at=now,
|
delivered_at=now,
|
||||||
uploaded_at=now,
|
uploaded_at=now,
|
||||||
service_id=service_id,
|
|
||||||
job_id=job_id
|
job_id=job_id
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ roles = {
|
|||||||
def manage_users(service_id):
|
def manage_users(service_id):
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/manage-users.html',
|
'views/manage-users.html',
|
||||||
service_id=service_id,
|
|
||||||
users=user_api_client.get_users_for_service(service_id=service_id),
|
users=user_api_client.get_users_for_service(service_id=service_id),
|
||||||
current_user=current_user,
|
current_user=current_user,
|
||||||
invited_users=[
|
invited_users=[
|
||||||
@@ -51,7 +50,6 @@ def manage_users(service_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_users', admin_override=True)
|
@user_has_permissions('manage_users', admin_override=True)
|
||||||
def invite_user(service_id):
|
def invite_user(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
form = InviteUserForm(invalid_email_address=current_user.email_address)
|
form = InviteUserForm(invalid_email_address=current_user.email_address)
|
||||||
|
|
||||||
@@ -75,7 +73,6 @@ def invite_user(service_id):
|
|||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/invite-user.html',
|
'views/invite-user.html',
|
||||||
service_id=service_id,
|
|
||||||
form=form
|
form=form
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -87,7 +84,6 @@ def edit_user_permissions(service_id, user_id):
|
|||||||
# TODO we should probably using the service id here in the get user
|
# TODO we should probably using the service id here in the get user
|
||||||
# call as well. eg. /user/<user_id>?&service=service_id
|
# call as well. eg. /user/<user_id>?&service=service_id
|
||||||
user = user_api_client.get_user(user_id)
|
user = user_api_client.get_user(user_id)
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
# Need to make the email address read only, or a disabled field?
|
# Need to make the email address read only, or a disabled field?
|
||||||
# Do it through the template or the form class?
|
# Do it through the template or the form class?
|
||||||
form = PermissionsForm(**{
|
form = PermissionsForm(**{
|
||||||
@@ -106,8 +102,7 @@ def edit_user_permissions(service_id, user_id):
|
|||||||
return render_template(
|
return render_template(
|
||||||
'views/edit-user-permissions.html',
|
'views/edit-user-permissions.html',
|
||||||
user=user,
|
user=user,
|
||||||
form=form,
|
form=form
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -116,7 +111,6 @@ def edit_user_permissions(service_id, user_id):
|
|||||||
@user_has_permissions('manage_users', admin_override=True)
|
@user_has_permissions('manage_users', admin_override=True)
|
||||||
def remove_user_from_service(service_id, user_id):
|
def remove_user_from_service(service_id, user_id):
|
||||||
user = user_api_client.get_user(user_id)
|
user = user_api_client.get_user(user_id)
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
# Need to make the email address read only, or a disabled field?
|
# Need to make the email address read only, or a disabled field?
|
||||||
# Do it through the template or the form class?
|
# Do it through the template or the form class?
|
||||||
form = PermissionsForm(**{
|
form = PermissionsForm(**{
|
||||||
@@ -145,8 +139,7 @@ def remove_user_from_service(service_id, user_id):
|
|||||||
return render_template(
|
return render_template(
|
||||||
'views/edit-user-permissions.html',
|
'views/edit-user-permissions.html',
|
||||||
user=user,
|
user=user,
|
||||||
form=form,
|
form=form
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -25,8 +25,8 @@ from app.main.uploader import (
|
|||||||
s3upload,
|
s3upload,
|
||||||
s3download
|
s3download
|
||||||
)
|
)
|
||||||
from app import (job_api_client, service_api_client)
|
from app import (job_api_client, service_api_client, current_service)
|
||||||
from app.utils import user_has_permissions, get_errors_for_csv
|
from app.utils import (user_has_permissions, get_errors_for_csv)
|
||||||
|
|
||||||
|
|
||||||
def get_send_button_text(template_type, number_of_messages):
|
def get_send_button_text(template_type, number_of_messages):
|
||||||
@@ -72,9 +72,6 @@ def get_example_csv_rows(template, number_of_rows=2):
|
|||||||
'manage_api_keys',
|
'manage_api_keys',
|
||||||
admin_override=True, any_=True)
|
admin_override=True, any_=True)
|
||||||
def choose_template(service_id, template_type):
|
def choose_template(service_id, template_type):
|
||||||
|
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
if template_type not in ['email', 'sms']:
|
if template_type not in ['email', 'sms']:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
@@ -83,14 +80,12 @@ def choose_template(service_id, template_type):
|
|||||||
templates=[
|
templates=[
|
||||||
Template(
|
Template(
|
||||||
template,
|
template,
|
||||||
prefix=service['name']
|
prefix=current_service['name']
|
||||||
) for template in service_api_client.get_service_templates(service_id)['data']
|
) for template in service_api_client.get_service_templates(service_id)['data']
|
||||||
if template['template_type'] == template_type
|
if template['template_type'] == template_type
|
||||||
],
|
],
|
||||||
template_type=template_type,
|
template_type=template_type,
|
||||||
page_heading=get_page_headings(template_type),
|
page_heading=get_page_headings(template_type)
|
||||||
service=service,
|
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -98,11 +93,9 @@ def choose_template(service_id, template_type):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('send_texts', 'send_emails', 'send_letters')
|
@user_has_permissions('send_texts', 'send_emails', 'send_letters')
|
||||||
def send_messages(service_id, template_id):
|
def send_messages(service_id, template_id):
|
||||||
|
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
template = Template(
|
template = Template(
|
||||||
service_api_client.get_service_template(service_id, template_id)['data'],
|
service_api_client.get_service_template(service_id, template_id)['data'],
|
||||||
prefix=service['name']
|
prefix=current_service['name']
|
||||||
)
|
)
|
||||||
|
|
||||||
form = CsvUploadForm()
|
form = CsvUploadForm()
|
||||||
@@ -136,9 +129,7 @@ def send_messages(service_id, template_id):
|
|||||||
template=template,
|
template=template,
|
||||||
recipient_column=first_column_heading[template.template_type],
|
recipient_column=first_column_heading[template.template_type],
|
||||||
example=get_example_csv_rows(template),
|
example=get_example_csv_rows(template),
|
||||||
form=form,
|
form=form
|
||||||
service=service,
|
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -179,8 +170,8 @@ def send_message_to_self(service_id, template_id):
|
|||||||
session['upload_data'] = {"template_id": template_id, "original_file_name": filedata['file_name']}
|
session['upload_data'] = {"template_id": template_id, "original_file_name": filedata['file_name']}
|
||||||
|
|
||||||
return redirect(url_for('.check_messages',
|
return redirect(url_for('.check_messages',
|
||||||
service_id=service_id,
|
|
||||||
upload_id=upload_id,
|
upload_id=upload_id,
|
||||||
|
service_id=service_id,
|
||||||
template_type=template.template_type))
|
template_type=template.template_type))
|
||||||
|
|
||||||
|
|
||||||
@@ -201,8 +192,7 @@ def send_from_api(service_id, template_id):
|
|||||||
return render_template(
|
return render_template(
|
||||||
'views/send-from-api.html',
|
'views/send-from-api.html',
|
||||||
template=template,
|
template=template,
|
||||||
payload=json.dumps(payload, indent=4),
|
payload=json.dumps(payload, indent=4)
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -214,8 +204,6 @@ def check_messages(service_id, template_type, upload_id):
|
|||||||
if not session.get('upload_data'):
|
if not session.get('upload_data'):
|
||||||
return redirect(url_for('main.choose_template', service_id=service_id, template_type=template_type))
|
return redirect(url_for('main.choose_template', service_id=service_id, template_type=template_type))
|
||||||
|
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
contents = s3download(service_id, upload_id)
|
contents = s3download(service_id, upload_id)
|
||||||
if not contents:
|
if not contents:
|
||||||
flash('There was a problem reading your upload file')
|
flash('There was a problem reading your upload file')
|
||||||
@@ -227,7 +215,7 @@ def check_messages(service_id, template_type, upload_id):
|
|||||||
|
|
||||||
template = Template(
|
template = Template(
|
||||||
template,
|
template,
|
||||||
prefix=service['name']
|
prefix=current_service['name']
|
||||||
)
|
)
|
||||||
|
|
||||||
recipients = RecipientCSV(
|
recipients = RecipientCSV(
|
||||||
@@ -259,8 +247,6 @@ def check_messages(service_id, template_type, upload_id):
|
|||||||
),
|
),
|
||||||
original_file_name=session['upload_data'].get('original_file_name'),
|
original_file_name=session['upload_data'].get('original_file_name'),
|
||||||
send_button_text=get_send_button_text(template.template_type, session['upload_data']['notification_count']),
|
send_button_text=get_send_button_text(template.template_type, session['upload_data']['notification_count']),
|
||||||
service_id=service_id,
|
|
||||||
service=service,
|
|
||||||
upload_id=upload_id,
|
upload_id=upload_id,
|
||||||
form=CsvUploadForm()
|
form=CsvUploadForm()
|
||||||
)
|
)
|
||||||
@@ -272,7 +258,6 @@ def check_messages(service_id, template_type, upload_id):
|
|||||||
def start_job(service_id, upload_id):
|
def start_job(service_id, upload_id):
|
||||||
|
|
||||||
upload_data = session['upload_data']
|
upload_data = session['upload_data']
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
if request.files or not upload_data.get('valid'):
|
if request.files or not upload_data.get('valid'):
|
||||||
# The csv was invalid, validate the csv again
|
# The csv was invalid, validate the csv again
|
||||||
@@ -289,5 +274,5 @@ def start_job(service_id, upload_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
return redirect(
|
return redirect(
|
||||||
url_for('main.view_job', service_id=service_id, job_id=upload_id)
|
url_for('main.view_job', job_id=upload_id, service_id=service_id)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -18,27 +18,20 @@ from app.main import main
|
|||||||
from app.utils import user_has_permissions, email_safe
|
from app.utils import user_has_permissions, email_safe
|
||||||
from app.main.forms import ConfirmPasswordForm, ServiceNameForm
|
from app.main.forms import ConfirmPasswordForm, ServiceNameForm
|
||||||
from app import user_api_client
|
from app import user_api_client
|
||||||
|
from app import current_service
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<service_id>/service-settings")
|
@main.route("/services/<service_id>/service-settings")
|
||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_settings', admin_override=True)
|
@user_has_permissions('manage_settings', admin_override=True)
|
||||||
def service_settings(service_id):
|
def service_settings(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
return render_template('views/service-settings.html')
|
||||||
|
|
||||||
return render_template(
|
|
||||||
'views/service-settings.html',
|
|
||||||
service=service,
|
|
||||||
service_id=service_id
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<service_id>/service-settings/name", methods=['GET', 'POST'])
|
@main.route("/services/<service_id>/service-settings/name", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_settings', admin_override=True)
|
@user_has_permissions('manage_settings', admin_override=True)
|
||||||
def service_name_change(service_id):
|
def service_name_change(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
form = ServiceNameForm(service_api_client.find_all_service_email_from)
|
form = ServiceNameForm(service_api_client.find_all_service_email_from)
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
@@ -47,16 +40,13 @@ def service_name_change(service_id):
|
|||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/service-settings/name.html',
|
'views/service-settings/name.html',
|
||||||
service=service,
|
form=form)
|
||||||
form=form,
|
|
||||||
service_id=service_id)
|
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<service_id>/service-settings/name/confirm", methods=['GET', 'POST'])
|
@main.route("/services/<service_id>/service-settings/name/confirm", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_settings', admin_override=True)
|
@user_has_permissions('manage_settings', admin_override=True)
|
||||||
def service_name_change_confirm(service_id):
|
def service_name_change_confirm(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
# Validate password for form
|
# Validate password for form
|
||||||
def _check_password(pwd):
|
def _check_password(pwd):
|
||||||
@@ -64,17 +54,17 @@ def service_name_change_confirm(service_id):
|
|||||||
form = ConfirmPasswordForm(_check_password)
|
form = ConfirmPasswordForm(_check_password)
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
service['name'] = session['service_name_change']
|
current_service['name'] = session['service_name_change']
|
||||||
service['email_from'] = email_safe(session['service_name_change'])
|
current_service['email_from'] = email_safe(session['service_name_change'])
|
||||||
try:
|
try:
|
||||||
service_api_client.update_service(
|
service_api_client.update_service(
|
||||||
service['id'],
|
current_service['id'],
|
||||||
service['name'],
|
current_service['name'],
|
||||||
service['active'],
|
current_service['active'],
|
||||||
service['limit'],
|
current_service['limit'],
|
||||||
service['restricted'],
|
current_service['restricted'],
|
||||||
service['users'],
|
current_service['users'],
|
||||||
service['email_from'])
|
current_service['email_from'])
|
||||||
except HTTPError as e:
|
except HTTPError as e:
|
||||||
error_msg = "Duplicate service name '{}'".format(session['service_name_change'])
|
error_msg = "Duplicate service name '{}'".format(session['service_name_change'])
|
||||||
if e.status_code == 400 and error_msg in e.message['name']:
|
if e.status_code == 400 and error_msg in e.message['name']:
|
||||||
@@ -84,26 +74,21 @@ def service_name_change_confirm(service_id):
|
|||||||
else:
|
else:
|
||||||
raise e
|
raise e
|
||||||
else:
|
else:
|
||||||
session['service_name'] = service['name']
|
|
||||||
session.pop('service_name_change')
|
session.pop('service_name_change')
|
||||||
return redirect(url_for('.service_settings', service_id=service_id))
|
return redirect(url_for('.service_settings', service_id=service_id))
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/service-settings/confirm.html',
|
'views/service-settings/confirm.html',
|
||||||
heading='Change your service name',
|
heading='Change your service name',
|
||||||
form=form,
|
form=form)
|
||||||
service_id=service_id)
|
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<service_id>/service-settings/request-to-go-live", methods=['GET', 'POST'])
|
@main.route("/services/<service_id>/service-settings/request-to-go-live", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_settings', admin_override=True)
|
@user_has_permissions('manage_settings', admin_override=True)
|
||||||
def service_request_to_go_live(service_id):
|
def service_request_to_go_live(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/service-settings/request-to-go-live.html',
|
'views/service-settings/request-to-go-live.html'
|
||||||
service=service,
|
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
flash('Thanks your request to go live is being processed', 'default')
|
flash('Thanks your request to go live is being processed', 'default')
|
||||||
@@ -115,13 +100,9 @@ def service_request_to_go_live(service_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_settings', admin_override=True)
|
@user_has_permissions('manage_settings', admin_override=True)
|
||||||
def service_status_change(service_id):
|
def service_status_change(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/service-settings/status.html',
|
'views/service-settings/status.html'
|
||||||
service=service,
|
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.service_status_change_confirm', service_id=service_id))
|
return redirect(url_for('.service_status_change_confirm', service_id=service_id))
|
||||||
@@ -131,43 +112,37 @@ def service_status_change(service_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_settings', admin_override=True)
|
@user_has_permissions('manage_settings', admin_override=True)
|
||||||
def service_status_change_confirm(service_id):
|
def service_status_change_confirm(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
# Validate password for form
|
# Validate password for form
|
||||||
def _check_password(pwd):
|
def _check_password(pwd):
|
||||||
return user_api_client.verify_password(current_user.id, pwd)
|
return user_api_client.verify_password(current_user.id, pwd)
|
||||||
form = ConfirmPasswordForm(_check_password)
|
form = ConfirmPasswordForm(_check_password)
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
service['active'] = True
|
current_service['active'] = True
|
||||||
service_api_client.update_service(
|
service_api_client.update_service(
|
||||||
service['id'],
|
current_service['id'],
|
||||||
service['name'],
|
current_service['name'],
|
||||||
service['active'],
|
current_service['active'],
|
||||||
service['limit'],
|
current_service['limit'],
|
||||||
service['restricted'],
|
current_service['restricted'],
|
||||||
service['users'],
|
current_service['users'],
|
||||||
service['email_from'])
|
current_service['email_from'])
|
||||||
return redirect(url_for('.service_settings', service_id=service_id))
|
return redirect(url_for('.service_settings', service_id=service_id))
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/service-settings/confirm.html',
|
'views/service-settings/confirm.html',
|
||||||
heading='Turn off all outgoing notifications',
|
heading='Turn off all outgoing notifications',
|
||||||
destructive=True,
|
destructive=True,
|
||||||
form=form,
|
form=form)
|
||||||
service_id=service_id)
|
|
||||||
|
|
||||||
|
|
||||||
@main.route("/services/<service_id>/service-settings/delete", methods=['GET', 'POST'])
|
@main.route("/services/<service_id>/service-settings/delete", methods=['GET', 'POST'])
|
||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_settings', admin_override=True)
|
@user_has_permissions('manage_settings', admin_override=True)
|
||||||
def service_delete(service_id):
|
def service_delete(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
if request.method == 'GET':
|
if request.method == 'GET':
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/service-settings/delete.html',
|
'views/service-settings/delete.html'
|
||||||
service=service,
|
|
||||||
service_id=service_id
|
|
||||||
)
|
)
|
||||||
elif request.method == 'POST':
|
elif request.method == 'POST':
|
||||||
return redirect(url_for('.service_delete_confirm', service_id=service_id))
|
return redirect(url_for('.service_delete_confirm', service_id=service_id))
|
||||||
@@ -177,7 +152,6 @@ def service_delete(service_id):
|
|||||||
@login_required
|
@login_required
|
||||||
@user_has_permissions('manage_settings', admin_override=True)
|
@user_has_permissions('manage_settings', admin_override=True)
|
||||||
def service_delete_confirm(service_id):
|
def service_delete_confirm(service_id):
|
||||||
service = service_api_client.get_service(service_id)['data']
|
|
||||||
|
|
||||||
# Validate password for form
|
# Validate password for form
|
||||||
def _check_password(pwd):
|
def _check_password(pwd):
|
||||||
@@ -185,12 +159,11 @@ def service_delete_confirm(service_id):
|
|||||||
form = ConfirmPasswordForm(_check_password)
|
form = ConfirmPasswordForm(_check_password)
|
||||||
|
|
||||||
if form.validate_on_submit():
|
if form.validate_on_submit():
|
||||||
service = service_api_client.delete_service(service_id)
|
service_api_client.delete_service(service_id)
|
||||||
return redirect(url_for('.choose_service'))
|
return redirect(url_for('.choose_service'))
|
||||||
|
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/service-settings/confirm.html',
|
'views/service-settings/confirm.html',
|
||||||
heading='Delete this service from Notify',
|
heading='Delete this service from Notify',
|
||||||
destructive=True,
|
destructive=True,
|
||||||
form=form,
|
form=form)
|
||||||
service_id=service_id)
|
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ page_headings = {
|
|||||||
@user_has_permissions('manage_templates', admin_override=True)
|
@user_has_permissions('manage_templates', admin_override=True)
|
||||||
def add_service_template(service_id, template_type):
|
def add_service_template(service_id, template_type):
|
||||||
|
|
||||||
service = service_api_client.get_service(service_id)
|
|
||||||
|
|
||||||
if template_type not in ['sms', 'email']:
|
if template_type not in ['sms', 'email']:
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
@@ -46,7 +44,6 @@ def add_service_template(service_id, template_type):
|
|||||||
'views/edit-{}-template.html'.format(template_type),
|
'views/edit-{}-template.html'.format(template_type),
|
||||||
form=form,
|
form=form,
|
||||||
template_type=template_type,
|
template_type=template_type,
|
||||||
service_id=service_id,
|
|
||||||
heading_action='Add'
|
heading_action='Add'
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -73,7 +70,6 @@ def edit_service_template(service_id, template_id):
|
|||||||
return render_template(
|
return render_template(
|
||||||
'views/edit-{}-template.html'.format(template['template_type']),
|
'views/edit-{}-template.html'.format(template['template_type']),
|
||||||
form=form,
|
form=form,
|
||||||
service_id=service_id,
|
|
||||||
template_id=template_id,
|
template_id=template_id,
|
||||||
template_type=template['template_type'],
|
template_type=template['template_type'],
|
||||||
heading_action='Edit'
|
heading_action='Edit'
|
||||||
@@ -101,5 +97,4 @@ def delete_service_template(service_id, template_id):
|
|||||||
'views/edit-{}-template.html'.format(template['template_type']),
|
'views/edit-{}-template.html'.format(template['template_type']),
|
||||||
h1='Edit template',
|
h1='Edit template',
|
||||||
form=form,
|
form=form,
|
||||||
service_id=service_id,
|
|
||||||
template_id=template_id)
|
template_id=template_id)
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ from app.main import main
|
|||||||
def tour(service_id, page):
|
def tour(service_id, page):
|
||||||
return render_template(
|
return render_template(
|
||||||
'views/tour/{}.html'.format(page),
|
'views/tour/{}.html'.format(page),
|
||||||
service_id=service_id, # TODO: fix when Nick’s PR is merged
|
|
||||||
current_page=page,
|
current_page=page,
|
||||||
next_page=(page + 1)
|
next_page=(page + 1)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,31 +1,31 @@
|
|||||||
<nav class="navigation">
|
<nav class="navigation">
|
||||||
<h2 class="navigation-service-name">
|
<h2 class="navigation-service-name">
|
||||||
<a href="{{ url_for('.service_dashboard', service_id=service_id) }}">{{ session.get('service_name', 'Service') }}</a>
|
<a href="{{ url_for('.service_dashboard', service_id=current_service.id) }}">{{ current_service.name }}</a>
|
||||||
</h2>
|
</h2>
|
||||||
{% if current_user.has_permissions(['view_activity'], admin_override=True) %}
|
{% if current_user.has_permissions(['view_activity'], admin_override=True) %}
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.view_notifications', service_id=service_id, page=1) }}">History</a></li>
|
<li><a href="{{ url_for('.view_notifications', service_id=current_service.id, page=1) }}">History</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if current_user.has_permissions(['view_activity', 'manage_templates', 'manage_api_keys'], admin_override=True, any_=True) %}
|
{% if current_user.has_permissions(['view_activity', 'manage_templates', 'manage_api_keys'], admin_override=True, any_=True) %}
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.choose_template', service_id=service_id, template_type='sms') }}">Text message templates</a></li>
|
<li><a href="{{ url_for('.choose_template', service_id=current_service.id, template_type='sms') }}">Text message templates</a></li>
|
||||||
<li><a href="{{ url_for('.choose_template', service_id=service_id, template_type='email') }}">Email templates</a></li>
|
<li><a href="{{ url_for('.choose_template', service_id=current_service.id, template_type='email') }}">Email templates</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if current_user.has_permissions(['manage_users', 'manage_settings'], admin_override=True) %}
|
{% if current_user.has_permissions(['manage_users', 'manage_settings'], admin_override=True) %}
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.manage_users', service_id=service_id) }}">Team members</a></li>
|
<li><a href="{{ url_for('.manage_users', service_id=current_service.id) }}">Team members</a></li>
|
||||||
<li><a href="{{ url_for('.service_settings', service_id=service_id) }}">Settings</a></li>
|
<li><a href="{{ url_for('.service_settings', service_id=current_service.id) }}">Settings</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% elif current_user.has_permissions(['view_activity']) %}
|
{% elif current_user.has_permissions(['view_activity']) %}
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.manage_users', service_id=service_id) }}">Team members</a></li>
|
<li><a href="{{ url_for('.manage_users', service_id=current_service.id) }}">Team members</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if current_user.has_permissions(['manage_api_keys']) %}
|
{% if current_user.has_permissions(['manage_api_keys']) %}
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="{{ url_for('.api_keys', service_id=service_id) }}">API keys</a></li>
|
<li><a href="{{ url_for('.api_keys', service_id=current_service.id) }}">API keys</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if current_user.has_permissions(admin_override=True) %}
|
{% if current_user.has_permissions(admin_override=True) %}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
API usage is described in
|
API usage is described in
|
||||||
<a href="{{ url_for('.documentation', service_id=service_id) }}">the
|
<a href="{{ url_for('.documentation', service_id=current_service.id) }}">the
|
||||||
developer documentation</a>.
|
developer documentation</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
Service ID
|
Service ID
|
||||||
</h2>
|
</h2>
|
||||||
<p class="api-key-key">
|
<p class="api-key-key">
|
||||||
{{ service_id }}
|
{{ current_service.id }}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% call(item) list_table(
|
{% call(item) list_table(
|
||||||
@@ -45,13 +45,13 @@
|
|||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% call field(align='right', status='error') %}
|
{% call field(align='right', status='error') %}
|
||||||
<a href='{{ url_for('.revoke_api_key', service_id=service_id, key_id=item.id) }}'>Revoke</a>
|
<a href='{{ url_for('.revoke_api_key', service_id=current_service.id, key_id=item.id) }}'>Revoke</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|
||||||
<p class='table-show-more-link'>
|
<p class='table-show-more-link'>
|
||||||
<a href="{{ url_for('.create_api_key', service_id=service_id) }}">Create a new API key</a>
|
<a href="{{ url_for('.create_api_key', service_id=current_service.id) }}">Create a new API key</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -48,8 +48,8 @@
|
|||||||
{{ email_message(
|
{{ email_message(
|
||||||
template.subject,
|
template.subject,
|
||||||
template.formatted_as_markup if errors else template.replaced,
|
template.formatted_as_markup if errors else template.replaced,
|
||||||
from_address='{}@notifications.service.gov.uk'.format(service.email_from),
|
from_address='{}@notifications.service.gov.uk'.format(current_service.email_from),
|
||||||
from_name=service.name
|
from_name=current_service.name
|
||||||
)}}
|
)}}
|
||||||
{% elif 'sms' == template.template_type %}
|
{% elif 'sms' == template.template_type %}
|
||||||
<div class="grid-row">
|
<div class="grid-row">
|
||||||
@@ -64,10 +64,10 @@
|
|||||||
{% if errors %}
|
{% if errors %}
|
||||||
{{file_upload(form.file, button_text='Re-upload your file')}}
|
{{file_upload(form.file, button_text='Re-upload your file')}}
|
||||||
{% else %}
|
{% else %}
|
||||||
<form method="post" enctype="multipart/form-data" action="{{url_for('main.start_job', service_id=service_id, upload_id=upload_id)}}">
|
<form method="post" enctype="multipart/form-data" action="{{url_for('main.start_job', service_id=current_service.id, upload_id=upload_id)}}">
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
<input type="hidden" name="csrf_token" value="{{ csrf_token() }}" />
|
||||||
<input type="submit" class="button" value="{{ send_button_text }}" />
|
<input type="submit" class="button" value="{{ send_button_text }}" />
|
||||||
<a href="{{url_for('.send_messages', service_id=service_id, template_id=template.id)}}" class="page-footer-back-link">Back</a>
|
<a href="{{url_for('.send_messages', service_id=current_service.id, template_id=template.id)}}" class="page-footer-back-link">Back</a>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
You need a template before you can send
|
You need a template before you can send
|
||||||
{{ 'emails' if 'email' == template_type else 'text messages' }}
|
{{ 'emails' if 'email' == template_type else 'text messages' }}
|
||||||
</p>
|
</p>
|
||||||
<a href="{{ url_for('.add_service_template', service_id=service_id, template_type=template_type) }}" class="button">Add a new template</a>
|
<a href="{{ url_for('.add_service_template', service_id=current_service.id, template_type=template_type) }}" class="button">Add a new template</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
<p>You need to ask your service manager to add templates before you can send messages</p>
|
<p>You need to ask your service manager to add templates before you can send messages</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -32,7 +32,7 @@
|
|||||||
</div>
|
</div>
|
||||||
{% if current_user.has_permissions(permissions=['manage_templates'], admin_override=True) %}
|
{% if current_user.has_permissions(permissions=['manage_templates'], admin_override=True) %}
|
||||||
<div class="column-one-third">
|
<div class="column-one-third">
|
||||||
<a href="{{ url_for('.add_service_template', service_id=service_id, template_type=template_type) }}" class="button align-with-heading">Add new template</a>
|
<a href="{{ url_for('.add_service_template', service_id=current_service.id, template_type=template_type) }}" class="button align-with-heading">Add new template</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@@ -46,7 +46,7 @@
|
|||||||
template.formatted_as_markup,
|
template.formatted_as_markup,
|
||||||
name=template.name,
|
name=template.name,
|
||||||
edit_link=(
|
edit_link=(
|
||||||
url_for(".edit_service_template", service_id=service_id, template_id=template.id)
|
url_for(".edit_service_template", service_id=current_service.id, template_id=template.id)
|
||||||
if current_user.has_permissions(permissions=['manage_templates'], admin_override=True) else
|
if current_user.has_permissions(permissions=['manage_templates'], admin_override=True) else
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
template.formatted_as_markup,
|
template.formatted_as_markup,
|
||||||
name=template.name,
|
name=template.name,
|
||||||
edit_link=(
|
edit_link=(
|
||||||
url_for(".edit_service_template", service_id=service_id, template_id=template.id)
|
url_for(".edit_service_template", service_id=current_service.id, template_id=template.id)
|
||||||
if current_user.has_permissions(permissions=['manage_templates'], admin_override=True) else
|
if current_user.has_permissions(permissions=['manage_templates'], admin_override=True) else
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
@@ -66,11 +66,11 @@
|
|||||||
<div class="column-one-third">
|
<div class="column-one-third">
|
||||||
<div class="sms-message-use-links">
|
<div class="sms-message-use-links">
|
||||||
{% if current_user.has_permissions(permissions=['send_texts', 'send_emails', 'send_letters']) %}
|
{% if current_user.has_permissions(permissions=['send_texts', 'send_emails', 'send_letters']) %}
|
||||||
<a href="{{ url_for(".send_messages", service_id=service_id, template_id=template.id) }}">Send from a CSV file</a>
|
<a href="{{ url_for(".send_messages", service_id=current_service.id, template_id=template.id) }}">Send from a CSV file</a>
|
||||||
<a href="{{ url_for(".send_message_to_self", service_id=service_id, template_id=template.id) }}">Send yourself a test</a>
|
<a href="{{ url_for(".send_message_to_self", service_id=current_service.id, template_id=template.id) }}">Send yourself a test</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if current_user.has_permissions(permissions=['manage_api_keys']) %}
|
{% if current_user.has_permissions(permissions=['manage_api_keys']) %}
|
||||||
<a href="{{ url_for(".send_from_api", service_id=service_id, template_id=template.id) }}">API integration</a>
|
<a href="{{ url_for(".send_from_api", service_id=current_service.id, template_id=template.id) }}">API integration</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,23 +1,22 @@
|
|||||||
{% extends "withnav_template.html" %}
|
{% extends "withnav_template.html" %}
|
||||||
|
|
||||||
{% block page_title %}
|
{% block page_title %}
|
||||||
{{ session.get('service_name', 'Dashboard') }} – GOV.UK Notify
|
{{ current_service.name }} – GOV.UK Notify
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block maincolumn_content %}
|
{% block maincolumn_content %}
|
||||||
|
|
||||||
{% if not templates and current_user.has_permissions(['send_texts', 'send_emails', 'send_letters'], any_=True) %}
|
{% if not templates and current_user.has_permissions(['send_texts', 'send_emails', 'send_letters'], any_=True) %}
|
||||||
{% include 'views/dashboard/get-started.html' %}
|
{% include 'views/dashboard/get-started.html' %}
|
||||||
{% elif service.restricted %}
|
{% elif current_service.restricted %}
|
||||||
<div class="dashboard">
|
<div class="dashboard">
|
||||||
{% include 'views/dashboard/trial-mode-banner.html' %}
|
{% include 'views/dashboard/trial-mode-banner.html' %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
<div
|
<div
|
||||||
data-module="update-content"
|
data-module="update-content"
|
||||||
data-resource="{{url_for(".service_dashboard_updates", service_id=service_id)}}"
|
data-resource="{{url_for(".service_dashboard_updates", service_id=current_service.id)}}"
|
||||||
data-key="today"
|
data-key="today"
|
||||||
data-interval-seconds="10"
|
data-interval-seconds="10"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
{% call banner_wrapper(type='tour') %}
|
{% call banner_wrapper(type='tour') %}
|
||||||
<h2 class="heading-large">You’re ready to get started</h2>
|
<h2 class="heading-large">You’re ready to get started</h2>
|
||||||
<p>
|
<p>
|
||||||
<a href='{{ url_for(".add_service_template", service_id=service_id, template_type="sms") }}'>
|
<a href='{{ url_for(".add_service_template", service_id=current_service.id, template_type="sms") }}'>
|
||||||
Set up a text message template
|
Set up a text message template
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
<a href='{{ url_for(".add_service_template", service_id=service_id, template_type="email") }}'>
|
<a href='{{ url_for(".add_service_template", service_id=current_service.id, template_type="email") }}'>
|
||||||
Set up an email template
|
Set up an email template
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
field_headings=['File', 'Started', right_aligned_field_heading('Rows')]
|
field_headings=['File', 'Started', right_aligned_field_heading('Rows')]
|
||||||
) %}
|
) %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for('.view_job', service_id=service_id, job_id=item.id) }}">{{ item.original_file_name }}</a>
|
<a href="{{ url_for('.view_job', service_id=current_service.id, job_id=item.id) }}">{{ item.original_file_name }}</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
{{ item.created_at|format_datetime }}
|
{{ item.created_at|format_datetime }}
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
{% if more_jobs_to_show %}
|
{% if more_jobs_to_show %}
|
||||||
{% if current_user.has_permissions(['send_texts', 'send_emails', 'send_letters']) %}
|
{% if current_user.has_permissions(['send_texts', 'send_emails', 'send_letters']) %}
|
||||||
<p class="table-show-more-link">
|
<p class="table-show-more-link">
|
||||||
<a href="{{ url_for('.view_jobs', service_id=service_id) }}">See all sent batch messages</a>
|
<a href="{{ url_for('.view_jobs', service_id=current_service.id) }}">See all sent batch messages</a>
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -36,5 +36,4 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ Manage users – GOV.UK Notify
|
|||||||
|
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Save',
|
'Save',
|
||||||
delete_link=url_for('.remove_user_from_service', service_id=service_id, user_id=user.id) if user or None,
|
delete_link=url_for('.remove_user_from_service', service_id=current_service.id, user_id=user.id) if user or None,
|
||||||
delete_link_text='Remove user from service'
|
delete_link_text='Remove user from service'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
{% if not finished_at %}
|
{% if not finished_at %}
|
||||||
<div
|
<div
|
||||||
data-module="update-content"
|
data-module="update-content"
|
||||||
data-resource="{{url_for(".view_job_updates", service_id=service_id, job_id=job_id)}}"
|
data-resource="{{url_for(".view_job_updates", service_id=current_service.id, job_id=job_id)}}"
|
||||||
data-key="status"
|
data-key="status"
|
||||||
>
|
>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
{% if not finished_at %}
|
{% if not finished_at %}
|
||||||
<div
|
<div
|
||||||
data-module="update-content"
|
data-module="update-content"
|
||||||
data-resource="{{url_for(".view_job_updates", service_id=service_id, job_id=job_id)}}"
|
data-resource="{{url_for(".view_job_updates", service_id=current_service.id, job_id=job_id)}}"
|
||||||
data-key="counts"
|
data-key="counts"
|
||||||
>
|
>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
{% if not finished_at %}
|
{% if not finished_at %}
|
||||||
<div
|
<div
|
||||||
data-module="update-content"
|
data-module="update-content"
|
||||||
data-resource="{{url_for(".view_job_updates", service_id=service_id, job_id=job_id)}}"
|
data-resource="{{url_for(".view_job_updates", service_id=current_service.id, job_id=job_id)}}"
|
||||||
data-key="notifications"
|
data-key="notifications"
|
||||||
>
|
>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
field_headings=['Job', 'Time', right_aligned_field_heading('Status')]
|
field_headings=['Job', 'Time', right_aligned_field_heading('Status')]
|
||||||
) %}
|
) %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for('.view_job', service_id=service_id, job_id=item.id) }}">{{ item.original_file_name }}</a>
|
<a href="{{ url_for('.view_job', service_id=current_service.id, job_id=item.id) }}">{{ item.original_file_name }}</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
{{ item.created_at | format_datetime}}
|
{{ item.created_at | format_datetime}}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ Manage users – GOV.UK Notify
|
|||||||
</div>
|
</div>
|
||||||
{% if current_user.has_permissions(['manage_users']) %}
|
{% if current_user.has_permissions(['manage_users']) %}
|
||||||
<div class="column-one-third">
|
<div class="column-one-third">
|
||||||
<a href="{{ url_for('.invite_user', service_id=service_id) }}" class="button align-with-heading">Invite team member</a>
|
<a href="{{ url_for('.invite_user', service_id=current_service.id) }}" class="button align-with-heading">Invite team member</a>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@@ -41,7 +41,7 @@ Manage users – GOV.UK Notify
|
|||||||
{% call field(align='right') %}
|
{% call field(align='right') %}
|
||||||
{% if current_user.has_permissions(['manage_users']) %}
|
{% if current_user.has_permissions(['manage_users']) %}
|
||||||
{% if current_user.id != item.id %}
|
{% if current_user.id != item.id %}
|
||||||
<a href="{{ url_for('.edit_user_permissions', service_id=service_id, user_id=item.id)}}">Edit</a>
|
<a href="{{ url_for('.edit_user_permissions', service_id=current_service.id, user_id=item.id)}}">Edit</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
@@ -60,7 +60,7 @@ Manage users – GOV.UK Notify
|
|||||||
{% if item.status == 'pending' %}
|
{% if item.status == 'pending' %}
|
||||||
{% call field(align='right') %}
|
{% call field(align='right') %}
|
||||||
{% if current_user.has_permissions(['manage_users']) %}
|
{% if current_user.has_permissions(['manage_users']) %}
|
||||||
<a href="{{ url_for('.cancel_invited_user', service_id=service_id, invited_user_id=item.id)}}">Cancel invitation</a>
|
<a href="{{ url_for('.cancel_invited_user', service_id=current_service.id, invited_user_id=item.id)}}">Cancel invitation</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
secondary_link = url_for('.view_job', service_id=service_id, job_id=job_id),
|
secondary_link = url_for('.view_job', service_id=current_service.id, job_id=job_id),
|
||||||
secondary_link_text = 'View other messages in this job'
|
secondary_link_text = 'View other messages in this job'
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
|
|||||||
@@ -31,14 +31,14 @@
|
|||||||
{{ item.to }}
|
{{ item.to }}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
<a href="{{ url_for(".choose_template", service_id=service_id, template_type=item.template.template_type, _anchor=item.template.name|linkable_name) }}">{{ item.template.name }}</a>
|
<a href="{{ url_for(".choose_template", service_id=current_service.id, template_type=item.template.template_type, _anchor=item.template.name|linkable_name) }}">{{ item.template.name }}</a>
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
{{ item.template.template_type }}
|
{{ item.template.template_type }}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
{% if item.job %}
|
{% if item.job %}
|
||||||
<a href="{{ url_for(".view_job", service_id=service_id, job_id=item.job.id) }}">{{ item.job.original_file_name }}</a>
|
<a href="{{ url_for(".view_job", service_id=current_service.id, job_id=item.job.id) }}">{{ item.job.original_file_name }}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endcall %}
|
{% endcall %}
|
||||||
{% call field() %}
|
{% call field() %}
|
||||||
|
|||||||
@@ -23,8 +23,8 @@
|
|||||||
{{ email_message(
|
{{ email_message(
|
||||||
template.subject,
|
template.subject,
|
||||||
template.formatted_as_markup,
|
template.formatted_as_markup,
|
||||||
from_address='{}@notifications.service.gov.uk'.format(service.email_from),
|
from_address='{}@notifications.service.gov.uk'.format(current_service.email_from),
|
||||||
from_name=service.name
|
from_name=current_service.name
|
||||||
) }}
|
) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
@@ -51,10 +51,9 @@
|
|||||||
{% endcall %}
|
{% endcall %}
|
||||||
|
|
||||||
<p class="bottom-gutter">
|
<p class="bottom-gutter">
|
||||||
<a href="{{ url_for('.get_example_csv', service_id=service_id, template_id=template.id) }}">Download this example</a>
|
<a href="{{ url_for('.get_example_csv', service_id=current_service.id, template_id=template.id) }}">Download this example</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
{{file_upload(form.file, button_text='Upload your CSV file')}}
|
{{file_upload(form.file, button_text='Upload your CSV file')}}
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
@@ -12,21 +12,21 @@
|
|||||||
{{ browse_list([
|
{{ browse_list([
|
||||||
{
|
{
|
||||||
'title': 'Change your service name',
|
'title': 'Change your service name',
|
||||||
'link': url_for('.service_name_change', service_id=service_id)
|
'link': url_for('.service_name_change', service_id=current_service.id)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'title': 'Request to go live and turn off sending restrictions',
|
'title': 'Request to go live and turn off sending restrictions',
|
||||||
'link': url_for('.service_request_to_go_live', service_id=service_id),
|
'link': url_for('.service_request_to_go_live', service_id=current_service.id),
|
||||||
'hint': 'A live service can send notifications to any phone number or email address',
|
'hint': 'A live service can send notifications to any phone number or email address',
|
||||||
} if not service.live else {
|
} if not current_service.live else {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
'title': 'Temporarily suspend API keys',
|
'title': 'Temporarily suspend API keys',
|
||||||
'link': url_for('.service_status_change', service_id=service_id),
|
'link': url_for('.service_status_change', service_id=current_service.id),
|
||||||
'destructive': True
|
'destructive': True
|
||||||
} if not service.active else {
|
} if not current_service.active else {
|
||||||
'title': 'Reactivate API keys',
|
'title': 'Reactivate API keys',
|
||||||
'link': url_for('.service_status_change', service_id=service_id)
|
'link': url_for('.service_status_change', service_id=current_service.id)
|
||||||
}
|
}
|
||||||
]) }}
|
]) }}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Confirm',
|
'Confirm',
|
||||||
destructive=destructive,
|
destructive=destructive,
|
||||||
back_link=url_for('.service_settings', service_id=service_id)
|
back_link=url_for('.service_settings', service_id=current_service.id)
|
||||||
) }}
|
) }}
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -35,9 +35,9 @@
|
|||||||
|
|
||||||
<form method="post">
|
<form method="post">
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Yes, delete ‘{}’'.format(service.name),
|
'Yes, delete ‘{}’'.format(current_service.name),
|
||||||
destructive=True,
|
destructive=True,
|
||||||
back_link=url_for('.service_settings', service_id=service_id)
|
back_link=url_for('.service_settings', service_id=current_service.id)
|
||||||
) }}
|
) }}
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
{{ textbox(form.name) }}
|
{{ textbox(form.name) }}
|
||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Save',
|
'Save',
|
||||||
back_link=url_for('.service_settings', service_id=service_id),
|
back_link=url_for('.service_settings', service_id=current_service.id),
|
||||||
back_link_text='Back to settings'
|
back_link_text='Back to settings'
|
||||||
) }}
|
) }}
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
{{ page_footer(
|
{{ page_footer(
|
||||||
'Suspend API keys',
|
'Suspend API keys',
|
||||||
destructive=True,
|
destructive=True,
|
||||||
back_link=url_for('.service_settings', service_id=service_id),
|
back_link=url_for('.service_settings', service_id=current_service.id),
|
||||||
back_link_text='Back to settings'
|
back_link_text='Back to settings'
|
||||||
) }}
|
) }}
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ def test_existing_user_accept_invite_calls_api_and_redirects_to_dashboard(app_,
|
|||||||
service_one,
|
service_one,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
sample_invite,
|
sample_invite,
|
||||||
|
mock_get_service,
|
||||||
mock_check_invite_token,
|
mock_check_invite_token,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_get_users_by_service,
|
mock_get_users_by_service,
|
||||||
@@ -43,7 +44,8 @@ def test_existing_user_with_no_permissions_accept_invite(app_,
|
|||||||
mock_check_invite_token,
|
mock_check_invite_token,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_get_users_by_service,
|
mock_get_users_by_service,
|
||||||
mock_add_user_to_service):
|
mock_add_user_to_service,
|
||||||
|
mock_get_service):
|
||||||
|
|
||||||
expected_service = service_one['id']
|
expected_service = service_one['id']
|
||||||
sample_invite['permissions'] = ''
|
sample_invite['permissions'] = ''
|
||||||
@@ -61,7 +63,8 @@ def test_existing_user_with_no_permissions_accept_invite(app_,
|
|||||||
|
|
||||||
def test_if_existing_user_accepts_twice_they_redirect_to_sign_in(app_,
|
def test_if_existing_user_accepts_twice_they_redirect_to_sign_in(app_,
|
||||||
mocker,
|
mocker,
|
||||||
sample_invite):
|
sample_invite,
|
||||||
|
mock_get_service):
|
||||||
|
|
||||||
sample_invite['status'] = 'accepted'
|
sample_invite['status'] = 'accepted'
|
||||||
invite = InvitedUser(**sample_invite)
|
invite = InvitedUser(**sample_invite)
|
||||||
@@ -82,6 +85,7 @@ def test_existing_user_of_service_get_redirected_to_signin(app_,
|
|||||||
mocker,
|
mocker,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
sample_invite,
|
sample_invite,
|
||||||
|
mock_get_service,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_accept_invite):
|
mock_accept_invite):
|
||||||
sample_invite['email_address'] = api_user_active.email_address
|
sample_invite['email_address'] = api_user_active.email_address
|
||||||
@@ -109,7 +113,8 @@ def test_existing_signed_out_user_accept_invite_redirects_to_sign_in(app_,
|
|||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_get_users_by_service,
|
mock_get_users_by_service,
|
||||||
mock_add_user_to_service,
|
mock_add_user_to_service,
|
||||||
mock_accept_invite):
|
mock_accept_invite,
|
||||||
|
mock_get_service):
|
||||||
|
|
||||||
expected_service = service_one['id']
|
expected_service = service_one['id']
|
||||||
expected_permissions = ['send_messages', 'manage_service', 'manage_api_keys']
|
expected_permissions = ['send_messages', 'manage_service', 'manage_api_keys']
|
||||||
@@ -136,7 +141,8 @@ def test_new_user_accept_invite_calls_api_and_redirects_to_registration(app_,
|
|||||||
mock_check_invite_token,
|
mock_check_invite_token,
|
||||||
mock_dont_get_user_by_email,
|
mock_dont_get_user_by_email,
|
||||||
mock_add_user_to_service,
|
mock_add_user_to_service,
|
||||||
mock_get_users_by_service):
|
mock_get_users_by_service,
|
||||||
|
mock_get_service):
|
||||||
|
|
||||||
expected_redirect_location = 'http://localhost/register-from-invite'
|
expected_redirect_location = 'http://localhost/register-from-invite'
|
||||||
|
|
||||||
@@ -157,7 +163,8 @@ def test_new_user_accept_invite_calls_api_and_views_registration_page(app_,
|
|||||||
mock_check_invite_token,
|
mock_check_invite_token,
|
||||||
mock_dont_get_user_by_email,
|
mock_dont_get_user_by_email,
|
||||||
mock_add_user_to_service,
|
mock_add_user_to_service,
|
||||||
mock_get_users_by_service):
|
mock_get_users_by_service,
|
||||||
|
mock_get_service):
|
||||||
|
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -215,7 +222,8 @@ def test_new_user_accept_invite_completes_new_registration_redirects_to_verify(a
|
|||||||
mock_register_user,
|
mock_register_user,
|
||||||
mock_send_verify_code,
|
mock_send_verify_code,
|
||||||
mock_get_users_by_service,
|
mock_get_users_by_service,
|
||||||
mock_add_user_to_service):
|
mock_add_user_to_service,
|
||||||
|
mock_get_service):
|
||||||
|
|
||||||
expected_service = service_one['id']
|
expected_service = service_one['id']
|
||||||
expected_email = sample_invite['email_address']
|
expected_email = sample_invite['email_address']
|
||||||
@@ -261,7 +269,8 @@ def test_signed_in_existing_user_cannot_use_anothers_invite(app_,
|
|||||||
api_user_active,
|
api_user_active,
|
||||||
sample_invite,
|
sample_invite,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_accept_invite):
|
mock_accept_invite,
|
||||||
|
mock_get_service):
|
||||||
invite = InvitedUser(**sample_invite)
|
invite = InvitedUser(**sample_invite)
|
||||||
mocker.patch('app.invite_api_client.check_token', return_value=invite)
|
mocker.patch('app.invite_api_client.check_token', return_value=invite)
|
||||||
mocker.patch('app.user_api_client.get_users_for_service', return_value=[api_user_active])
|
mocker.patch('app.user_api_client.get_users_for_service', return_value=[api_user_active])
|
||||||
@@ -287,7 +296,8 @@ def test_signed_out_existing_user_cannot_use_anothers_invite(app_,
|
|||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_verify_password,
|
mock_verify_password,
|
||||||
mock_send_verify_code,
|
mock_send_verify_code,
|
||||||
mock_accept_invite):
|
mock_accept_invite,
|
||||||
|
mock_get_service):
|
||||||
invite = InvitedUser(**sample_invite)
|
invite = InvitedUser(**sample_invite)
|
||||||
mocker.patch('app.invite_api_client.check_token', return_value=invite)
|
mocker.patch('app.invite_api_client.check_token', return_value=invite)
|
||||||
mocker.patch('app.user_api_client.get_users_for_service', return_value=[api_user_active])
|
mocker.patch('app.user_api_client.get_users_for_service', return_value=[api_user_active])
|
||||||
|
|||||||
@@ -6,9 +6,10 @@ from tests import validate_route_permission
|
|||||||
|
|
||||||
def test_should_show_api_keys_and_documentation_page(app_,
|
def test_should_show_api_keys_and_documentation_page(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_login):
|
mock_get_service):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
client.login(api_user_active)
|
client.login(api_user_active)
|
||||||
@@ -20,9 +21,10 @@ def test_should_show_api_keys_and_documentation_page(app_,
|
|||||||
def test_should_show_empty_api_keys_page(app_,
|
def test_should_show_empty_api_keys_page(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
|
mock_login,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_get_no_api_keys,
|
mock_get_no_api_keys,
|
||||||
mock_login,
|
mock_get_service,
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -38,10 +40,11 @@ def test_should_show_empty_api_keys_page(app_,
|
|||||||
|
|
||||||
def test_should_show_api_keys_page(app_,
|
def test_should_show_api_keys_page(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_get_api_keys,
|
mock_get_api_keys,
|
||||||
mock_login,
|
mock_get_service,
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -58,10 +61,11 @@ def test_should_show_api_keys_page(app_,
|
|||||||
|
|
||||||
def test_should_show_name_api_key_page(app_,
|
def test_should_show_name_api_key_page(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_get_api_keys,
|
mock_get_api_keys,
|
||||||
mock_login,
|
mock_get_service,
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -74,11 +78,12 @@ def test_should_show_name_api_key_page(app_,
|
|||||||
|
|
||||||
def test_should_render_show_api_key(app_,
|
def test_should_render_show_api_key(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_create_api_key,
|
mock_create_api_key,
|
||||||
mock_get_api_keys,
|
mock_get_api_keys,
|
||||||
mock_login,
|
mock_get_service,
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -94,10 +99,11 @@ def test_should_render_show_api_key(app_,
|
|||||||
|
|
||||||
def test_should_show_confirm_revoke_api_key(app_,
|
def test_should_show_confirm_revoke_api_key(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_get_api_keys,
|
mock_get_api_keys,
|
||||||
mock_login,
|
mock_get_service,
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -112,11 +118,12 @@ def test_should_show_confirm_revoke_api_key(app_,
|
|||||||
|
|
||||||
def test_should_redirect_after_revoking_api_key(app_,
|
def test_should_redirect_after_revoking_api_key(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_revoke_api_key,
|
mock_revoke_api_key,
|
||||||
mock_get_api_keys,
|
mock_get_api_keys,
|
||||||
mock_login,
|
mock_get_service,
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -130,7 +137,11 @@ def test_should_redirect_after_revoking_api_key(app_,
|
|||||||
mock_get_api_keys.assert_called_once_with(service_id=service_id, key_id=321)
|
mock_get_api_keys.assert_called_once_with(service_id=service_id, key_id=321)
|
||||||
|
|
||||||
|
|
||||||
def test_route_permissions(mocker, app_, api_user_active, service_one, mock_get_api_keys):
|
def test_route_permissions(mocker,
|
||||||
|
app_,
|
||||||
|
api_user_active,
|
||||||
|
service_one,
|
||||||
|
mock_get_api_keys):
|
||||||
routes = [
|
routes = [
|
||||||
'main.api_keys',
|
'main.api_keys',
|
||||||
'main.create_api_key',
|
'main.create_api_key',
|
||||||
@@ -148,7 +159,11 @@ def test_route_permissions(mocker, app_, api_user_active, service_one, mock_get_
|
|||||||
service_one)
|
service_one)
|
||||||
|
|
||||||
|
|
||||||
def test_route_invalid_permissions(mocker, app_, api_user_active, service_one, mock_get_api_keys):
|
def test_route_invalid_permissions(mocker,
|
||||||
|
app_,
|
||||||
|
api_user_active,
|
||||||
|
service_one,
|
||||||
|
mock_get_api_keys):
|
||||||
routes = [
|
routes = [
|
||||||
'main.api_keys',
|
'main.api_keys',
|
||||||
'main.create_api_key',
|
'main.create_api_key',
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ def test_should_return_list_of_all_jobs(app_,
|
|||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_login,
|
mock_login,
|
||||||
|
mock_get_service,
|
||||||
mock_get_jobs,
|
mock_get_jobs,
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
|
|||||||
@@ -283,10 +283,10 @@ def test_should_redirect_after_status_confirmation(app_,
|
|||||||
|
|
||||||
def test_should_show_delete_page(app_,
|
def test_should_show_delete_page(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
mock_get_service,
|
mock_get_service,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_login,
|
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
|
|||||||
@@ -7,10 +7,11 @@ from flask import url_for
|
|||||||
|
|
||||||
def test_should_show_page_for_one_templates(app_,
|
def test_should_show_page_for_one_templates(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
|
mock_get_service,
|
||||||
mock_get_service_template,
|
mock_get_service_template,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_login,
|
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -31,11 +32,12 @@ def test_should_show_page_for_one_templates(app_,
|
|||||||
|
|
||||||
def test_should_redirect_when_saving_a_template(app_,
|
def test_should_redirect_when_saving_a_template(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
mock_get_service_template,
|
mock_get_service_template,
|
||||||
mock_update_service_template,
|
mock_update_service_template,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
|
mock_get_service,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_login,
|
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -65,10 +67,11 @@ def test_should_redirect_when_saving_a_template(app_,
|
|||||||
|
|
||||||
def test_should_show_delete_template_page(app_,
|
def test_should_show_delete_template_page(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
|
mock_get_service,
|
||||||
mock_get_service_template,
|
mock_get_service_template,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_login,
|
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
@@ -91,11 +94,12 @@ def test_should_show_delete_template_page(app_,
|
|||||||
|
|
||||||
def test_should_redirect_when_deleting_a_template(app_,
|
def test_should_redirect_when_deleting_a_template(app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
|
mock_login,
|
||||||
|
mock_get_service,
|
||||||
mock_get_service_template,
|
mock_get_service_template,
|
||||||
mock_delete_service_template,
|
mock_delete_service_template,
|
||||||
mock_get_user,
|
mock_get_user,
|
||||||
mock_get_user_by_email,
|
mock_get_user_by_email,
|
||||||
mock_login,
|
|
||||||
mock_has_permissions):
|
mock_has_permissions):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
with app_.test_client() as client:
|
with app_.test_client() as client:
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ def test_should_render_tour_pages(
|
|||||||
app_,
|
app_,
|
||||||
api_user_active,
|
api_user_active,
|
||||||
mocker,
|
mocker,
|
||||||
|
mock_get_service,
|
||||||
page
|
page
|
||||||
):
|
):
|
||||||
with app_.test_request_context():
|
with app_.test_request_context():
|
||||||
|
|||||||
Reference in New Issue
Block a user