From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=ALL_TRUSTED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,NO_DNS_FOR_FROM,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 Received: from localhost.localdomain (unknown [101.128.125.123]) by gnuweeb.org (Postfix) with ESMTPSA id BEA43811E6; Thu, 20 Oct 2022 08:39:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gnuweeb.org; s=default; t=1666255155; bh=NDrDih8XJlLxbLpvib2tFDYi9OgeI9URUFrTEebsMQg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z3OcNDTNctNPh893DXeMSTGR7G9P5/O1EFJwJ+RLztc/MYifa366yGp2EA0NsVEnS 4/RQET4k+7v26c025GpyLbTzkTMVWBW55Fv3HgmmeC9NaNG5P4Io+EqKNrJIURCGbZ uB/kVixvfmdtV1LWfXyWn7ISENxes6rlGn9mjkszqjjA5PDI2IWf2Gk+antvcxqaqm hfPsiSciKqe+9PstFsTDSFzxlqyqGI7SoCUMo19A++4O9/57uSQw7umjB9e4/G3Xuo o+tRHdEw72wMC7S+jFdy15ZGmgGyErNpTrkOkNdRtZhDKXV7hJla8nXW5uhpbrNG+y VGGFW2bouwzpw== From: Muhammad Rizki To: Ammar Faizi Cc: Muhammad Rizki , Alviro Iskandar Setiawan , GNU/Weeb Mailing List Subject: [PATCH v2 6/8] atom: add manage_payload() Date: Thu, 20 Oct 2022 15:38:43 +0700 Message-Id: <20221020083845.907-7-kiizuha@gnuweeb.org> X-Mailer: git-send-email 2.34.1.windows.1 In-Reply-To: <20221020083845.907-1-kiizuha@gnuweeb.org> References: <20221020083845.907-1-kiizuha@gnuweeb.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Add manage_payload() to handle the email decoding to utf-8. This include a non-UTF8 character and base64 decoding. Signed-off-by: Muhammad Rizki --- daemon/atom/utils.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/daemon/atom/utils.py b/daemon/atom/utils.py index 866c531..e8b9d80 100644 --- a/daemon/atom/utils.py +++ b/daemon/atom/utils.py @@ -8,6 +8,7 @@ from pyrogram.types import Chat, InlineKeyboardMarkup, InlineKeyboardButton from email.message import Message from typing import Dict, Union from slugify import slugify +from base64 import b64decode import hashlib import uuid import os @@ -136,7 +137,7 @@ def gen_temp(name: str, platform: str): def extract_body(thread: Message, platform: str): if not thread.is_multipart(): - p = thread.get_payload(decode=True).decode(errors='replace') + p = manage_payload(thread) if platform == "discord": p = quote_reply(p) @@ -253,6 +254,14 @@ def fix_utf8_char(text: str, unescape: bool = True): return t +def manage_payload(payload: Message): + p = str(payload.get_payload()) + tf_encode = payload.get("Content-Transfer-Encoding") + if tf_encode != "base64": + return p.encode().decode("utf-8", errors="replace") + return b64decode(p).decode("utf-8") + + EMAIL_MSG_ID_PATTERN = r"<([^\<\>]+)>" def extract_email_msg_id(msg_id): ret = re.search(EMAIL_MSG_ID_PATTERN, msg_id) -- Muhammad Rizki