Rename TransactionalComplaint to ProviderComplaint

This commit is contained in:
Adrià Casajús 2022-04-25 14:40:42 +02:00
parent fcd2ab6fed
commit 5208c549fa
No known key found for this signature in database
GPG Key ID: F0033226A5AFC9B9
12 changed files with 49 additions and 49 deletions

View File

@ -21,9 +21,9 @@ from app.models import (
AppleSubscription, AppleSubscription,
AdminAuditLog, AdminAuditLog,
AuditLogActionEnum, AuditLogActionEnum,
TransactionalComplaintState, ProviderComplaintState,
Phase, Phase,
TransactionalComplaint, ProviderComplaint,
) )
@ -376,7 +376,7 @@ class AdminAuditLogAdmin(SLModelView):
def _transactionalcomplaint_state_formatter(view, context, model, name): def _transactionalcomplaint_state_formatter(view, context, model, name):
return "{} ({})".format(TransactionalComplaintState(model.state).name, model.state) return "{} ({})".format(ProviderComplaintState(model.state).name, model.state)
def _transactionalcomplaint_phase_formatter(view, context, model, name): def _transactionalcomplaint_phase_formatter(view, context, model, name):
@ -390,7 +390,7 @@ def _transactionalcomplaint_refused_email_id_formatter(view, context, model, nam
return Markup(markupstring) return Markup(markupstring)
class TransactionalComplaintAdmin(SLModelView): class ProviderComplaintAdmin(SLModelView):
column_searchable_list = ["id", "user.id", "created_at"] column_searchable_list = ["id", "user.id", "created_at"]
column_filters = ["user.id", "state"] column_filters = ["user.id", "state"]
column_hide_backrefs = False column_hide_backrefs = False
@ -410,12 +410,12 @@ class TransactionalComplaintAdmin(SLModelView):
EndpointLinkRowAction("fa fa-check-square", ".mark_ok"), EndpointLinkRowAction("fa fa-check-square", ".mark_ok"),
] ]
def _get_complaint(self) -> Optional[TransactionalComplaint]: def _get_complaint(self) -> Optional[ProviderComplaint]:
complain_id = request.args.get("id") complain_id = request.args.get("id")
if complain_id is None: if complain_id is None:
flash("Missing id", "error") flash("Missing id", "error")
return None return None
complaint = TransactionalComplaint.get_by(id=complain_id) complaint = ProviderComplaint.get_by(id=complain_id)
if not complaint: if not complaint:
flash("Could not find complaint", "error") flash("Could not find complaint", "error")
return None return None
@ -426,7 +426,7 @@ class TransactionalComplaintAdmin(SLModelView):
complaint = self._get_complaint() complaint = self._get_complaint()
if not complaint: if not complaint:
return redirect("/admin/transactionalcomplaint/") return redirect("/admin/transactionalcomplaint/")
complaint.state = TransactionalComplaintState.reviewed.value complaint.state = ProviderComplaintState.reviewed.value
Session.commit() Session.commit()
return redirect("/admin/transactionalcomplaint/") return redirect("/admin/transactionalcomplaint/")
@ -437,7 +437,7 @@ class TransactionalComplaintAdmin(SLModelView):
return redirect("/admin/transactionalcomplaint/") return redirect("/admin/transactionalcomplaint/")
eml_path = complaint.refused_email.full_report_path eml_path = complaint.refused_email.full_report_path
eml_data = s3.download_email(eml_path) eml_data = s3.download_email(eml_path)
AdminAuditLog.downloaded_transactional_complaint(current_user.id, complaint.id) AdminAuditLog.downloaded_provider_complaint(current_user.id, complaint.id)
Session.commit() Session.commit()
return Response( return Response(
eml_data, eml_data,

View File

@ -26,14 +26,14 @@ from app.models import (
DeletedAlias, DeletedAlias,
DomainDeletedAlias, DomainDeletedAlias,
Contact, Contact,
TransactionalComplaint, ProviderComplaint,
Phase, Phase,
TransactionalComplaintState, ProviderComplaintState,
RefusedEmail, RefusedEmail,
) )
class TransactionalComplaintOrigin(ABC): class ProviderComplaintOrigin(ABC):
@classmethod @classmethod
@abstractmethod @abstractmethod
def get_original_message(cls, message: Message) -> Optional[Message]: def get_original_message(cls, message: Message) -> Optional[Message]:
@ -45,7 +45,7 @@ class TransactionalComplaintOrigin(ABC):
pass pass
class TransactionalYahooOrigin(TransactionalComplaintOrigin): class TransactionalYahooOrigin(ProviderComplaintOrigin):
@classmethod @classmethod
def get_original_message(cls, message: Message) -> Optional[Message]: def get_original_message(cls, message: Message) -> Optional[Message]:
# 1st part is the container # 1st part is the container
@ -63,7 +63,7 @@ class TransactionalYahooOrigin(TransactionalComplaintOrigin):
return "yahoo" return "yahoo"
class TransactionalHotmailOrigin(TransactionalComplaintOrigin): class TransactionalHotmailOrigin(ProviderComplaintOrigin):
@classmethod @classmethod
def get_original_message(cls, message: Message) -> Optional[Message]: def get_original_message(cls, message: Message) -> Optional[Message]:
# 1st part is the container # 1st part is the container
@ -97,7 +97,7 @@ def find_alias_with_address(address: str) -> Optional[Alias]:
) )
def handle_complaint(message: Message, origin: TransactionalComplaintOrigin) -> bool: def handle_complaint(message: Message, origin: ProviderComplaintOrigin) -> bool:
original_message = origin.get_original_message(message) original_message = origin.get_original_message(message)
try: try:
@ -114,7 +114,7 @@ def handle_complaint(message: Message, origin: TransactionalComplaintOrigin) ->
user = User.get_by(email=to_address) user = User.get_by(email=to_address)
if user: if user:
LOG.d(f"Handle transactional {origin.name()} complaint for {user}") LOG.d(f"Handle provider {origin.name()} complaint for {user}")
report_complaint_to_user(user, origin) report_complaint_to_user(user, origin)
return True return True
@ -125,7 +125,7 @@ def handle_complaint(message: Message, origin: TransactionalComplaintOrigin) ->
f"Complaint from {origin.name} during reply phase {alias} -> {to_address}, {user}" f"Complaint from {origin.name} during reply phase {alias} -> {to_address}, {user}"
) )
report_complaint_to_user_in_reply_phase(alias, to_address, origin) report_complaint_to_user_in_reply_phase(alias, to_address, origin)
store_transactional_complaint(alias, message) store_provider_complaint(alias, message)
return True return True
contact = Contact.get_by(reply_email=from_address) contact = Contact.get_by(reply_email=from_address)
@ -145,7 +145,7 @@ def handle_complaint(message: Message, origin: TransactionalComplaintOrigin) ->
def report_complaint_to_user_in_reply_phase( def report_complaint_to_user_in_reply_phase(
alias: Alias, to_address: str, origin: TransactionalComplaintOrigin alias: Alias, to_address: str, origin: ProviderComplaintOrigin
): ):
capitalized_name = origin.name().capitalize() capitalized_name = origin.name().capitalize()
send_email_with_rate_control( send_email_with_rate_control(
@ -154,7 +154,7 @@ def report_complaint_to_user_in_reply_phase(
alias.user.email, alias.user.email,
f"Abuse report from {capitalized_name}", f"Abuse report from {capitalized_name}",
render( render(
"transactional/transactional-complaint-reply-phase.txt.jinja2", "transactional/provider-complaint-reply-phase.txt.jinja2",
user=alias.user, user=alias.user,
alias=alias, alias=alias,
destination=to_address, destination=to_address,
@ -165,7 +165,7 @@ def report_complaint_to_user_in_reply_phase(
) )
def report_complaint_to_user(user: User, origin: TransactionalComplaintOrigin): def report_complaint_to_user(user: User, origin: ProviderComplaintOrigin):
capitalized_name = origin.name().capitalize() capitalized_name = origin.name().capitalize()
send_email_with_rate_control( send_email_with_rate_control(
user, user,
@ -173,12 +173,12 @@ def report_complaint_to_user(user: User, origin: TransactionalComplaintOrigin):
user.email, user.email,
f"Abuse report from {capitalized_name}", f"Abuse report from {capitalized_name}",
render( render(
"transactional/transactional-complaint-to-user.txt.jinja2", "transactional/provider-complaint-to-user.txt.jinja2",
user=user, user=user,
provider=capitalized_name, provider=capitalized_name,
), ),
render( render(
"transactional/transactional-complaint-to-user.html", "transactional/provider-complaint-to-user.html",
user=user, user=user,
provider=capitalized_name, provider=capitalized_name,
), ),
@ -188,7 +188,7 @@ def report_complaint_to_user(user: User, origin: TransactionalComplaintOrigin):
def report_complaint_to_user_in_forward_phase( def report_complaint_to_user_in_forward_phase(
alias: Alias, origin: TransactionalComplaintOrigin alias: Alias, origin: ProviderComplaintOrigin
): ):
capitalized_name = origin.name().capitalize() capitalized_name = origin.name().capitalize()
user = alias.user user = alias.user
@ -198,12 +198,12 @@ def report_complaint_to_user_in_forward_phase(
user.email, user.email,
f"Abuse report from {capitalized_name}", f"Abuse report from {capitalized_name}",
render( render(
"transactional/transactional-complaint-forward-phase.txt.jinja2", "transactional/provider-complaint-forward-phase.txt.jinja2",
user=user, user=user,
provider=capitalized_name, provider=capitalized_name,
), ),
render( render(
"transactional/transactional-complaint-forward-phase.html", "transactional/provider-complaint-forward-phase.html",
user=user, user=user,
provider=capitalized_name, provider=capitalized_name,
), ),
@ -212,9 +212,9 @@ def report_complaint_to_user_in_forward_phase(
) )
def store_transactional_complaint(alias, message): def store_provider_complaint(alias, message):
email_name = f"reply-{uuid.uuid4().hex}.eml" email_name = f"reply-{uuid.uuid4().hex}.eml"
full_report_path = f"transactional_complaint/{email_name}" full_report_path = f"provider_complaint/{email_name}"
s3.upload_email_from_bytesio( s3.upload_email_from_bytesio(
full_report_path, BytesIO(to_bytes(message)), email_name full_report_path, BytesIO(to_bytes(message)), email_name
) )
@ -224,9 +224,9 @@ def store_transactional_complaint(alias, message):
path=email_name, path=email_name,
commit=True, commit=True,
) )
TransactionalComplaint.create( ProviderComplaint.create(
user_id=alias.user_id, user_id=alias.user_id,
state=TransactionalComplaintState.new.value, state=ProviderComplaintState.new.value,
phase=Phase.reply.value, phase=Phase.reply.value,
refused_email_id=refused_email.id, refused_email_id=refused_email.id,
commit=True, commit=True,

View File

@ -235,7 +235,7 @@ class AuditLogActionEnum(EnumE):
disable_2fa = 5 disable_2fa = 5
logged_as_user = 6 logged_as_user = 6
extend_subscription = 7 extend_subscription = 7
download_transactional_complaint = 8 download_provider_complaint = 8
class Phase(EnumE): class Phase(EnumE):
@ -2997,23 +2997,23 @@ class AdminAuditLog(Base):
) )
@classmethod @classmethod
def downloaded_transactional_complaint(cls, admin_user_id: int, complaint_id: int): def downloaded_provider_complaint(cls, admin_user_id: int, complaint_id: int):
cls.create( cls.create(
admin_user_id=admin_user_id, admin_user_id=admin_user_id,
action=AuditLogActionEnum.download_transactional_complaint.value, action=AuditLogActionEnum.download_provider_complaint.value,
model="TransactionalComplaint", model="ProviderComplaint",
model_id=complaint_id, model_id=complaint_id,
data={}, data={},
) )
class TransactionalComplaintState(EnumE): class ProviderComplaintState(EnumE):
new = 0 new = 0
reviewed = 1 reviewed = 1
class TransactionalComplaint(Base, ModelMixin): class ProviderComplaint(Base, ModelMixin):
__tablename__ = "transactional_complaint" __tablename__ = "provider_complaint"
user_id = sa.Column(sa.ForeignKey("users.id"), nullable=False) user_id = sa.Column(sa.ForeignKey("users.id"), nullable=False)
state = sa.Column(sa.Integer, nullable=False) state = sa.Column(sa.Integer, nullable=False)

View File

@ -140,7 +140,7 @@ from app.handler.spamd_result import (
SpamdResult, SpamdResult,
SPFCheckResult, SPFCheckResult,
) )
from app.handler.transactional_complaint import ( from app.handler.provider_complaint import (
handle_hotmail_complaint, handle_hotmail_complaint,
handle_yahoo_complaint, handle_yahoo_complaint,
) )

View File

@ -18,7 +18,7 @@ depends_on = None
def upgrade(): def upgrade():
op.create_table( op.create_table(
"transactional_complaint", "provider_complaint",
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False), sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
sa.Column("created_at", sqlalchemy_utils.types.arrow.ArrowType(), nullable=False), sa.Column("created_at", sqlalchemy_utils.types.arrow.ArrowType(), nullable=False),
sa.Column("updated_at", sqlalchemy_utils.types.arrow.ArrowType(), nullable=True), sa.Column("updated_at", sqlalchemy_utils.types.arrow.ArrowType(), nullable=True),
@ -33,4 +33,4 @@ def upgrade():
def downgrade(): def downgrade():
op.drop_table("transactional_complaint") op.drop_table("provider_complaint")

View File

@ -37,7 +37,7 @@ from app.admin_model import (
CouponAdmin, CouponAdmin,
CustomDomainAdmin, CustomDomainAdmin,
AdminAuditLogAdmin, AdminAuditLogAdmin,
TransactionalComplaintAdmin, ProviderComplaintAdmin,
) )
from app.api.base import api_bp from app.api.base import api_bp
from app.auth.base import auth_bp from app.auth.base import auth_bp
@ -91,7 +91,7 @@ from app.models import (
ManualSubscription, ManualSubscription,
Coupon, Coupon,
AdminAuditLog, AdminAuditLog,
TransactionalComplaint, ProviderComplaint,
) )
from app.monitor.base import monitor_bp from app.monitor.base import monitor_bp
from app.oauth.base import oauth_bp from app.oauth.base import oauth_bp
@ -693,7 +693,7 @@ def init_admin(app):
admin.add_view(ManualSubscriptionAdmin(ManualSubscription, Session)) admin.add_view(ManualSubscriptionAdmin(ManualSubscription, Session))
admin.add_view(CustomDomainAdmin(CustomDomain, Session)) admin.add_view(CustomDomainAdmin(CustomDomain, Session))
admin.add_view(AdminAuditLogAdmin(AdminAuditLog, Session)) admin.add_view(AdminAuditLogAdmin(AdminAuditLog, Session))
admin.add_view(TransactionalComplaintAdmin(TransactionalComplaint, Session)) admin.add_view(ProviderComplaintAdmin(ProviderComplaint, Session))
def register_custom_commands(app): def register_custom_commands(app):

View File

@ -12,11 +12,11 @@ from app.config import (
) )
from app.db import Session from app.db import Session
from app.email import headers from app.email import headers
from app.handler.transactional_complaint import ( from app.handler.provider_complaint import (
handle_hotmail_complaint, handle_hotmail_complaint,
handle_yahoo_complaint, handle_yahoo_complaint,
) )
from app.models import Alias, TransactionalComplaint, SentAlert from app.models import Alias, ProviderComplaint, SentAlert
from tests.utils import create_new_user from tests.utils import create_new_user
origins = [ origins = [
@ -38,7 +38,7 @@ def prepare_complaint(message: Message, part_num: int) -> Message:
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins) @pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
def test_transactional_to_user(flask_client, handle_ftor, provider, part_num): def test_provider_to_user(flask_client, handle_ftor, provider, part_num):
user = create_new_user() user = create_new_user()
original_message = Message() original_message = Message()
original_message[headers.TO] = user.email original_message[headers.TO] = user.email
@ -47,7 +47,7 @@ def test_transactional_to_user(flask_client, handle_ftor, provider, part_num):
complaint = prepare_complaint(original_message, part_num) complaint = prepare_complaint(original_message, part_num)
assert handle_ftor(complaint) assert handle_ftor(complaint)
found = TransactionalComplaint.filter_by(user_id=user.id).all() found = ProviderComplaint.filter_by(user_id=user.id).all()
assert len(found) == 0 assert len(found) == 0
alerts = SentAlert.filter_by(user_id=user.id).all() alerts = SentAlert.filter_by(user_id=user.id).all()
assert len(alerts) == 1 assert len(alerts) == 1
@ -55,7 +55,7 @@ def test_transactional_to_user(flask_client, handle_ftor, provider, part_num):
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins) @pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
def test_transactional_forward_phase(flask_client, handle_ftor, provider, part_num): def test_provider_forward_phase(flask_client, handle_ftor, provider, part_num):
user = create_new_user() user = create_new_user()
alias = Alias.create_new_random(user) alias = Alias.create_new_random(user)
Session.commit() Session.commit()
@ -66,7 +66,7 @@ def test_transactional_forward_phase(flask_client, handle_ftor, provider, part_n
complaint = prepare_complaint(original_message, part_num) complaint = prepare_complaint(original_message, part_num)
assert handle_ftor(complaint) assert handle_ftor(complaint)
found = TransactionalComplaint.filter_by(user_id=user.id).all() found = ProviderComplaint.filter_by(user_id=user.id).all()
assert len(found) == 1 assert len(found) == 1
alerts = SentAlert.filter_by(user_id=user.id).all() alerts = SentAlert.filter_by(user_id=user.id).all()
assert len(alerts) == 1 assert len(alerts) == 1
@ -74,7 +74,7 @@ def test_transactional_forward_phase(flask_client, handle_ftor, provider, part_n
@pytest.mark.parametrize("handle_ftor,provider,part_num", origins) @pytest.mark.parametrize("handle_ftor,provider,part_num", origins)
def test_transactional_reply_phase(flask_client, handle_ftor, provider, part_num): def test_provider_reply_phase(flask_client, handle_ftor, provider, part_num):
user = create_new_user() user = create_new_user()
alias = Alias.create_new_random(user) alias = Alias.create_new_random(user)
Session.commit() Session.commit()
@ -85,7 +85,7 @@ def test_transactional_reply_phase(flask_client, handle_ftor, provider, part_num
complaint = prepare_complaint(original_message, part_num) complaint = prepare_complaint(original_message, part_num)
assert handle_ftor(complaint) assert handle_ftor(complaint)
found = TransactionalComplaint.filter_by(user_id=user.id).all() found = ProviderComplaint.filter_by(user_id=user.id).all()
assert len(found) == 0 assert len(found) == 0
alerts = SentAlert.filter_by(user_id=user.id).all() alerts = SentAlert.filter_by(user_id=user.id).all()
assert len(alerts) == 1 assert len(alerts) == 1