mirror of
https://github.com/simple-login/app.git
synced 2024-09-29 21:21:29 +02:00
refactor: create EmailEncoding enum
This commit is contained in:
parent
93563178a7
commit
f804332c2d
@ -1,5 +1,6 @@
|
|||||||
import base64
|
import base64
|
||||||
import email
|
import email
|
||||||
|
import enum
|
||||||
import os
|
import os
|
||||||
import quopri
|
import quopri
|
||||||
import random
|
import random
|
||||||
@ -673,7 +674,13 @@ def is_valid_email(email_address: str) -> bool:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def get_encoding(msg: Message) -> str:
|
class EmailEncoding(enum.Enum):
|
||||||
|
BASE64 = "base64"
|
||||||
|
QUOTED = "quoted-printable"
|
||||||
|
NO = "no-encoding"
|
||||||
|
|
||||||
|
|
||||||
|
def get_encoding(msg: Message) -> EmailEncoding:
|
||||||
"""
|
"""
|
||||||
Return the message encoding, possible values:
|
Return the message encoding, possible values:
|
||||||
- quoted-printable
|
- quoted-printable
|
||||||
@ -682,21 +689,24 @@ def get_encoding(msg: Message) -> str:
|
|||||||
"""
|
"""
|
||||||
cte = str(msg.get("content-transfer-encoding", "")).lower()
|
cte = str(msg.get("content-transfer-encoding", "")).lower()
|
||||||
if cte in ("", "7bit"):
|
if cte in ("", "7bit"):
|
||||||
return "7bit"
|
return EmailEncoding.NO
|
||||||
|
|
||||||
if cte in ("quoted-printable", "base64"):
|
if cte == "base64":
|
||||||
return cte
|
return EmailEncoding.BASE64
|
||||||
|
|
||||||
|
if cte == "quoted-printable":
|
||||||
|
return EmailEncoding.QUOTED
|
||||||
|
|
||||||
LOG.exception("Unknown encoding %s", cte)
|
LOG.exception("Unknown encoding %s", cte)
|
||||||
|
|
||||||
return "7bit"
|
return EmailEncoding.NO
|
||||||
|
|
||||||
|
|
||||||
def encode_text(text: str, encoding: str = "7bit") -> str:
|
def encode_text(text: str, encoding: EmailEncoding = EmailEncoding.NO) -> str:
|
||||||
if encoding == "quoted-printable":
|
if encoding == EmailEncoding.QUOTED:
|
||||||
encoded = quopri.encodestring(text.encode("utf-8"))
|
encoded = quopri.encodestring(text.encode("utf-8"))
|
||||||
return str(encoded, "utf-8")
|
return str(encoded, "utf-8")
|
||||||
elif encoding == "base64":
|
elif encoding == EmailEncoding.BASE64:
|
||||||
encoded = base64.b64encode(text.encode("utf-8"))
|
encoded = base64.b64encode(text.encode("utf-8"))
|
||||||
return str(encoded, "utf-8")
|
return str(encoded, "utf-8")
|
||||||
else: # 7bit - no encoding
|
else: # 7bit - no encoding
|
||||||
|
@ -20,6 +20,7 @@ from app.email_utils import (
|
|||||||
normalize_reply_email,
|
normalize_reply_email,
|
||||||
get_encoding,
|
get_encoding,
|
||||||
encode_text,
|
encode_text,
|
||||||
|
EmailEncoding,
|
||||||
)
|
)
|
||||||
from app.extensions import db
|
from app.extensions import db
|
||||||
from app.models import User, CustomDomain
|
from app.models import User, CustomDomain
|
||||||
@ -422,24 +423,24 @@ def test_normalize_reply_email(flask_client):
|
|||||||
|
|
||||||
def test_get_encoding():
|
def test_get_encoding():
|
||||||
msg = email.message_from_string("")
|
msg = email.message_from_string("")
|
||||||
assert get_encoding(msg) == "7bit"
|
assert get_encoding(msg) == EmailEncoding.NO
|
||||||
|
|
||||||
msg = email.message_from_string("Content-TRANSFER-encoding: Invalid")
|
msg = email.message_from_string("Content-TRANSFER-encoding: Invalid")
|
||||||
assert get_encoding(msg) == "7bit"
|
assert get_encoding(msg) == EmailEncoding.NO
|
||||||
|
|
||||||
msg = email.message_from_string("Content-TRANSFER-encoding: quoted-printable")
|
msg = email.message_from_string("Content-TRANSFER-encoding: quoted-printable")
|
||||||
assert get_encoding(msg) == "quoted-printable"
|
assert get_encoding(msg) == EmailEncoding.QUOTED
|
||||||
|
|
||||||
msg = email.message_from_string("Content-TRANSFER-encoding: base64")
|
msg = email.message_from_string("Content-TRANSFER-encoding: base64")
|
||||||
assert get_encoding(msg) == "base64"
|
assert get_encoding(msg) == EmailEncoding.BASE64
|
||||||
|
|
||||||
|
|
||||||
def test_encode_text():
|
def test_encode_text():
|
||||||
assert encode_text("") == ""
|
assert encode_text("") == ""
|
||||||
assert encode_text("ascii") == "ascii"
|
assert encode_text("ascii") == "ascii"
|
||||||
assert encode_text("ascii", "base64") == "YXNjaWk="
|
assert encode_text("ascii", EmailEncoding.BASE64) == "YXNjaWk="
|
||||||
assert encode_text("ascii", "quoted-printable") == "ascii"
|
assert encode_text("ascii", EmailEncoding.QUOTED) == "ascii"
|
||||||
|
|
||||||
assert encode_text("mèo méo") == "mèo méo"
|
assert encode_text("mèo méo") == "mèo méo"
|
||||||
assert encode_text("mèo méo", "base64") == "bcOobyBtw6lv"
|
assert encode_text("mèo méo", EmailEncoding.BASE64) == "bcOobyBtw6lv"
|
||||||
assert encode_text("mèo méo", "quoted-printable") == "m=C3=A8o m=C3=A9o"
|
assert encode_text("mèo méo", EmailEncoding.QUOTED) == "m=C3=A8o m=C3=A9o"
|
||||||
|
Loading…
Reference in New Issue
Block a user