mirror of
https://github.com/simple-login/app.git
synced 2024-09-20 15:05:59 +08:00
Rename TransactionalComplaint to ProviderComplaint
This commit is contained in:
parent
fcd2ab6fed
commit
5208c549fa
|
@ -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,
|
||||
|
|
|
@ -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,
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
)
|
||||
|
|
|
@ -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")
|
|
@ -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):
|
||||
|
|
|
@ -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
|
Loading…
Reference in a new issue