security: harden Campaign delivery effects and reconciliation
This commit is contained in:
@@ -34,9 +34,16 @@ class ImapConfigurationError(RuntimeError):
|
||||
|
||||
|
||||
class ImapAppendError(RuntimeError):
|
||||
def __init__(self, message: str, *, temporary: bool | None = None) -> None:
|
||||
def __init__(
|
||||
self,
|
||||
message: str,
|
||||
*,
|
||||
temporary: bool | None = None,
|
||||
outcome_unknown: bool = False,
|
||||
) -> None:
|
||||
super().__init__(message)
|
||||
self.temporary = temporary
|
||||
self.outcome_unknown = outcome_unknown
|
||||
|
||||
|
||||
class MailProfileError(OptionalModuleUnavailable):
|
||||
@@ -139,17 +146,6 @@ class MailCampaignIntegration:
|
||||
raise MailProfileError("Mail module is not available")
|
||||
return self._delegate
|
||||
|
||||
def materialize_campaign_mail_profile_config(self, session: Any, **kwargs: Any) -> dict[str, Any]:
|
||||
if self._delegate is None:
|
||||
raw_json = kwargs.get("raw_json")
|
||||
if self.mail_profile_id_from_campaign_json(raw_json if isinstance(raw_json, dict) else {}):
|
||||
raise MailProfileError("Campaign mail-server profiles require the mail module")
|
||||
return dict(raw_json) if isinstance(raw_json, dict) else {}
|
||||
try:
|
||||
return self._delegate.materialize_campaign_mail_profile_config(session, **kwargs)
|
||||
except getattr(self._delegate, "MailProfileError", MailProfileError) as exc:
|
||||
raise MailProfileError(str(exc)) from exc
|
||||
|
||||
def assert_campaign_mail_policy_allows_json(self, session: Any, **kwargs: Any) -> None:
|
||||
if self._delegate is None:
|
||||
raw_json = kwargs.get("raw_json")
|
||||
@@ -162,72 +158,50 @@ class MailCampaignIntegration:
|
||||
except getattr(self._delegate, "MailProfileError", MailProfileError) as exc:
|
||||
raise MailProfileError(str(exc)) from exc
|
||||
|
||||
def assert_mail_policy_allows_send(self, session: Any, **kwargs: Any) -> None:
|
||||
delegate = self._require()
|
||||
try:
|
||||
return delegate.assert_mail_policy_allows_send(session, **kwargs)
|
||||
except getattr(delegate, "MailProfileError", MailProfileError) as exc:
|
||||
raise MailProfileError(str(exc)) from exc
|
||||
|
||||
def mail_profile_id_from_campaign_json(self, raw_json: dict[str, Any]) -> str | None:
|
||||
if self._delegate is not None:
|
||||
return self._delegate.mail_profile_id_from_campaign_json(raw_json)
|
||||
server = raw_json.get("server") if isinstance(raw_json, dict) else None
|
||||
profile_id = server.get("mail_profile_id") if isinstance(server, dict) else None
|
||||
if profile_id is None and isinstance(server, dict):
|
||||
profile_id = server.get("profile_id")
|
||||
return str(profile_id).strip() if profile_id else None
|
||||
|
||||
def ensure_mail_profile_allowed_for_campaign(self, session: Any, **kwargs: Any) -> Any:
|
||||
def campaign_profile_delivery_summary(self, session: Any, **kwargs: Any) -> dict[str, Any]:
|
||||
delegate = self._require()
|
||||
try:
|
||||
return delegate.ensure_mail_profile_allowed_for_campaign(session, **kwargs)
|
||||
return delegate.campaign_profile_delivery_summary(session, **kwargs)
|
||||
except getattr(delegate, "MailProfileError", MailProfileError) as exc:
|
||||
raise MailProfileError(str(exc)) from exc
|
||||
|
||||
def smtp_config_from_profile(self, profile: Any) -> Any:
|
||||
return self._require().smtp_config_from_profile(profile)
|
||||
|
||||
def imap_config_from_profile(self, profile: Any) -> Any:
|
||||
return self._require().imap_config_from_profile(profile)
|
||||
|
||||
def effective_profile_credentials_inherited(self, session: Any, **kwargs: Any) -> bool:
|
||||
return self._require().effective_profile_credentials_inherited(session, **kwargs)
|
||||
|
||||
def apply_campaign_credentials(self, profile_payload: dict[str, Any], server: dict[str, Any], protocol: str) -> dict[str, Any]:
|
||||
return self._require().apply_campaign_credentials(profile_payload, server, protocol)
|
||||
|
||||
def wait_for_rate_limit(self, **kwargs: Any) -> None:
|
||||
if self._delegate is None:
|
||||
return None
|
||||
return self._delegate.wait_for_rate_limit(**kwargs)
|
||||
|
||||
def send_email_bytes(self, *args: Any, **kwargs: Any) -> Any:
|
||||
def send_campaign_email_bytes(self, *args: Any, **kwargs: Any) -> Any:
|
||||
delegate = self._require()
|
||||
try:
|
||||
return delegate.send_email_bytes(*args, **kwargs)
|
||||
return delegate.send_campaign_email_bytes(*args, **kwargs)
|
||||
except getattr(delegate, "SmtpSendError", SmtpSendError) as exc:
|
||||
raise SmtpSendError(str(exc), temporary=bool(getattr(exc, "temporary", False)), outcome_unknown=bool(getattr(exc, "outcome_unknown", False))) from exc
|
||||
except getattr(delegate, "SmtpConfigurationError", SmtpConfigurationError) as exc:
|
||||
raise SmtpConfigurationError(str(exc)) from exc
|
||||
except getattr(delegate, "MailProfileError", MailProfileError) as exc:
|
||||
raise MailProfileError(str(exc)) from exc
|
||||
|
||||
def append_message_to_sent(self, *args: Any, **kwargs: Any) -> Any:
|
||||
def append_campaign_message_to_sent(self, *args: Any, **kwargs: Any) -> Any:
|
||||
delegate = self._require()
|
||||
try:
|
||||
return delegate.append_message_to_sent(*args, **kwargs)
|
||||
return delegate.append_campaign_message_to_sent(*args, **kwargs)
|
||||
except getattr(delegate, "ImapAppendError", ImapAppendError) as exc:
|
||||
raise ImapAppendError(str(exc), temporary=getattr(exc, "temporary", None)) from exc
|
||||
raise ImapAppendError(
|
||||
str(exc),
|
||||
temporary=getattr(exc, "temporary", None),
|
||||
outcome_unknown=bool(getattr(exc, "outcome_unknown", False)),
|
||||
) from exc
|
||||
except getattr(delegate, "ImapConfigurationError", ImapConfigurationError) as exc:
|
||||
raise ImapConfigurationError(str(exc)) from exc
|
||||
|
||||
def send_email_message(self, *args: Any, **kwargs: Any) -> Any:
|
||||
delegate = self._require()
|
||||
try:
|
||||
return delegate.send_email_message(*args, **kwargs)
|
||||
except getattr(delegate, "SmtpSendError", SmtpSendError) as exc:
|
||||
raise SmtpSendError(str(exc), temporary=bool(getattr(exc, "temporary", False)), outcome_unknown=bool(getattr(exc, "outcome_unknown", False))) from exc
|
||||
except getattr(delegate, "SmtpConfigurationError", SmtpConfigurationError) as exc:
|
||||
raise SmtpConfigurationError(str(exc)) from exc
|
||||
except getattr(delegate, "MailProfileError", MailProfileError) as exc:
|
||||
raise MailProfileError(str(exc)) from exc
|
||||
|
||||
def mock_mailbox(self) -> Any | None:
|
||||
if self._delegate is None or not hasattr(self._delegate, "mock_mailbox"):
|
||||
|
||||
Reference in New Issue
Block a user