mirror of
https://github.com/GSA/notifications-api.git
synced 2026-01-31 23:26:23 -05:00
Merge branch 'master' into primary-provider
Conflicts: tests/app/dao/test_provider_rates_dao.py
This commit is contained in:
@@ -12,7 +12,7 @@ def create_secret_code():
|
||||
def save_model_user(usr, update_dict={}, pwd=None):
|
||||
if pwd:
|
||||
usr.password = pwd
|
||||
usr.password_changed_at = datetime.now()
|
||||
usr.password_changed_at = datetime.utcnow()
|
||||
if update_dict:
|
||||
if update_dict.get('id'):
|
||||
del update_dict['id']
|
||||
@@ -25,7 +25,7 @@ def save_model_user(usr, update_dict={}, pwd=None):
|
||||
|
||||
def create_user_code(user, code, code_type):
|
||||
verify_code = VerifyCode(code_type=code_type,
|
||||
expiry_datetime=datetime.now() + timedelta(hours=1),
|
||||
expiry_datetime=datetime.utcnow() + timedelta(hours=1),
|
||||
user=user)
|
||||
verify_code.code = code
|
||||
db.session.add(verify_code)
|
||||
|
||||
@@ -205,7 +205,7 @@ def create_history(obj):
|
||||
|
||||
if not obj.version:
|
||||
obj.version = 1
|
||||
obj.created_at = datetime.datetime.now()
|
||||
obj.created_at = datetime.datetime.utcnow()
|
||||
else:
|
||||
obj.version += 1
|
||||
|
||||
|
||||
@@ -81,13 +81,13 @@ class Service(db.Model, Versioned):
|
||||
index=False,
|
||||
unique=False,
|
||||
nullable=False,
|
||||
default=datetime.datetime.now)
|
||||
default=datetime.datetime.utcnow)
|
||||
updated_at = db.Column(
|
||||
db.DateTime,
|
||||
index=False,
|
||||
unique=False,
|
||||
nullable=True,
|
||||
onupdate=datetime.datetime.now)
|
||||
onupdate=datetime.datetime.utcnow)
|
||||
active = db.Column(db.Boolean, index=False, unique=False, nullable=False)
|
||||
message_limit = db.Column(db.BigInteger, index=False, unique=False, nullable=False)
|
||||
users = db.relationship(
|
||||
@@ -114,13 +114,13 @@ class ApiKey(db.Model, Versioned):
|
||||
index=False,
|
||||
unique=False,
|
||||
nullable=False,
|
||||
default=datetime.datetime.now)
|
||||
default=datetime.datetime.utcnow)
|
||||
updated_at = db.Column(
|
||||
db.DateTime,
|
||||
index=False,
|
||||
unique=False,
|
||||
nullable=True,
|
||||
onupdate=datetime.datetime.now)
|
||||
onupdate=datetime.datetime.utcnow)
|
||||
created_by = db.relationship('User')
|
||||
created_by_id = db.Column(UUID(as_uuid=True), db.ForeignKey('users.id'), index=True, nullable=False)
|
||||
|
||||
|
||||
@@ -129,9 +129,19 @@ class TemplateSchema(BaseTemplateSchema):
|
||||
raise ValidationError('Invalid template subject', 'subject')
|
||||
|
||||
|
||||
class TemplateHistorySchema(BaseTemplateSchema):
|
||||
class TemplateHistorySchema(BaseSchema):
|
||||
|
||||
created_by = field_for(models.Template, 'created_by', required=True)
|
||||
class Meta:
|
||||
# Use the base model class that the history class is created from
|
||||
model = models.Template
|
||||
# We have to use a method here because the relationship field on the
|
||||
# history object is not created.
|
||||
created_by = fields.Method("populate_created_by", dump_only=True)
|
||||
created_at = field_for(models.Template, 'created_at', format='%Y-%m-%d %H:%M:%S.%f')
|
||||
|
||||
def populate_created_by(self, data):
|
||||
usr = models.User.query.filter_by(id=data.created_by_id).one()
|
||||
return {'id': str(usr.id), 'name': usr.name, 'email_address': usr.email_address}
|
||||
|
||||
|
||||
class NotificationsStatisticsSchema(BaseSchema):
|
||||
@@ -149,6 +159,10 @@ class ApiKeySchema(BaseSchema):
|
||||
|
||||
|
||||
class JobSchema(BaseSchema):
|
||||
created_by_user = fields.Nested(UserSchema, attribute="created_by",
|
||||
dump_to="created_by", only=["id", "name"], dump_only=True)
|
||||
created_by = field_for(models.Job, 'created_by', required=True, load_only=True)
|
||||
|
||||
class Meta:
|
||||
model = models.Job
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ def show_delivery_status():
|
||||
return jsonify(status="ok"), 200
|
||||
else:
|
||||
notifications_alert = current_app.config['NOTIFICATIONS_ALERT']
|
||||
some_number_of_minutes_ago = datetime.now() - timedelta(minutes=notifications_alert)
|
||||
some_number_of_minutes_ago = datetime.utcnow() - timedelta(minutes=notifications_alert)
|
||||
notifications = Notification.query.filter(Notification.status == 'sending',
|
||||
Notification.created_at < some_number_of_minutes_ago).all()
|
||||
message = "{} notifications in sending state over {} minutes".format(len(notifications), notifications_alert)
|
||||
|
||||
@@ -99,12 +99,13 @@ def get_template_by_id_and_service_id(service_id, template_id):
|
||||
|
||||
@template.route('/<uuid:template_id>/version/<int:version>')
|
||||
def get_template_version(service_id, template_id, version):
|
||||
fetched_template = dao_get_template_by_id_and_service_id(
|
||||
template_id=template_id,
|
||||
service_id=service_id,
|
||||
version=version
|
||||
data, errors = template_history_schema.dump(
|
||||
dao_get_template_by_id_and_service_id(
|
||||
template_id=template_id,
|
||||
service_id=service_id,
|
||||
version=version
|
||||
)
|
||||
)
|
||||
data, errors = template_history_schema.dump(fetched_template)
|
||||
if errors:
|
||||
return json_resp(result='error', message=errors), 400
|
||||
return jsonify(data=data)
|
||||
@@ -112,8 +113,10 @@ def get_template_version(service_id, template_id, version):
|
||||
|
||||
@template.route('/<uuid:template_id>/version')
|
||||
def get_template_versions(service_id, template_id):
|
||||
fetched_templates = dao_get_template_versions(service_id, template_id)
|
||||
data, errors = template_history_schema.dump(fetched_templates, many=True)
|
||||
data, errors = template_history_schema.dump(
|
||||
dao_get_template_versions(service_id, template_id),
|
||||
many=True
|
||||
)
|
||||
if errors:
|
||||
return json_resp(result='error', message=errors), 400
|
||||
return jsonify(data=data)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import json
|
||||
from datetime import datetime
|
||||
from flask import (jsonify, request, abort, Blueprint, current_app)
|
||||
from app import encryption
|
||||
@@ -109,7 +110,7 @@ def verify_user_code(user_id):
|
||||
code = get_user_code(user_to_verify, 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:
|
||||
if datetime.utcnow() > code.expiry_datetime or code.code_used:
|
||||
return jsonify(result="error", message="Code has expired"), 400
|
||||
use_user_code(code.id)
|
||||
return jsonify({}), 204
|
||||
@@ -210,8 +211,7 @@ def send_user_reset_password():
|
||||
|
||||
def _create_reset_password_url(email):
|
||||
from notifications_utils.url_safe_token import generate_token
|
||||
import json
|
||||
data = json.dumps({'email': email, 'created_at': str(datetime.now())})
|
||||
data = json.dumps({'email': email, 'created_at': str(datetime.utcnow())})
|
||||
token = generate_token(data, current_app.config['SECRET_KEY'], current_app.config['DANGEROUS_SALT'])
|
||||
|
||||
return current_app.config['ADMIN_BASE_URL'] + '/new-password/' + token
|
||||
@@ -219,7 +219,6 @@ def _create_reset_password_url(email):
|
||||
|
||||
def _create_verification_url(user, secret_code):
|
||||
from notifications_utils.url_safe_token import generate_token
|
||||
import json
|
||||
data = json.dumps({'user_id': str(user.id), 'email': user.email_address, 'secret_code': secret_code})
|
||||
token = generate_token(data, current_app.config['SECRET_KEY'], current_app.config['DANGEROUS_SALT'])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user