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,
AdminAuditLog,
AuditLogActionEnum,
TransactionalComplaintState,
ProviderComplaintState,
Phase,
TransactionalComplaint,
ProviderComplaint,
)
@ -376,7 +376,7 @@ class AdminAuditLogAdmin(SLModelView):
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):
@ -390,7 +390,7 @@ def _transactionalcomplaint_refused_email_id_formatter(view, context, model, nam
return Markup(markupstring)
class TransactionalComplaintAdmin(SLModelView):
class ProviderComplaintAdmin(SLModelView):
column_searchable_list = ["id", "user.id", "created_at"]
column_filters = ["user.id", "state"]
column_hide_backrefs = False
@ -410,12 +410,12 @@ class TransactionalComplaintAdmin(SLModelView):
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")
if complain_id is None:
flash("Missing id", "error")
return None
complaint = TransactionalComplaint.get_by(id=complain_id)
complaint = ProviderComplaint.get_by(id=complain_id)
if not complaint:
flash("Could not find complaint", "error")
return None
@ -426,7 +426,7 @@ class TransactionalComplaintAdmin(SLModelView):
complaint = self._get_complaint()
if not complaint:
return redirect("/admin/transactionalcomplaint/")
complaint.state = TransactionalComplaintState.reviewed.value
complaint.state = ProviderComplaintState.reviewed.value
Session.commit()
return redirect("/admin/transactionalcomplaint/")
@ -437,7 +437,7 @@ class TransactionalComplaintAdmin(SLModelView):
return redirect("/admin/transactionalcomplaint/")
eml_path = complaint.refused_email.full_report_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()
return Response(
eml_data,

View File

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

View File

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

View File

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

View File

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

View File

@ -37,7 +37,7 @@ from app.admin_model import (
CouponAdmin,
CustomDomainAdmin,
AdminAuditLogAdmin,
TransactionalComplaintAdmin,
ProviderComplaintAdmin,
)
from app.api.base import api_bp
from app.auth.base import auth_bp
@ -91,7 +91,7 @@ from app.models import (
ManualSubscription,
Coupon,
AdminAuditLog,
TransactionalComplaint,
ProviderComplaint,
)
from app.monitor.base import monitor_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(CustomDomainAdmin(CustomDomain, Session))
admin.add_view(AdminAuditLogAdmin(AdminAuditLog, Session))
admin.add_view(TransactionalComplaintAdmin(TransactionalComplaint, Session))
admin.add_view(ProviderComplaintAdmin(ProviderComplaint, Session))
def register_custom_commands(app):

View File

@ -12,11 +12,11 @@ from app.config import (
)
from app.db import Session
from app.email import headers
from app.handler.transactional_complaint import (
from app.handler.provider_complaint import (
handle_hotmail_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
origins = [
@ -38,7 +38,7 @@ def prepare_complaint(message: Message, part_num: int) -> Message:
@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()
original_message = Message()
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)
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
alerts = SentAlert.filter_by(user_id=user.id).all()
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)
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()
alias = Alias.create_new_random(user)
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)
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
alerts = SentAlert.filter_by(user_id=user.id).all()
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)
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()
alias = Alias.create_new_random(user)
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)
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
alerts = SentAlert.filter_by(user_id=user.id).all()
assert len(alerts) == 1