mirror of
https://github.com/GSA/notifications-admin.git
synced 2026-08-25 08:44:23 -04:00
resolve merge conflicts
This commit is contained in:
@@ -1,54 +0,0 @@
|
||||
from random import randint
|
||||
|
||||
from flask import url_for, current_app
|
||||
|
||||
from app import admin_api_client
|
||||
from app.main.dao import verify_codes_dao
|
||||
|
||||
|
||||
def create_verify_code():
|
||||
return ''.join(["%s" % randint(0, 9) for _ in range(0, 5)])
|
||||
|
||||
|
||||
def send_sms_code(user_id, mobile_number):
|
||||
sms_code = create_verify_code()
|
||||
verify_codes_dao.add_code(user_id=user_id, code=sms_code, code_type='sms')
|
||||
admin_api_client.send_sms(mobile_number=mobile_number, message=sms_code, token=admin_api_client.auth_token)
|
||||
|
||||
return sms_code
|
||||
|
||||
|
||||
def send_email_code(user_id, email):
|
||||
email_code = create_verify_code()
|
||||
verify_codes_dao.add_code(user_id=user_id, code=email_code, code_type='email')
|
||||
admin_api_client.send_email(email_address=email,
|
||||
from_str='notify@digital.cabinet-office.gov.uk',
|
||||
message=email_code,
|
||||
subject='Verification code',
|
||||
token=admin_api_client.auth_token)
|
||||
return email_code
|
||||
|
||||
|
||||
def send_change_password_email(email):
|
||||
link_to_change_password = url_for('.new_password', token=generate_token(email), _external=True)
|
||||
admin_api_client.send_email(email_address=email,
|
||||
from_str='notify@digital.cabinet-office.gov.uk',
|
||||
message=link_to_change_password,
|
||||
subject='Reset password for GOV.UK Notify',
|
||||
token=admin_api_client.auth_token)
|
||||
|
||||
|
||||
def generate_token(email):
|
||||
from itsdangerous import TimestampSigner
|
||||
signer = TimestampSigner(current_app.config['SECRET_KEY'])
|
||||
return signer.sign(email).decode('utf8')
|
||||
|
||||
|
||||
def check_token(token):
|
||||
from itsdangerous import TimestampSigner, SignatureExpired
|
||||
signer = TimestampSigner(current_app.config['SECRET_KEY'])
|
||||
try:
|
||||
email = signer.unsign(token, max_age=current_app.config['TOKEN_MAX_AGE_SECONDS'])
|
||||
return email
|
||||
except SignatureExpired as e:
|
||||
current_app.logger.info('token expired %s' % e)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
from flask import (
|
||||
render_template, redirect, jsonify, session, url_for)
|
||||
render_template, redirect, session, url_for)
|
||||
|
||||
from app.main import main
|
||||
from app.main.dao import users_dao
|
||||
from app.main.forms import EmailNotReceivedForm, TextNotReceivedForm
|
||||
from app.main.views import send_sms_code, send_email_code
|
||||
from app.notify_client.sender import send_sms_code, send_email_code
|
||||
|
||||
|
||||
@main.route('/email-not-received', methods=['GET', 'POST'])
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
from flask import render_template, flash, current_app
|
||||
from flask import render_template, current_app
|
||||
from app.main import main
|
||||
from app.main.dao import users_dao
|
||||
from app.main.forms import ForgotPasswordForm
|
||||
from app.main.views import send_change_password_email
|
||||
from app.notify_client.sender import send_change_password_email
|
||||
|
||||
|
||||
@main.route('/forgot-password', methods=['GET', 'POST'])
|
||||
|
||||
@@ -3,7 +3,7 @@ from flask import (render_template, url_for, redirect, flash)
|
||||
from app.main import main
|
||||
from app.main.dao import users_dao
|
||||
from app.main.forms import NewPasswordForm
|
||||
from app.main.views import send_sms_code, check_token
|
||||
from app.notify_client.sender import check_token, send_sms_code
|
||||
|
||||
|
||||
@main.route('/new-password/<path:token>', methods=['GET', 'POST'])
|
||||
@@ -13,7 +13,7 @@ def new_password(token):
|
||||
flash('The link in the email we sent you has expired. Enter your email address to resend.')
|
||||
return redirect(url_for('.forgot_password'))
|
||||
|
||||
user = users_dao.get_user_by_email(email_address=email_address.decode('utf-8'))
|
||||
user = users_dao.get_user_by_email(email_address=email_address)
|
||||
if user and user.state != 'request_password_reset':
|
||||
flash('The link in the email we sent you has already been used.')
|
||||
return redirect(url_for('.index'))
|
||||
|
||||
@@ -5,12 +5,14 @@ from flask import render_template, redirect, session
|
||||
from app.main import main
|
||||
from app.main.dao import users_dao
|
||||
from app.main.forms import RegisterUserForm
|
||||
from app.main.views import send_sms_code, send_email_code
|
||||
from app.models import User
|
||||
|
||||
|
||||
# TODO how do we handle duplicate unverifed email addresses?
|
||||
# malicious or otherwise.
|
||||
from app.notify_client.sender import send_sms_code, send_email_code
|
||||
|
||||
|
||||
@main.route('/register', methods=['GET', 'POST'])
|
||||
def register():
|
||||
form = RegisterUserForm(users_dao.get_user_by_email)
|
||||
|
||||
@@ -2,6 +2,7 @@ from flask import render_template, redirect, request, url_for, abort
|
||||
from flask_login import login_required
|
||||
|
||||
from app.main import main
|
||||
from app.main.forms import ConfirmPasswordForm, ServiceNameForm
|
||||
|
||||
service = {
|
||||
'name': 'Service name',
|
||||
@@ -20,10 +21,15 @@ def service_settings():
|
||||
|
||||
@main.route("/service-settings/name", methods=['GET', 'POST'])
|
||||
def name():
|
||||
|
||||
form = ServiceNameForm()
|
||||
form.service_name.data = 'Service name'
|
||||
|
||||
if request.method == 'GET':
|
||||
return render_template(
|
||||
'views/service-settings/name.html',
|
||||
service=service
|
||||
service=service,
|
||||
form=form
|
||||
)
|
||||
elif request.method == 'POST':
|
||||
return redirect(url_for('.confirm_name_change'))
|
||||
@@ -31,10 +37,14 @@ def name():
|
||||
|
||||
@main.route("/service-settings/name/confirm", methods=['GET', 'POST'])
|
||||
def confirm_name_change():
|
||||
|
||||
form = ConfirmPasswordForm()
|
||||
|
||||
if request.method == 'GET':
|
||||
return render_template(
|
||||
'views/service-settings/confirm.html',
|
||||
heading='Change your service name'
|
||||
heading='Change your service name',
|
||||
form=form
|
||||
)
|
||||
elif request.method == 'POST':
|
||||
return redirect(url_for('.service_settings'))
|
||||
@@ -64,11 +74,15 @@ def status():
|
||||
|
||||
@main.route("/service-settings/status/confirm", methods=['GET', 'POST'])
|
||||
def confirm_status_change():
|
||||
|
||||
form = ConfirmPasswordForm()
|
||||
|
||||
if request.method == 'GET':
|
||||
return render_template(
|
||||
'views/service-settings/confirm.html',
|
||||
heading='Turn off all outgoing notifications',
|
||||
destructive=True
|
||||
destructive=True,
|
||||
form=form
|
||||
)
|
||||
elif request.method == 'POST':
|
||||
return redirect(url_for('.service_settings'))
|
||||
@@ -87,11 +101,15 @@ def delete():
|
||||
|
||||
@main.route("/service-settings/delete/confirm", methods=['GET', 'POST'])
|
||||
def confirm_delete():
|
||||
|
||||
form = ConfirmPasswordForm()
|
||||
|
||||
if request.method == 'GET':
|
||||
return render_template(
|
||||
'views/service-settings/confirm.html',
|
||||
heading='Delete this service from Notify',
|
||||
destructive=True
|
||||
destructive=True,
|
||||
form=form
|
||||
)
|
||||
elif request.method == 'POST':
|
||||
return redirect(url_for('.dashboard'))
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
from flask import (
|
||||
render_template, redirect, jsonify, url_for)
|
||||
render_template, redirect, url_for)
|
||||
from flask import session
|
||||
|
||||
from app.main import main
|
||||
from app.main.dao import users_dao
|
||||
from app.main.encryption import check_hash
|
||||
from app.main.forms import LoginForm
|
||||
from app.main.views import send_sms_code
|
||||
from app.notify_client.sender import send_sms_code
|
||||
|
||||
|
||||
@main.route('/sign-in', methods=(['GET', 'POST']))
|
||||
|
||||
24
app/main/views/styleguide.py
Normal file
24
app/main/views/styleguide.py
Normal file
@@ -0,0 +1,24 @@
|
||||
from flask import render_template
|
||||
from flask_wtf import Form
|
||||
from wtforms import StringField, PasswordField, TextAreaField, validators
|
||||
from app.main import main
|
||||
|
||||
|
||||
@main.route('/_styleguide')
|
||||
def styleguide():
|
||||
|
||||
class FormExamples(Form):
|
||||
username = StringField(u'Username')
|
||||
password = PasswordField(u'Password', [validators.required()])
|
||||
message = TextAreaField(u'Message')
|
||||
|
||||
form = FormExamples()
|
||||
|
||||
form.message.data = "Your vehicle tax for ((registration number)) is due on ((date)). Renew online at www.gov.uk/vehicle-tax" # noqa
|
||||
|
||||
form.validate()
|
||||
|
||||
return render_template(
|
||||
'views/styleguide.html',
|
||||
form=form
|
||||
)
|
||||
@@ -1,6 +1,7 @@
|
||||
from flask import request, render_template, redirect, url_for
|
||||
|
||||
from app.main import main
|
||||
from app.main.forms import TemplateForm
|
||||
|
||||
|
||||
@main.route("/templates")
|
||||
@@ -10,12 +11,17 @@ def manage_templates():
|
||||
|
||||
@main.route("/templates/template", methods=['GET', 'POST'])
|
||||
def add_template():
|
||||
|
||||
form = TemplateForm()
|
||||
|
||||
form.template_name.data = 'Reminder'
|
||||
form.template_body.data = 'Vehicle tax: Your vehicle tax for ((registration number)) expires on ((date)). Tax your vehicle at www.gov.uk/vehicle-tax' # noqa
|
||||
|
||||
if request.method == 'GET':
|
||||
return render_template(
|
||||
'views/edit-template.html',
|
||||
template_name='Reminder',
|
||||
template_body='Vehicle tax: Your vehicle tax for ((registration number)) expires on ((date)). Tax your vehicle at www.gov.uk/vehicle-tax', # noqa
|
||||
h1='Edit template'
|
||||
h1='Edit template',
|
||||
form=form
|
||||
)
|
||||
elif request.method == 'POST':
|
||||
return redirect(url_for('.manage_templates'))
|
||||
@@ -23,10 +29,14 @@ def add_template():
|
||||
|
||||
@main.route("/templates/template/add", methods=['GET', 'POST'])
|
||||
def edit_template():
|
||||
|
||||
form = TemplateForm()
|
||||
|
||||
if request.method == 'GET':
|
||||
return render_template(
|
||||
'views/edit-template.html',
|
||||
h1='Add template'
|
||||
h1='Add template',
|
||||
form=form
|
||||
)
|
||||
elif request.method == 'POST':
|
||||
return redirect(url_for('.manage_templates'))
|
||||
|
||||
Reference in New Issue
Block a user