mirror of
https://github.com/GSA/notifications-api.git
synced 2026-08-26 17:23:50 -04:00
All tests working, second time around.
This commit is contained in:
@@ -1,15 +1,19 @@
|
||||
from datetime import datetime
|
||||
from flask import (jsonify, request)
|
||||
from sqlalchemy.exc import DataError
|
||||
from sqlalchemy.orm.exc import NoResultFound
|
||||
from app.dao.services_dao import get_model_services
|
||||
from app.dao.users_dao import (
|
||||
get_model_users, save_model_user, delete_model_user)
|
||||
get_model_users, save_model_user, delete_model_user,
|
||||
create_user_code, get_user_code, use_user_code,
|
||||
create_secret_code)
|
||||
from app.schemas import (
|
||||
user_schema, users_schema, service_schema, services_schema)
|
||||
user_schema, users_schema, service_schema, services_schema,
|
||||
verify_code_schema)
|
||||
from app import db
|
||||
|
||||
|
||||
from flask import Blueprint
|
||||
|
||||
|
||||
user = Blueprint('user', __name__)
|
||||
|
||||
|
||||
@@ -57,19 +61,81 @@ def verify_user_password(user_id):
|
||||
return jsonify(result="error", message="Invalid user id"), 400
|
||||
except NoResultFound:
|
||||
return jsonify(result="error", message="User not found"), 404
|
||||
text_pwd = None
|
||||
txt_pwd = None
|
||||
try:
|
||||
text_pwd = request.get_json()['password']
|
||||
txt_pwd = request.get_json()['password']
|
||||
except KeyError:
|
||||
return jsonify(
|
||||
result="error",
|
||||
message={'password': ['Required field missing data']}), 400
|
||||
if user.check_password(text_pwd):
|
||||
if user.check_password(txt_pwd):
|
||||
return jsonify(), 204
|
||||
else:
|
||||
return jsonify(result='error', message={'password': ['Incorrect password']}), 400
|
||||
|
||||
|
||||
@user.route('/<int:user_id>/verify/code', methods=['POST'])
|
||||
def verify_user_code(user_id):
|
||||
try:
|
||||
user = get_model_users(user_id=user_id)
|
||||
except DataError:
|
||||
return jsonify(result="error", message="Invalid user id"), 400
|
||||
except NoResultFound:
|
||||
return jsonify(result="error", message="User not found"), 404
|
||||
txt_code = None
|
||||
resp_json = request.get_json()
|
||||
txt_type = None
|
||||
errors = {}
|
||||
try:
|
||||
txt_code = resp_json['code']
|
||||
except KeyError:
|
||||
errors.update({'code': ['Required field missing data']})
|
||||
try:
|
||||
txt_type = resp_json['code_type']
|
||||
except KeyError:
|
||||
errors.update({'code_type': ['Required field missing data']})
|
||||
if errors:
|
||||
return jsonify(result="error", message=errors), 400
|
||||
code = get_user_code(user, txt_code, txt_type)
|
||||
if not code:
|
||||
return jsonify(result="error", message="Code not found"), 404
|
||||
if datetime.now() > code.expiry_datetime or code.code_used:
|
||||
return jsonify(result="error", message="Code has expired"), 400
|
||||
use_user_code(code.id)
|
||||
return jsonify(), 204
|
||||
|
||||
|
||||
@user.route('/<int:user_id>/code/', methods=['POST'])
|
||||
def send_user_code(user_id):
|
||||
try:
|
||||
user = get_model_users(user_id=user_id)
|
||||
except DataError:
|
||||
return jsonify(result="error", message="Invalid user id"), 400
|
||||
except NoResultFound:
|
||||
return jsonify(result="error", message="User not found"), 404
|
||||
text_pwd = None
|
||||
verify_code, errors = verify_code_schema.load(request.get_json())
|
||||
if errors:
|
||||
return jsonify(result="error", message=errors), 400
|
||||
code = create_user_code(
|
||||
user, create_secret_code(), verify_code.code_type)
|
||||
# TODO this will need to fixed up when we stop using
|
||||
# notify_alpha_client
|
||||
if verify_code.code_type == 'sms':
|
||||
notify_alpha_client.send_sms(
|
||||
mobile_number=user.mobile_number,
|
||||
message=code.code)
|
||||
elif verify_code.code_type == 'email':
|
||||
notify_alpha_client.send_email(
|
||||
user.email_address,
|
||||
code.code,
|
||||
'notify@digital.cabinet-office.gov.uk',
|
||||
'Verification code')
|
||||
else:
|
||||
abort(500)
|
||||
return jsonify(), 204
|
||||
|
||||
|
||||
@user.route('/<int:user_id>', methods=['GET'])
|
||||
@user.route('/', methods=['GET'])
|
||||
def get_user(user_id=None):
|
||||
|
||||
Reference in New Issue
Block a user