Dre4m Shell
Server IP : 85.214.239.14  /  Your IP : 18.219.199.112
Web Server : Apache/2.4.61 (Debian)
System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.18
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /srv/modoboa/env/lib64/python3.5/site-packages/modoboa/lib/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /srv/modoboa/env/lib64/python3.5/site-packages/modoboa/lib/u2u_decode.py
"""
Unstructured rfc2047 header to unicode.

A stupid (and not accurate) answer to https://bugs.python.org/issue1079.

"""

import re
from email.header import decode_header, make_header
from email.utils import parseaddr

from django.utils.encoding import smart_text

# check spaces between encoded_words (and strip them)
sre = re.compile(r"\?=[ \t]+=\?")
# re pat for MIME encoded_word (without trailing spaces)
mre = re.compile(r"=\?[^?]*?\?[bq]\?[^?\t]*?\?=", re.I)
# re do detect encoded ASCII characters
ascii_re = re.compile(r"=[\dA-F]{2,3}", re.I)


def clean_spaces(m):
    """Replace unencoded spaces in string.

    :param str m: a match object
    :return: the cleaned string
    """
    return m.group(0).replace(" ", "=20")


def clean_non_printable_char(m):
    """Strip non printable characters."""
    code = int(m.group(0)[1:], 16)
    if code < 20:
        return ""
    return m.group(0)


def decode_mime(m):
    """Substitute matching encoded_word with unicode equiv."""
    h = decode_header(clean_spaces(m))
    try:
        u = smart_text(make_header(h))
    except (LookupError, UnicodeDecodeError):
        return m.group(0)
    return u


def clean_header(header):
    """Clean header function."""
    header = "".join(header.splitlines())
    header = sre.sub("?==?", header)
    return ascii_re.sub(clean_non_printable_char, header)


def u2u_decode(s):
    """utility function for (final) decoding of mime header

    note: resulting string is in one line (no \n within)
    note2: spaces between enc_words are stripped (see RFC2047)
    """
    return mre.sub(decode_mime, clean_header(s)).strip(" \r\t\n")


def decode_address(value):
    """Special function for address decoding.

    We need a dedicated processing because RFC1342 explicitely says
    address MUST NOT contain encoded-word:

      These are the ONLY locations where an encoded-word may appear.  In
      particular, an encoded-word MUST NOT appear in any portion of an
      "address".  In addition, an encoded-word MUST NOT be used in a
      Received header field.
    """
    phrase, address = parseaddr(clean_header(value))
    if phrase:
        phrase = mre.sub(decode_mime, phrase)
    return phrase, address

Anon7 - 2022
AnonSec Team