mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-20 22:40:31 -04:00
[WIP]
Let the API return a 400 error message if the service name is a duplicate.
This commit is contained in:
@@ -3,6 +3,8 @@ import pytz
|
||||
|
||||
from flask_wtf import FlaskForm as Form
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from notifications_python_client.errors import HTTPError
|
||||
from notifications_utils.recipients import (
|
||||
validate_phone_number,
|
||||
InvalidPhoneError
|
||||
@@ -211,13 +213,7 @@ class TextNotReceivedForm(Form):
|
||||
|
||||
|
||||
class AddServiceForm(Form):
|
||||
def __init__(self, names_func, *args, **kwargs):
|
||||
"""
|
||||
Keyword arguments:
|
||||
names_func -- Returns a list of unique service_names already registered
|
||||
on the system.
|
||||
"""
|
||||
self._names_func = names_func
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AddServiceForm, self).__init__(*args, **kwargs)
|
||||
|
||||
name = StringField(
|
||||
@@ -227,11 +223,27 @@ class AddServiceForm(Form):
|
||||
]
|
||||
)
|
||||
|
||||
service_id = HiddenField('service_id')
|
||||
|
||||
def _create_service(self, service_name, email_from):
|
||||
from app import service_api_client
|
||||
from flask import current_app, session
|
||||
service_id = service_api_client.create_service(service_name=service_name,
|
||||
message_limit=current_app.config['DEFAULT_SERVICE_LIMIT'],
|
||||
restricted=True,
|
||||
user_id=session['user_id'],
|
||||
email_from=email_from)
|
||||
session['service_id'] = service_id
|
||||
return service_id
|
||||
|
||||
def validate_name(self, a):
|
||||
from app.utils import email_safe
|
||||
# make sure the email_from will be unique to all services
|
||||
if email_safe(a.data) in self._names_func():
|
||||
raise ValidationError('This service name is already in use')
|
||||
email_from = email_safe(a.data)
|
||||
try:
|
||||
self.service_id = self._create_service(a.data, email_from)
|
||||
except HTTPError as e:
|
||||
if e.status_code == 400 and e.message['name']:
|
||||
raise ValidationError(message=e.message['name'][0])
|
||||
|
||||
|
||||
class ServiceNameForm(Form):
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
|
||||
from flask import (
|
||||
render_template,
|
||||
redirect,
|
||||
@@ -10,7 +11,6 @@ from flask_login import (
|
||||
current_user,
|
||||
login_required
|
||||
)
|
||||
|
||||
from werkzeug.exceptions import abort
|
||||
|
||||
from app.main import main
|
||||
@@ -60,15 +60,15 @@ def add_service():
|
||||
if not is_gov_user(current_user.email_address):
|
||||
abort(403)
|
||||
|
||||
form = AddServiceForm(service_api_client.find_all_service_email_from)
|
||||
form = AddServiceForm()
|
||||
heading = 'Which service do you want to set up notifications for?'
|
||||
|
||||
if form.validate_on_submit():
|
||||
email_from = email_safe(form.name.data)
|
||||
service_name = form.name.data
|
||||
service_id = _create_service(service_name, email_from)
|
||||
|
||||
if (len(service_api_client.get_active_services({'user_id': session['user_id']}).get('data', [])) > 1):
|
||||
# email_from = email_safe(form.name.data)
|
||||
# service_name = form.name.data
|
||||
# service_id = _create_service(service_name, email_from)
|
||||
service_id = form.service_id
|
||||
if len(service_api_client.get_active_services({'user_id': session['user_id']}).get('data', [])) > 1:
|
||||
return redirect(url_for('main.service_dashboard', service_id=service_id))
|
||||
|
||||
example_sms_template = service_api_client.create_service_template(
|
||||
|
||||
Reference in New Issue
Block a user