HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/local/CyberCP/plogical/__pycache__/mailUtilities.cpython-310.pyc
o

��h��@sHddlZddlZddlZddlZddlmZej�d�ddlZej	�
dd�ze��WnYddlZddl
Z
ddlmZddlZddlZddlZddlmZddlZddlZddlZddlZddlZzddlmZmZdd	lmZm Z dd
l!m"Z"m#Z#WnYGdd�d�Z$Gd
d�dej%�Z&dd�Z'e(dkr�e'�dSdS)�N)�HttpResponse�/usr/local/CyberCP�DJANGO_SETTINGS_MODULE�CyberCP.settings)�CyberCPLogFileWriter)�ProcessUtilities)�Domains�EUsers)�DomainLimits�EmailLimits)�Websites�ChildDomainsc@s�eZdZdZdZdZdZdZdZdZ	e
dd	��Ze
d
d��Ze
dd
��Z
e
dIdd��Ze
dd��Ze
dd��Ze
dIdd��Ze
dd��Ze
dd��Ze
dd��Ze
dd��Ze
dd ��Ze
d!d"��Ze
d#d$��Ze
d%d&��Ze
d'd(��Ze
d)d*��Ze
d+d,��Ze
d-d.��Ze
d/d0��Ze
d1d2��Ze
d3d4��Z e
d5d6��Z!e
d7d8��Z"e
d9d:��Z#e
d;d<��Z$e
d=d>��Z%e
d?d@��Z&e
dAdB��Z'e
dCdD��Z(e
dEdF��Z)e
dGdH��Z*dS)J�
mailUtilitiesz#/home/cyberpanel/openDKIMInstallLogz+/home/cyberpanel/spamassassinInstallLogPathz%/home/cyberpanel/RspamdInstallLogPathz'/home/cyberpanel/RspamdUnInstallLogPathz/home/cyberpanelz*/home/cyberpanel/mailScannerInstallLogPathz/var/log/rspamd/rspamd.logc
Cs^zt�d�}|�|||�td�WdSty.}ztj�t|��WYd}~dSd}~ww)N�	localhostzSuccessfully sent email)	�smtplib�SMTP�sendmail�print�
BaseException�loggingr�writeToFile�str)�sender�	receivers�message�smtpObj�msg�r�,/usr/local/CyberCP/plogical/mailUtilities.py�	SendEmail.s
��zmailUtilities.SendEmailcCs�d}tj�d�s
t�d�d|d}d|d}tj�|�s%t�||�d|}t|d�}|�|�|��d}t	�
|�dS)Nz6/usr/local/CyberCP/install/rainloop/cyberpanel.net.inizB/usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/domains/z.iniz.jsonad
{
    "name": "%s",
    "IMAP": {
        "host": "localhost",
        "port": 993,
        "type": 1,
        "timeout": 300,
        "shortLogin": false,
        "sasl": [
            "SCRAM-SHA3-512",
            "SCRAM-SHA-512",
            "SCRAM-SHA-256",
            "SCRAM-SHA-1",
            "PLAIN",
            "LOGIN"
        ],
        "ssl": {
            "verify_peer": false,
            "verify_peer_name": false,
            "allow_self_signed": false,
            "SNI_enabled": true,
            "disable_compression": true,
            "security_level": 1
        },
        "use_expunge_all_on_delete": false,
        "fast_simple_search": true,
        "force_select": false,
        "message_all_headers": false,
        "message_list_limit": 10000,
        "search_filter": "",
        "disabled_capabilities": []
    },
    "SMTP": {
        "host": "localhost",
        "port": 587,
        "type": 2,
        "timeout": 60,
        "shortLogin": false,
        "sasl": [
            "SCRAM-SHA3-512",
            "SCRAM-SHA-512",
            "SCRAM-SHA-256",
            "SCRAM-SHA-1",
            "PLAIN",
            "LOGIN"
        ],
        "ssl": {
            "verify_peer": false,
            "verify_peer_name": false,
            "allow_self_signed": false,
            "SNI_enabled": true,
            "disable_compression": true,
            "security_level": 1
        },
        "useAuth": true,
        "setSender": false,
        "usePhpMail": false,
        "authPlainLine": false
    },
    "Sieve": {
        "host": "",
        "port": 4190,
        "type": 0,
        "timeout": 10,
        "shortLogin": false,
        "sasl": [
            "SCRAM-SHA3-512",
            "SCRAM-SHA-512",
            "SCRAM-SHA-256",
            "SCRAM-SHA-1",
            "PLAIN",
            "LOGIN"
        ],
        "ssl": {
            "verify_peer": false,
            "verify_peer_name": false,
            "allow_self_signed": false,
            "SNI_enabled": true,
            "disable_compression": true,
            "security_level": 1
        },
        "enabled": false
    },
    "whiteList": ""
}
�wz>chown -R lscpd:lscpd /usr/local/lscp/cyberpanel/rainloop/data/)�os�path�exists�makedirs�shutil�copy�open�write�closer�normalExecutioner)�domainr"�	finalPath�
finalPathJson�contentJSON�WriteToFile�commandrrr�AfterEffects6s
V�
X
zmailUtilities.AfterEffectscCs\d}d}t�|�d}t�|�d}t�|�d}t�|�d}t�|�d}t�|�t|d���}d	}t|d
�}|D]G}|�d�dkrMd
}|�|�q<|r\|�d�dkr\|�d�q<|rk|�d�dkrk|�d�q<|d
kr~|�d�dkr~d	}|�|�q<|�|�q<|��d}t|d
�}|�d�|��d|��}t�|�d|��}t�|�dS)NzQ/usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/configs/application.inizVmkdir /usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/plugins/mailbox-detectzZchmod 700 /usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/plugins/mailbox-detectzbchown lscpd:lscpd /usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/plugins/mailbox-detectz�wget -O /usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/plugins/mailbox-detect/index.php https://raw.githubusercontent.com/the-djmaze/snappymail/master/plugins/mailbox-detect/index.phpzdchmod 644 /usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/plugins/mailbox-detect/index.phpzlchown lscpd:lscpd /usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/plugins/mailbox-detect/index.php�rrr z	[plugins]����z	enable = zenable = On
zenabled_list = z enabled_list = "mailbox-detect"
z
[defaults]z\/usr/local/lscp/cyberpanel/rainloop/data/_data_/_default_/configs/plugin-mailbox-detect.jsonzD{
    "plugin": {
        "autocreate_system_folders": true
    }
}
zchown lscpd:lscpd z
chmod 600 )r�executionerr'�	readlines�findr(r))�labsPathr0�
labsDataLines�PluginsActivatorr/�lines�PluginsFilePathrrr�InstallMailBoxFoldersPlugin�sJ











z)mailUtilities.InstallMailBoxFoldersPluginNc
Cs�z�|d|}tjj|d���rtd��d}z	tjj|d�}Wn
tjj|d�}d}Yzdtjj|d���sM|dkrCt||d�}nt||d�}|�	�t
jj|d���s_t
|d�}|�	�|dkry|jjdkst|j
����|jjkruntd	��|jjjdks�|j
����|jjjkr�ntd	��Wn=tjj|d�}	|dkr�|jjdks�|	j
����|jjkr�ntd	��|jjjdks�|	j
����|jjjkr�ntd	��Yd
}
|
d|}
t��dkr�t�|
�nt�|
d
�tjj|d�}	d}tj�|��r#|dk�rt�|�d�t���}d|��}t|	||d�}d||f|_|�	�n(|dk�r9t�|�d�t���}d|��}t|	||d�}d||f|_|�	�t|d�}
|
�	�d|�d|��}|�d�}tj�|��s�d|�d|�d|�d�}t�|d�d|�d�}t�|d�d|�d�}t�|d�gd�}|D]#}|�d|��}tj�|��s�d|�d|�d|�d�}t�|d��q�d|�d�}t�|d�d|�d�}t�|d�td�Wd St�y}zt j!�"t#|�d!�td"t#|��dt#|�fWYd}~Sd}~ww)#N�@��emailzThis account already exists!r�r+r4)�domainOwnerr+)�
childOwnerr+zBExceeded maximum amount of email accounts allowed for the package.zJ/usr/local/CyberCP/bin/python /usr/local/CyberCP/plogical/mailUtilities.pyz AfterEffects --domain �root�lscpdz/etc/redhat-release�utf-8�	{CRYPT}%s)�
emailOwnerr@�passwordz!maildir:/home/vmail/%s/%s/Maildirz/home/vmail/�/z/Maildirz
mkdir -p 'z/cur' 'z/new' 'z/tmp'�vmailzchmod -R 700 '�'zchown -R vmail:vmail ')z.Archivez.Deleted Itemsz.Draftsz.Sentz.Junk E-mail�1,None�r4�Nonez  [createEmailAccount]�0,)$r	�objects�filterr#rr�getr
r�saver
�package�
emailAccounts�
eusers_set�all�count�master�getpass�getuserrr*r5r!r"�bcrypt�hashpw�encode�gensalt�decode�mailrrrrrr)r+�userNamerI�restore�finalEmailUsername�
ChildCheck�website�newEmailDomain�domainLimits�emailDomain�execPath�
CentOSPath�	emailAcct�emailLimits�maildir_base�maildir_pathr0�standard_folders�folder�folder_pathrrrr�createEmailAccount�s�
��




�
���z mailUtilities.createEmailAccountc
Cs^zt|d�}|��WdSty.}ztj�t|�d�dt|�fWYd}~Sd}~ww)Nr?rNz  [deleteEmailAccount]r)r	�deleterrrrr)r@rrrr�deleteEmailAccount~s

���z mailUtilities.deleteEmailAccountcCs(z
tjj|d�}|j��WSYdS)NrAr)rrQrSrWrX)�virtualHostNamerjrrr�getEmailAccounts�s
zmailUtilities.getEmailAccountsc
Cs�z*tjj|d�}|dkr!t�|�d�t���}d|��}||_n||_|�	�WdSt
yB}zdt|�fWYd}~Sd}~ww)Nr?rFrG)rrOr)r	rQrSr]r^r_r`rarIrTrr)r@�newPassword�encrypt�
changePassrIrrrr�changeEmailPassword�s��z!mailUtilities.changeEmailPasswordc
Cs��z=ddl}|jdd�}|}||�}|jd|j}tj�d|d�spd|}d|}t�|�t�	�tj
ks?t�	�tjkrFd||f}nd	||f}t�|�d
|}t�|�d|d}t�|�d
|d}t�|�d}d|d|d|d}tj�|�s�t|d�}	|	�
d�|	��t|d���}
|
�d|�dkr�t|d�}	|	�
|�|	��d}d|d|d}tj�|�s�t|d�}	|	�
d�|	��t|d���}
|
�d|�dkr�t|d�}	|	�
|�|	��d}|d}tj�|��st|d�}	|	�
d�|	��t|d���}
|
�|�dk�r(t|d�}	|	�
|�|	��d}t�t�|��d}t�t�|��WdSt�ya}
ztj�t|
�d�dt|
�fWYd}
~
Sd}
~
ww) Nr)�	cache_dir�.z/etc/opendkim/keys/z/default.txtz/etc/opendkim/keys/%szmkdir %szC/usr/sbin/opendkim-genkey -D /etc/opendkim/keys/%s -d %s -s defaultz9opendkim-genkey -D /etc/opendkim/keys/%s -d %s -s defaultz*chown -R root:opendkim /etc/opendkim/keys/zchmod 640 /etc/opendkim/keys/z/default.privatezchmod 644 /etc/opendkim/keys/z/etc/opendkim/KeyTablezdefault._domainkey.� z:default:/etc/opendkim/keys/z/default.private
�azT##### CyberPanel Generated File - Do not edit if you don't know what you are doing.
r2r3z/etc/opendkim/SigningTablez*@z default._domainkey.�
z/etc/opendkim/TrustedHostszsystemctl restart opendkim�systemctl restart postfixrNz  [setupDKIM:275])�
tldextract�
TLDExtractr+�suffixr!r"r#rr*�decideDistro�centos�cent8r'r(r)�readr7�
subprocess�call�shlex�splitrrrrr)rwr��no_cache_extract�actualDomain�
extractDomainr"r0�keyTable�
configToWriter�data�signingTable�trustedHostsrrrr�	setupDKIM�s�
�
















���zmailUtilities.setupDKIMc
CsTzd}d|}t�|�WSty)}ztj�t|�d�WYd}~dSd}~ww)N�/etc/opendkim.confz	sudo cat z  [checkIfDKIMInstalled]r)rr5rrrrr)r"r0rrrr�checkIfDKIMInstalleds
���z"mailUtilities.checkIfDKIMInstalledc
Cs|zt�|�}|ddkrt|d��td�WdSty=}ztj�t|�d�tdt|��WYd}~dSd}~ww)Nrr4rMz  [generateKeys]rP)rr�rrrrrr)r+�resultrrrr�generateKeys"s

���zmailUtilities.generateKeysc
Cs&zId}d}t|d�}|�|�|��d}d}t|d�}|�|�|��d}t�t�|��d}t�t�|��d}t�t�|��td	�WdStyn}zt	j
�t|�d
�tdt|��WYd}~dSd}~wt
y�}zt	j
�t|�d
�tdt|��WYd}~dSd}~ww)Nr���
Mode	sv
Canonicalization	relaxed/simple
KeyTable	refile:/etc/opendkim/KeyTable
SigningTable	refile:/etc/opendkim/SigningTable
ExternalIgnoreList	refile:/etc/opendkim/TrustedHosts
InternalHosts	refile:/etc/opendkim/TrustedHosts
r��/etc/postfix/main.cf�g
smtpd_milters = inet:127.0.0.1:8891
non_smtpd_milters = $smtpd_milters
milter_default_action = accept
�systemctl start opendkim�systemctl enable opendkimzsystemctl start postfixrMz [configureOpenDKIM]rP)r'r(r)r�r�r�r�r�OSErrorrrrrr)�openDKIMConfigurePath�
configDatar�postfixFilePathr0rrrr�configureOpenDKIM0s<
	


���zmailUtilities.configureOpenDKIMc
Cs zrzUttjd�}t��dkr4tj�tj�s$dtj}t	j
t�|�|d�dtj}t	j
t�|�|d�ntj�tj�sEdtj}t
�|�dtj}t
�|�WWdSWWdSttjd�}dtj}t	j
t�|�|d�YWdSty�}ztj�t|�d�WYd}~dSd}~ww)Nr rDzmkdir ��stdoutz$sudo chown -R cyberpanel:cyberpanel zchown -R cyberpanel:cyberpanel z [checkHome])r'r!�devnullr[r\r"r#r�cyberPanelHomer�r�r�r�rr5rrrrr)�FNULLr0rrrr�	checkHomens.




�
"��zmailUtilities.checkHomec
CszVt��d}t�|�}ttjd��}tj||d�}Wd�n1s$wY|dkrEttjd�}|�d�|�	�t
j�d�WdSttjd�}|�d	�|�	�WdSt
y�}z ttjd�}|�d�|�	�t
j�t|�d
�WYd}~dSd}~ww)Nzsudo yum install opendkim -yr r�r4r��Can not be installed.[404]
z[Could not Install OpenDKIM.]rzOpenDKIM Installed.[200]
z[installOpenDKIM])rr�r�r�r'�installLogPathr�r��
writelinesr)rrrrr)�install�openDKIMINstallr0�cmd�f�resrrrrr�installOpenDKIM�s0
�


"��zmailUtilities.installOpenDKIMc
Csjzd}t�t�|��d}t�t�|��WdSty4}ztj�t|�d�WYd}~dSd}~ww)Nr��systemctl restart dovecotz [restartServices])	r�r�r�r�rrrrr)r0rrrr�restartServices�s"��zmailUtilities.restartServicesc
Cs:zptj�tj�rt�tj�t��tjkst��tj	krd}nd}t
�|�}ttjd��}t
j||d�}Wd�n1s>wY|dkr_ttjd�}|�d�|��tj�d�Wd	Sttjd�}|�d
�|��WdSty�}z ttjd�}|�d�|��tj�t|�d�WYd}~dSd}~ww)Nz sudo yum install spamassassin -yz*sudo apt-get install spamassassin spamc -yr r�r4r�r�z![Could not Install SpamAssassin.]rzSpamAssassin Installed.[200]
�[installSpamAssassin])r!r"r#r�spamassassinInstallLogPath�removerr�r�r�r�r�r'r�r�r�r)rrrrr�r��SpamAssassinr0r�r�r�rrrrr�installSpamAssassin�s6
�


"��z!mailUtilities.installSpamAssassincCs\d}d}tj�|�s,t|d�}|�|�|��d}d}t|d�}|�|�|��dSdS)Nz%/etc/rspamd/override.d/ratelimit.confz7
custom_keywords = "/etc/rspamd/custom_ratelimit.lua";
r z /etc/rspamd/custom_ratelimit.luaa

local custom_keywords = {}
local d = {}

-- create map
d['badusers'] = rspamd_config:add_map({
  ['url']= '/etc/rspamd/badusers.map',
  ['type'] = 'map',
  ['description'] = 'Bad users'
})

custom_keywords.customrl = function(task)
  local rspamd_logger = require "rspamd_logger"
  -- get authenticated user
  local user = task:get_user()
  -- define a default ratelimit
  local default_rl = "10 / 1m"
  if not user then return end -- no user, return nil
  local user_rl = d['badusers']:get_key(user)
  if user_rl then
    local limit, duration, unit = string.match(user_rl, "(%d+)%s-/%s-(%d+)(%a*)")
    if limit and duration then
      duration = tonumber(duration)
      if unit == 'm' then
        duration = duration * 60 -- convert minutes to seconds
      elseif unit == 'h' then
        duration = duration * 3600 -- convert hours to seconds
      elseif unit == 'd' then
        duration = duration * 86400 -- convert days to seconds
      end
      local custom_rl = limit .. " / " .. duration .. "s"
      rspamd_logger.infox(rspamd_config, "User %s has custom ratelimit: %s", user, custom_rl)
      return "rs_customrl_" .. user, custom_rl
    else
      rspamd_logger.errx(rspamd_config, "Invalid ratelimit format for user %s, using default: %s", user, default_rl)
      return "rs_customrl_" .. user, default_rl
    end
  else
    rspamd_logger.infox(rspamd_config, "User %s not found in bad users map, using default ratelimit: %s", user, default_rl)
    return "rs_customrl_" .. user, default_rl
  end
end

return custom_keywords
)r!r"r#r'r(r))�rlFile�	rlContentr/�rlLUA�rlLUAContentrrr�SetupEmailLimits�s


.
�zmailUtilities.SetupEmailLimitsc
Cs�ddlm}�z?tj�tj�rt�tj�|��t	�
�t	jkrJttjd�}|�
d�|��d}t	�|d�d}t	�|d�d}t	�|d�d	}n3t	�
�t	jkr{ttjd�}|�
d�|��d
}t	�|d�d}t	�|d�d}t	�|d�d}nd}ttjd
��}tj||dd�}Wd�n1s�wYd}d}t|d
�}	|	�
|�|	��d}
t|
d
�}|�d�|��d}t|d���}
t|d
�}|
D]0}|�d�dkr�|�d�}|�d�}|�d�|�|�q�|�d�dkr�|�d�q�|�|�q�|��d}d}t|d
�}|�
|�|��|dk�r1ttjd�}|�
d�|��tj�d �WdSt	�
�t	jk�sAt	�
�t	jk�rHd!}t�|�}ttjd��}tj||d"�}Wd�n	1�sawYd#}t�|�}ttjd��}tj||d"�}Wd�n	1�s�wYd$}t�|�}ttjd��}tj||d"�}Wd�n	1�s�wYd%}td&d
�}|�|�|��d'}t	�|d(d)�ttjd�}|�
d*�|��d+}t�|�}ttjd��}tj||d"�}Wd�n	1�s�wYd,}t�|�}ttjd��}tj||d"�}Wd�n	1�swYd-}t�|�}ttjd��}tj||d"�}Wd�n	1�sBwYn�t	�
�t	jk�sXt	�
�t	jk�r0d.}t�|�}ttjd��}tj||d"�}Wd�n	1�sxwYd/}t�|�}ttjd��}tj||d"�}Wd�n	1�s�wYd0}td1d
�}|�|�|��ttjd�}|�
d*�|��d+}t�|�}ttjd��}tj||d"�}Wd�n	1�s�wYd2}t�|�}ttjd��}tj||d"�}Wd�n	1�swYd-}t�|�}ttjd��}tj||d"�}Wd�n	1�s+wYt�d3�ttjd�}|�
d4�|��WdSt �ys}z ttjd�}|�
d�|��tj�t!|�d5�WYd}~dSd}~ww)6Nr��ServiceManagerr�zConfiguring RSPAMD repo..
zVcurl https://rspamd.com/rpm-stable/centos-7/rspamd.repo > /etc/yum.repos.d/rspamd.repoTz2rpm --import https://rspamd.com/rpm-stable/gpg.keyz
yum updatez�sudo yum install rspamd clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd -yzVcurl https://rspamd.com/rpm-stable/centos-8/rspamd.repo > /etc/yum.repos.d/rspamd.repoz5sudo yum install rspamd clamav clamd clamav-update -yzMDEBIAN_FRONTEND=noninteractive apt-get install rspamd clamav clamav-daemon -yr �r��shell�"/etc/rspamd/local.d/antivirus.confa|# ================= DO NOT MODIFY THIS FILE =================
# 
# Manual changes will be lost when this file is regenerated.
#
# Please read the developer's guide, which is available
# at NethServer official site: https://www.nethserver.org
#
# 

#Enable or disable the module 
enabled = true

# multiple scanners could be checked, for each we create a configuration block with an arbitrary name
clamav {
  # If set force this action if any virus is found (default unset: no action is forced, 'rewrite_subject' to tag as spam)
  action = "reject";

  # if `true` only messages with non-image attachments will be checked (default true)
  scan_mime_parts = false;

  # If `max_size` is set, messages > n bytes in size are not scanned
  max_size = 20000000;

  # type of scanner: "clamav", "fprot", "sophos" or "savapi"
  type = "clamav";

  # If set true, log message is emitted for clean messages
  log_clean = false;

  # Timeout and retransmits increased in case of clamav is reloading its database
  # It takes a lot of time (25 to 60 seconds), after rspamd answers a temporally failure
  #timeout = 5;
  #retransmits = 2;

  # servers to query (if port is unspecified, scanner-specific default is used)
  # can be specified multiple times to pool servers
  # can be set to a path to a unix socket
  servers = "127.0.0.1:3310";

  # if `patterns` is specified virus name will be matched against provided regexes and the related
  # symbol will be yielded if a match is found. If no match is found, default symbol is yielded.
  patterns {
    # symbol_name = "pattern";
    CLAMAV_VIRUS = "^Eicar-Test-Signature$";
  }

  # In version 1.7.0+ patterns could be a list for ordered matching
  #patterns = [{SANE_MAL = "Sanesecurity.Malware.*"}, {CLAM_UNOFFICIAL = "UNOFFICIAL$"}];

  # `whitelist` points to a map of IP addresses. Mail from these addresses is not scanned.
  whitelist = "/etc/rspamd/antivirus.wl";
}
z%/etc/rspamd/local.d/dkim_signing.confzenabled = false;
r�r2zinet:127.0.0.1:8891r3r�z, inet:127.0.0.1:11332
zO### Please do not edit this line, editing this line could break configurations
�non_smtpd_milters�#non_smtpd_milters = $smtpd_milters
�/etc/rspamd/local.d/redis.confz:
write_servers = "127.0.0.1";
read_servers = "127.0.0.1";
r4r��ould not Install Rspamd.]z(setsebool -P antivirus_can_scan_system 1r�zsetsebool -P clamd_use_jit 1zusermod -a -G clamscan _rspamdz�
User clamscan
PidFile /var/run/clamd.scan/clamd.pid
TCPSocket 3310
TCPAddr 127.0.0.1
ConcurrentDatabaseReload no
Debug false
FixStaleSocket true
LocalSocketMode 666
ScanMail true
ScanArchive true
#LogFile /var/log/clamd.scan/clamav.log
�/etc/clamd.d/scan.confz$touch /var/log/clamd.scan/clamav.logF�clamscanzUpdating Freshclam database..
�	freshclamzsystemctl start clamd@scan�systemctl restart rspamdzusermod -a -G clamav _rspamdz&chown -R clamav:clamav /var/run/clamavz�
User clamav
PidFile /var/run/clamav/clamd.pid
TCPSocket 3310
TCPAddr 127.0.0.1
ConcurrentDatabaseReload no
Debug false
FixStaleSocket true
LocalSocketMode 666
ScanMail true
ScanArchive true
LogFile /var/log/clamav/clamav.log
�/etc/clamav/clamd.confzsystemctl restart clamav-daemon�zRspamd Installed.[200]
z[installRspamd])"�manageServices.serviceManagerr�r!r"r#r�RspamdInstallLogPathr��InstallRedisrr�r�r'r�r)r*r�r�r�r(r6r7�rstriprrrr�r��ubuntu�ubuntu20�time�sleeprr)r��rspamdr�rr0r�r�r"�content�	wirtedata�DKIMPathr/�
appendpathr;�line�cLine�wpath�wdata�
wirtedata2r��
clamavcontentrrrr�
installRspamds,

�
7










 
�
�
�



�
�
�� 
�
�



�
�
�


"��zmailUtilities.installRspamdc
Csnddlm}z�tj�d�tj�tj	�rt�
tj	�t��tj
ks(t��tjkr+d}nd}t�|�}ttj	d��}tj||d�}Wd�n1sJwY|dkrkttj	d	�}|�d
�|��tj�d�WdSd}t�|�d
}	t�|	�ttj	d	�}|�d�|��WdSty�}
z ttj	d	�}|�d�|��tj�t|
�d�WYd}
~
dSd}
~
ww)Nrr�z&start................[uninstallRspamd]z.sudo yum remove rspamd clamav clamav-daemon -yz-sudo apt purge rspamd clamav clamav-daemon -yr r�r4r�zCan not be uninstalled.[404]
r��systemctl stop rspamdzsystemctl disable rspamdzRspamd unInstalled.[200]
r�z[uninstallRspamd])r�r�rrrr!r"r#r�RspamdUnInstallLogPathr�rr�r�r�r�r�r'r�r�r�r)r*rr)r�r�r�r0r�r�r�r�cmdd�cmmdrrrr�uninstallRspamd;sB
�




"��zmailUtilities.uninstallRspamdc
Cs��z0d}t|d�}|��}t�|�}|��|d}|d}|d}|d}	|d}
|d}|d	}d
}
t|
d�}|��}|��|��}t|
d�}|D]�}|�d�d
kr|dkrjd}t�|�d}|�	|d�qL|dkr~d}t�|�d}|�	|d�qL|�d�d
kr�|dkr�d}|�	|d�qL|dkr�d}|�	|d�qL|�d�d
kr�|dkr�d}|�	|d�qL|dkr�d}|�	|d�qL|�d�d
kr�|dkr�d}|�	|d�qL|dkr�d}|�	|d�qL|�d�d
kr�d |	}|�	|d�qL|�d!�d
k�rd"|}|�	|d�qL|�d#�d
k�r#d$|
}|�	|d�qL|�	|d�qLt
d%�Wd&St�yc}z%tj
�t|�d'�t|d(�t
d)t|��d)t|�d(gWYd}~Sd}~ww)*Nz&/home/cyberpanel/tempfilerspamdconfigsr2�status�scan_mime_parts�	log_clean�max_size�Rspamdserver�CLAMAV_VIRUS�
action_rspamdr�r zenabled r3Tzsystemctl start rspamdzenabled = truer�Fr�zenabled = falsezaction =�Rejectz  action = "reject";�Unsetz  action = "unset";z  scan_mime_parts = true;z  scan_mime_parts = false;zlog_clean =z  log_clean = true;z  log_clean = false;z
max_size =z  max_size = %s;zCLAMAV_VIRUS =z    CLAMAV_VIRUS = "%s";z	servers =z  servers = "%s";rMrNz[changeRspamdConfig]z [changeRspamdConfig]r)r'r��json�loadsr)�
splitlinesr7rr5r�rrrrrr)r��changeRspamdConfig�tempfilepath�file�	jsondata1�jsondatar�r�r�r��serverr�r��confPathr��dataar��writeDataToFile�itemsr0�newitemrrrrr�fs�





������z mailUtilities.changeRspamdConfigc
Cs`z~d}t|d�}|��}t�|�}|��|d}|d}d}t|d�}	|	��}
|	��|
��}t|d�}|D]@}
|
�d�dksG|
�d	�dkr\|
�d�d
kr\d|�d�}|�|d�q7|
�d
�dksj|
�d�dkrp|�d�q7|�|
d�q7td�WdSt	y�}z%t
j�t
|�d�t
|d�td
t
|��d
t
|�dgWYd}~Sd}~ww)Nz'/home/cyberpanel/tempfilepostfixconfigsr2r��
smtpd_miltersr�r zsmtpd_milters=r3zsmtpd_milters =rz%smtpd_milters = inet:127.0.0.1:8891, r�znon_smtpd_milters=znon_smtpd_milters =r�rMrNz[changePostfixConfig]z [changePostfixConfig]�r'r�r�r�r)r�r7r�rrrrrr)r��changePostfixConfigr�r�r�r�r�r�postfixpathr�r�r�r��ir�rrrrr�s<



*��z!mailUtilities.changePostfixConfigc
Cs>zmd}t|d�}|��}t�|�}|��|d}|d}d}t|d�}	|	��}
|	��|
��}t|d�}|D]/}
|
�d�dkrLd	|}|�|d
�q7|
�d�dkr_d|}|�|d
�q7|�|
d
�q7td
�WdSt	y�}z%t
j�t
|�d�t
|d�tdt
|��dt
|�dgWYd}~Sd}~ww)Nz(/home/cyberpanel/saveRedisConfigurationsr2�
write_servers�read_serversr�r zwrite_servers =r3zwrite_servers = "%s";r�zread_servers =zread_servers = "%s";rMrNz[changeRedisxConfig]z [changeRedisxConfig]rr)r��changeRedisxConfigr�r�r�r�rr�	Redispathr�r�r�r�rr�rrrrr�s>



��z mailUtilities.changeRedisxConfigc
Cs�z�d}t|d�}|��}t�|�}|��|d}|d}|d}|d}	t��tjks3t��tjkr6d}
nt��tj	ksDt��tj
krFd}
t|
d�}|��}|��|��}
t|
d	�}|
D]e}|�d�d
krsd|}|�
|d�q^|�d�d
kr�d
|}|�
|d�q^|�d�d
kr�d|}|�
|d�q^|�d�d
kr�|	dkr�d}|�
|d�q^|	dkr�d}|�
|d�q^|�
|d�q^WdSty�}z%tj�t|�d�t|d�tdt|��dt|�dgWYd}~Sd}~ww)Nz)/home/cyberpanel/saveclamavConfigurationsr2�LogFile�TCPAddr�	TCPSocket�clamav_Debugr�r�r r3zTCPSocket %sr�z
TCPAddr %sz
LogFile %szDebug =Tz
Debug trueFzDebug falserNz[changeclamavConfig]z [changeclamavConfig]r)r'r�r�r�r)rr�r�r�r�r�r�r7r�rrrrrr)r��changeclamavConfigr�r�r�r�r	r
rr�clamavconfpathr�r�r�r�rr�rrrrr
s\



���z mailUtilities.changeclamavConfigc
CsTz}tj�tj�rt�tj�t��rld}t�|�d}t	�
|�}ttjd��}tj
||dd�}Wd�n1s9wY|dkrZttjd�}|�d�|��tj�d	�Wd
Sttjd�}|�d�|��WdSttjd�}|�d�|��WdSty�}z ttjd�}|�d�|��tj�t|�d
�WYd}~dSd}~ww)Nz=chmod +x /usr/local/CyberCP/CPScripts/mailscannerinstaller.shz4/usr/local/CyberCP/CPScripts/mailscannerinstaller.shr Tr�r4r�r�z [Could not Install MailScanner.]rzMailScanner Installed.[200]
zPPlease install SpamAssassin from CyberPanel before installing MailScanner.[404]
r�)r!r"r#r�mailScannerInstallLogPathr��checkIfSpamAssassinInstalledrr5r�r�r'r�r�r�r)rrrrrr�rrr�installMailScanner5s>

�



"��z mailUtilities.installMailScannerc
Cszzd}d|}t�|�}|�d�dkr|�d�dkrWdSWdSty<}ztj�t|�d�WYd}~dSd}~ww)	N�/etc/postfix/master.cfzcat �spamassassinr3z
user=spamdr4rz   [checkIfSpamAssassinInstalled])r�outputExecutionerr7rrrrr)r"r0�outputrrrrrbs

���z*mailUtilities.checkIfSpamAssassinInstalledc

Cs,z�t��tjkst��tjkrRd}t|���}t|d�}|D]/}|�d�dks<|�d�dks<|�d�dks<|�d�dkrH|�|�d��d	��q|�|�q|�	�d
}t�
|�d}t�
|�d}t�
|�d
}t�
|�d}t�
|�d}t|d���}t|d�}d}|D]-}|�d�dkr�|�d�dkr�|�d�dkr�|dkr�|�|�d�d�d}q�|�|�q�|�d�|�	�d}t�
|�td�WdSt
y�}	ztj�t|	�d�tdt|	��WYd}	~	dSd}	~	wt�y}	ztj�t|	�d�tdt|	��WYd}	~	dSd}	~	ww)N�/etc/mail/spamassassin/local.cfr �report_safer3�rewrite_header�required_score�
required_hits�#rzgroupadd spamdz=useradd -g spamd -s /bin/false -d /var/log/spamassassin spamdz'chown spamd:spamd /var/log/spamassassinzsystemctl enable spamassassinzsystemctl start spamassassinrr2r4�smtp�inet�smtpdr�z  -o content_filter=spamassassin
rz{spamassassin unix - n n - - pipe flags=R user=spamd argv=/usr/bin/spamc -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}r�rMz [configureSpamAssassin]rP)rr�r�r�r'r6r7r(�stripr)r*r�rr�rrrrr)
�confFile�confData�confr�r0�postfixConfr�r�checkerrrrr�configureSpamAssassinus\
8





2

���z#mailUtilities.configureSpamAssassinc	
CsFz}t|���}t�|�d}t|���}t|d�}d}|D]@}|�d�dkr.|�|d�q|�d�dkr=|�|d�q|�d�dkrL|�|d	�q|�d
�dkr]|�|d�d}qq|dkri|�|d�|��d}t�t	�
|��td
�WdSty�}zt
j�t|�d�tdt|��WYd}~dSd}~ww)Nrr rzreport_safe r3zrequired_hits r4zrewrite_header �zrequired_score �zsystemctl restart spamassassinrMz  [saveSpamAssassinConfigs]rP)r'r6r!r�r7r�r)r�r�r�r�rrrrrr)	�tempConfigPathr�r r!r"�rsCheckr�r0rrrr�saveSpamAssassinConfigs�sH

�
���z%mailUtilities.saveSpamAssassinConfigsc
Cs^z�d}|dkrEtj�d�st�dd�d}t�t�|��d}t�t�|��t	|d�}|�
d�|�
d	�|��d
}t�t�|��n>t	|d���}t	|d�}|D]}|�
d
�dkr]qS|�
d�dkreqS|�
|�qS|��d}t�t�|��d
}t�t�|��td�WdSty�}ztj�t|�d�tdt|��WYd}~dSd}~ww)Nr��1z!/etc/systemd/system/cpecs.servicez4/usr/local/CyberCP/postfixSenderPolicy/cpecs.servicezsystemctl enable cpecszsystemctl start cpecsr�zPsmtpd_data_restrictions = check_policy_service unix:/var/log/policyServerSocket
z,smtpd_policy_service_default_action = DUNNO
r�r2r z5check_policy_service unix:/var/log/policyServerSocketr3z+smtpd_policy_service_default_action = DUNNOzsystemctl stop cpecsrMz  [savePolicyServerStatus]rP)r!r"r#r%r&r�r�r�r�r'r�r)r6r7rrrrrr)r��postfixPathr0rr�r�rrrr�savePolicyServerStatus�sJ




���z$mailUtilities.savePolicyServerStatusc
CsXzd}tj�|�rWdSWdSty+}ztj�t|�d�WYd}~dSd}~ww)Nz#/usr/local/CyberCP/public/mailwatchr4r�  [checkIfMailScannerInstalled]�r!r"r#rrrrr)r"rrrr�checkIfMailScannerInstalleds
���z)mailUtilities.checkIfMailScannerInstalledc
CsTztj�d�r
WdSWdSty)}ztj�t|�d�WYd}~dSd}~ww)Nz/etc/rspamd/rspamd.confr4rr.r/)rrrr�checkIfRspamdInstalled/s
���z$mailUtilities.checkIfRspamdInstalledcCstz3d}tj�|�r1t|d���}|D]}|�d�dkr-|�d�d�d��d�}|WSqWdSWd	SYd	S)
Nr�r2�
myhostnamer3�=r4rr�r)	r!r"r#r'r6r7r�rr�)�PostfixPath�PostFixConfr��hostnamerrr�FetchPostfixHostname;s
��z"mailUtilities.FetchPostfixHostnamec	
Cs�z�ddl}|�d�}|jdkr�|��d}tj�tj�r&t	j
�d|�d��g}|D]d}z]|j|�d|��dd	�}tj�tj�rLt	j
�d
|�d|���|jdkr�|��}tj�tj�rgt	j
�dt|����|d
dkr�|�
|dd�|�
|dd�|�
|dd�Wq*Yq*tj�tj�r�t	j
�d|�dt|����|WSWdSty�}zt	j
�dtt����gWYd}~Sd}~ww)Nrz%https://cyberpanel.net/dnsServers.txt���urlsz	DNS urls r~z/index.php?ip=r�)�timeoutzurl to call z is zresponse from dns system r�r4�resultsz8.8.8.8z1.1.1.1z9.9.9.9zrDNS result of zError in fetch rDNS )�requestsrS�status_coder�r!r"r#r�	debugPathrrrr�appendrr)	�
ip_addressr<�	fetchURLsr9r;�url�responser��errr�reverse_dns_lookupKsB


��%��z mailUtilities.reverse_dns_lookupc

Cszgt|d���}|�d�d}d}d}tj�|�rLt|d���}t|d�}|D]}|�|�dkr8|�|�d}q'|�|�q'|dkrG|�|�|�	�nt|d�}|�|�|�	�d}t
�|�td	�WdSt
y�}	ztd
t|	����WYd}	~	dSd}	~	ww)Nr2rrz/etc/rspamd/badusers.mapr r3r4r�rMrP)r'r�r�r!r"r#r6r7r(r)rr5rrr)
�tempPathr�r@r"�
WriteCheckr�r/r�r0rrrr�SaveEmailLimitsNew|s4






 ��z mailUtilities.SaveEmailLimitsNew)N)+�__name__�
__module__�__qualname__r�r�r�r�r�r�
RSpamdLogPath�staticmethodrr1r=rtrvrxr|r�r�r�r�r�r�r�r�r�r�r�r�rrr
rrr%r*r-r0r1r7rErHrrrrr$s�

k
>


o


=




#
?
$
*
R
$
#
2
,

F
.
3



0rc@s~eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zdd�Zdd�ZdS)�MailServerManagerUtilsNcCs(tj�|�||_||_||_d|_dS)Nr)�multi�Thread�__init__�request�function�	extraArgs�MailSSL)�selfrRrSrTrrrrQ�s

zMailServerManagerUtils.__init__c
Cs.d}t�d|�}|�d�dkrd|_dSz<t�d|���}|D].}|�d�dkrO|ddkrO|�d�d	�d
�|_tj	�
tj�rLtj
�d|j���d	|_q!Wntyp}zd|_tj
�dt|��WYd}~nd}~wwd
}t|�}|��}|�dd	�d}	d|	}
t�|
�}|�d�dkr�dSd	S)Nr��cat %szmyhostname = server.example.comr3rr2rr3r4rz&Mail server SSL is issued with value: z$%s. [checkIfMailServerSSLIssued:864]�/etc/cyberpanel/machineIPr�z openssl s_client -connect %s:465�18 (self signed certificate))rrr7rUr�r�r�mailHostNamer!r"r#r>rrrrrr'r�)rVr,�postFixData�postFixLinesr�r�ipFiler��ipData�	ipAddressr0r�rrr�checkIfMailServerSSLIssued�s:�� ��
z1MailServerManagerUtils.checkIfMailServerSSLIssuedc
Cs�z5tj�|jdd�|jd}i}|��|d<t|d�}|�t�|��|�	�tj�|jdd�WdSt
yW}zdt|�d�}t�|�}t|�WYd}~Sd}~ww)	N�tempStatusPathz&Checking if MailServer SSL issued..,10�
reportFilerUr �Completed [200].r)r��
error_message)
rr�statusWriterrTr`r'r(r��dumpsr)rrr)rVrb�reportrr�	final_dic�
final_jsonrrr�RunServerLevelEmailChecks�s"�


��z0MailServerManagerUtils.RunServerLevelEmailCheckscCs�tj�d�r�tdd���}|�d�dks|�d�dkr2|�d�dks0|�d�dks0|�d�dkr2d	S|�d�dks@|�d�dkrP|�d
�dksN|�d�dkrPdS|�d�dks^|�d�dkrn|�d
�dksl|�d�dkrndS|�d�dks||�d�dkr�|�d�dks�|�d�dks�|�d�dkr�dS|�d�dks�|�d�dkr�|�d�dks�|�d�dkr�dS|�d�dks�|�d�dkr�|�d
�dks�|�d�dks�|�d�dks�|�d�dks�|�d�dkr�dSdSdSdS)Nz/etc/os-releaser2�
CloudLinuxr3�
cloudlinuxz8.9zAnatoly LevchenkozVERSION="8.zcl-89z8.8zAnatoly Filipchenkozcl-88z9.4zVERSION="9.�	AlmaLinux�	almalinuxzMidnight Oncillazal-88z8.7zStone Smilodonzal-87z9.3zShamrock PampaszSeafoam Ocelotzal-93)r!r"r#r'r�r7)rVr�rrr�!FetchCloudLinuxAlmaVersionVersion�s8**.���z8MailServerManagerUtils.FetchCloudLinuxAlmaVersionVersionc

Cs��z(t��tjkst��tjkrd}t�|dd�nt��tjks(t��tjkr1d}t�|dd�t��tjkrdz'd}t�|dd�d}t�|�tdd�}|�d�|�	�d	}t�|�WnYt
j�|j
d
d�t��tjkrd}t�|�d
}nht��tjkr�|��}|�d�d}t|�d�d�}|dkr�|dkr�d}t�|�nd}t�|�d}n3ddl}d}t�|�d}t|d�}|�dt|��d��|�d�|�	�d|}t�|�d}t�|�t
j�|j
d
d�t��tjk�rd}t�|�nt��tjk�rd }t�|�nd!}t�|�t
j�|j
d
d"�WdSt�yL}	zt
j�|j
d
d#t|	�d$�WYd}	~	dSd}	~	ww)%Nzyum remove postfix* dovecot* -yTz#apt-get -y remove postfix* dovecot*zapt-get purge dovecot* -yzMapt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 18A348AEED409DA1z$/etc/apt/sources.list.d/dovecot.listr�zRdeb [arch=amd64] https://repo.dovecot.org/ce-2.3-latest/ubuntu/bionic bionic main
z
apt updaterazRe-installing postfix..,10zjyum --nogpg install https://mirror.ghettoforge.net/distributions/gf/gf-release-latest.gf.el7.noarch.rpm -yzWyum install --enablerepo=gf-plus -y postfix3 postfix3-ldap postfix3-mysql postfix3-pcre�-rr4�al�Zzjdnf --nogpg install -y https://mirror.ghettoforge.net/distributions/gf/gf-release-latest.gf.el9.noarch.rpmzjdnf --nogpg install -y https://mirror.ghettoforge.net/distributions/gf/gf-release-latest.gf.el8.noarch.rpmz;dnf install --enablerepo=gf-plus postfix3 postfix3-mysql -yz apt-get install -y debconf-utilszpf.unattend.textr z postfix postfix/mailname string r�z8postfix postfix/main_mailer_type string "Internet Site"
zdebconf-set-selections z(apt-get -y install postfix postfix-mysqlzRe-installing Dovecot..,15z=yum --enablerepo=gf-plus -y install dovecot23 dovecot23-mysqlz=dnf install --enablerepo=gf-plus dovecot23 dovecot23-mysql -yz[DEBIAN_FRONTEND=noninteractive apt-get -y install dovecot-mysql dovecot-imapd dovecot-pop3dzPostfix/dovecot reinstalled.,40z!%s [install_postfix_dovecot][404]�
)rr�r�r�r5r�r�r'r�r)rrrerTror��int�socketr(r�getfqdnr!�systemr)
rVr0r�clAPVersion�type�versionru�	file_name�pfrrrr�install_postfix_dovecots�










�����z.MailServerManagerUtils.install_postfix_dovecotc

Cs��zGd}d}d}d}d}t|d���}t|d�}d|d	}	|D]}
|
�d
�dkr/|�|	�q |�|
�q |��t|d���}t|d�}d|d
}	|D]}
|
�d�dkr\|�|	�qM|�|
�qM|��t|d���}t|d�}d|d
}	|D]}
|
�d�dkr�|�|	�qz|�|
�qz|��t|d���}t|d�}d|d
}	|D]}
|
�d�dkr�|�|	�q�|�|
�q�|��t|d���}t|d�}d|d
}	|D]}
|
�d�dkr�|�|	�q�|�|
�q�|��|jdk�rFd|j|f}t�|�d|j	|f}t�|�d|j|j	|f}t�|�d|j|j	|f}t�|�d|j|j	|f}t�|�d|j|j	|f}t�|�WdSWdSt
�yk}ztj�
|jddt|�d�WYd}~dSd}~ww)N�E/usr/local/CyberCP/install/email-configs-one/mysql-virtual_domains.cf�I/usr/local/CyberCP/install/email-configs-one/mysql-virtual_forwardings.cf�G/usr/local/CyberCP/install/email-configs-one/mysql-virtual_mailboxes.cf�I/usr/local/CyberCP/install/email-configs-one/mysql-virtual_email2email.cf�A/usr/local/CyberCP/install/email-configs-one/dovecot-sql.conf.extr2r zDconnect = host=localhost dbname=cyberpanel user=cyberpanel password=z port=3306
�connectr3zpassword = r�rI�ONz&sed -i 's|host=localhost|host=%s|g' %sz!sed -i 's|port=3306|port=%s|g' %szsed -i 's|localhost|%s:%s|g' %sraz%s [setup_email_Passwords][404]rsrr4)r'r6r7r�r)�remotemysql�	mysqlhostrr5�	mysqlportrrrrerTr)
rV�
mysqlPassword�mysql_virtual_domains�mysql_virtual_forwardings�mysql_virtual_mailboxes�mysql_virtual_email2email�dovecotmysqlr�r��dataWrittenr�r0rrrr�setup_email_Passwordshs�








�

�

������z,MailServerManagerUtils.setup_email_Passwordsc
Cs�zBt|d�}|��}|��t|d�}|}|}|D]"}|�|�}	|	dkr6|d|	�|||	t|�d�}|�|�q|��WdStyd}
ztj�	|j
ddt|
�d�WYd}
~
dSd}
~
ww)Nr2r r3raz"%s [centos_lib_dir_to_ubuntu][404]rs)r'r6r)r7�lenr(rrrrerTr)rV�filename�old�new�fdr;�
centos_prefix�
ubuntu_prefixr��indexrrrr�centos_lib_dir_to_ubuntu�s&


$���z/MailServerManagerUtils.centos_lib_dir_to_ubuntuc
Cs �z�d}d}d}d}d}d}d}d}tj�|�rt�|�tj�|�r(t�|�tj�|�r3t�|�tj�|�r>t�|�tj�|�rIt�|�tj�|�rTt�|�tj�|�r_t�|�tj�|�rjt�|�d	}	t�|	�d
}	t�|	�t��tjks�t��tjkr�|�	ddd
�|�	ddd�ddl
}
|
�dd�|
�dd�|
�dd�|
�dd�|
�d|�|
�d|�|
�d|�|
�d|�d}	t�|	�d}	t�|	�d}	t�|	�d}	t�|	�d|}	t�|	�d|}	t�|	�d}	t�|	�d}	t�|	�d}	t�|	�d }	t�|	�d!|}	t�|	�d!|}	t�|	�d"}	t�|	�d#}	t�|	�d$}	t�|	�d%}	t�|	�d&}	t�|	�d'}	t�|	�d(}	t�|	�d)}	t�|	�d*}	t�|	�d+|}	t�|	�t��tjk�s|t��tjk�r�d,}	t�|	�d-}	t�|	�d.}	t�|	�d/}	t�|	�t��tjk�r�d}t|d0��
�}t|d1�}
|D]}|�d2�d3k�r�|
�|�|
�d4��q�|
�|��q�|
��d5}	t�|	�t��tjk�r�d6}	t�|	�Wd:SWd:St�y}ztj�|jd7d8t|�d9�WYd}~dSd}~ww);Nz%/etc/postfix/mysql-virtual_domains.cfz)/etc/postfix/mysql-virtual_forwardings.cfz'/etc/postfix/mysql-virtual_mailboxes.cfz)/etc/postfix/mysql-virtual_email2email.cfr�r�/etc/dovecot/dovecot.confz!/etc/dovecot/dovecot-sql.conf.extz�openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/postfix/key.pem -out /etc/postfix/cert.pemz�openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" -keyout /etc/dovecot/key.pem -out /etc/dovecot/cert.pemz6/usr/local/CyberCP/install/email-configs-one/master.cfz
/usr/libexec/z	/usr/lib/z4/usr/local/CyberCP/install/email-configs-one/main.cfz/usr/libexec/postfixz/usr/lib/postfix/sbinrr~rr�r�z9/usr/local/CyberCP/install/email-configs-one/dovecot.confr�z.chmod o= /etc/postfix/mysql-virtual_domains.cfz2chmod o= /etc/postfix/mysql-virtual_forwardings.cfz0chmod o= /etc/postfix/mysql-virtual_mailboxes.cfz2chmod o= /etc/postfix/mysql-virtual_email2email.cfz	chmod o= z3chgrp postfix /etc/postfix/mysql-virtual_domains.cfz7chgrp postfix /etc/postfix/mysql-virtual_forwardings.cfz5chgrp postfix /etc/postfix/mysql-virtual_mailboxes.cfz7chgrp postfix /etc/postfix/mysql-virtual_email2email.cfzchgrp postfix zgroupadd -g 5000 vmailz0useradd -g vmail -u 5000 vmail -d /home/vmail -mz systemctl enable postfix.servicezsystemctl start postfix.servicez/chgrp dovecot /etc/dovecot/dovecot-sql.conf.extz*chmod o= /etc/dovecot/dovecot-sql.conf.extz systemctl enable dovecot.servicezsystemctl start dovecot.servicez"systemctl restart  postfix.servicez
chmod 755 z"mkdir -p /etc/pki/dovecot/private/z mkdir -p /etc/pki/dovecot/certs/�mkdir -p /etc/opendkim/keys/z^sed -i 's/auth_mechanisms = plain/#auth_mechanisms = plain/g' /etc/dovecot/conf.d/10-auth.confr2r zssl_key = <key.pemr3z$ssl_dh = </usr/share/dovecot/dh.pem
r�zrsed -i 's|daemon_directory = /usr/libexec/postfix|daemon_directory = /usr/lib/postfix/sbin|g' /etc/postfix/main.cfraz&%s [setup_postfix_dovecot_config][404]rsr4)r!r"r#r�rr5r�r�r�r�r%r&r'r6r7r�r)rrrrerTr)rVr�r�r�r��mainrZ�dovecotr�r0r%�dovecotConfr�rr�rrrr�setup_postfix_dovecot_configs









������





















 






	������z3MailServerManagerUtils.setup_postfix_dovecot_configcCs�d}t�|�d}t�|�d}t�|�d}t�|�d}t�|�d}t�|�d}t�|�d}t�|�d	}t�|�d
}t�|�d}t�|�d}t�|�d
}t�|�d}t�|�d}t�|�d}t�|�gd�}|D]}d|}t�|�qvgd�}|D]}d|}t�|�q�d}tj|dd�d}tj|dd�d}tj|dd�d}tj|dd�d}tj|dd�d}tj|dd�gd�}|D]}zddl}|�|�Wq�Yq�d}tj|dd�d }t�|�d!}t�|�gd"�}|D]}d#|}t�|��qd$}t�|�d%}t�|�d&}t�|�t��tjk�s.tj�r<d'}t�|�d(}t�|�d)}t�|�dS)*Nz6find /usr/local/CyberCP -type d -exec chmod 0755 {} \;z6find /usr/local/CyberCP -type f -exec chmod 0644 {} \;z#chmod -R 755 /usr/local/CyberCP/binz%chown -R root:root /usr/local/CyberCPz3find /usr/local/lscp -type d -exec chmod 0755 {} \;z3find /usr/local/lscp -type f -exec chmod 0644 {} \;z chmod -R 755 /usr/local/lscp/binz%chmod -R 755 /usr/local/lscp/fcgi-binz=chown -R lscpd:lscpd /usr/local/CyberCP/public/phpmyadmin/tmpz"chown -R root:root /usr/local/lscpz=chown -R lscpd:lscpd /usr/local/lscp/cyberpanel/rainloop/dataz.chmod 700 /usr/local/CyberCP/cli/cyberPanel.pyz8chmod 700 /usr/local/CyberCP/plogical/upgradeCritical.pyz:chmod 755 /usr/local/CyberCP/postfixSenderPolicy/client.pyz0chmod 640 /usr/local/CyberCP/CyberCP/settings.pyz<chown root:cyberpanel /usr/local/CyberCP/CyberCP/settings.py)z/etc/yum.repos.d/MariaDB.repo�/etc/pdns/pdns.confz!/etc/systemd/system/lscpd.service�/etc/pure-ftpd/pure-ftpd.conf�"/etc/pure-ftpd/pureftpd-pgsql.conf�"/etc/pure-ftpd/pureftpd-mysql.conf�!/etc/pure-ftpd/pureftpd-ldap.confr�z%/usr/local/lsws/conf/httpd_config.xmlz /usr/local/lsws/conf/modsec.confz/usr/local/lsws/conf/httpd.confzchmod 644 %s)r�r�r�r�r�r�z/etc/pure-ftpd/db/mysql.confz/etc/powerdns/pdns.confzchmod 600 %szchmod 640 /etc/postfix/*.cfT)r�zchmod 644 /etc/postfix/main.cfzchmod 640 /etc/dovecot/*.confz#chmod 644 /etc/dovecot/dovecot.confz+chmod 640 /etc/dovecot/dovecot-sql.conf.extz%chmod 644 /etc/postfix/dynamicmaps.cf)z/usr/local/lsws/FileManager/z&/usr/local/CyberCP/install/FileManagerz5/usr/local/CyberCP/serverStatus/litespeed/FileManagerz(/usr/local/lsws/Example/html/FileManagerrzchmod 755 /etc/pure-ftpd/z-chmod +x /usr/local/CyberCP/plogical/renew.pyz3chmod +x /usr/local/CyberCP/CLManager/CLPackages.py)z)/usr/local/CyberCP/CLScript/panel_info.pyz1/usr/local/CyberCP/CLScript/CloudLinuxPackages.pyz./usr/local/CyberCP/CLScript/CloudLinuxUsers.pyz0/usr/local/CyberCP/CLScript/CloudLinuxDomains.pyz2/usr/local/CyberCP/CLScript/CloudLinuxResellers.pyz//usr/local/CyberCP/CLScript/CloudLinuxAdmins.pyz+/usr/local/CyberCP/CLScript/CloudLinuxDB.pyz'/usr/local/CyberCP/CLScript/UserInfo.pyzchmod +x %sz2chmod 600 /usr/local/CyberCP/plogical/adminPass.pyz/chmod 600 /etc/cagefs/exclude/cyberpanelexcludez.find /usr/local/CyberCP/ -name '*.pyc' -deletez#chown root:pdns /etc/pdns/pdns.confzchmod 640 /etc/pdns/pdns.confz4chmod 640 /usr/local/lscp/cyberpanel/logs/access.log)	rr5r�r�r%�rmtreer�r�r�)rVr0�filesr��impFile�fileMr%�	clScriptsrrr�fixCyberPanelPermissions�s�






















z/MailServerManagerUtils.fixCyberPanelPermissionsc
Cszjtj�|jdd�t��tjkrd}t�|�d}nt��tj	kr-d}t�|�d}n	d}t�|�d}t�|�t��tj	krId}t�
|�t��tjksWt��tjkrhd	}t�
|�d
}t�
|�WdSWdSt
y�}ztj�|jddt|�d�WYd}~d
Sd}~ww)NrazInstalling opendkim..,40zyum -y erase opendkim*zyum -y install opendkimzdnf install opendkim -yzapt-get -y purge opendkimz:DEBIAN_FRONTEND=noninteractive apt-get -y install opendkim�dnf install opendkim-tools -yzapt install opendkim-tools -yr�z%s [installOpenDKIM][404]rsrr4)rrrerTrr�r�r!rwr�r5r�r�rr)rVr0rrrr�installOpenDKIMNewy	sD�





�
����z)MailServerManagerUtils.installOpenDKIMNewcCs`ddlm}tj��D]}t�|j�|�|j�qt	j��D]}t�|j�|�|j�qdS)Nr)�DNS)
�plogical.dnsUtilitiesr�rrQrXrr�r+�createDKIMRecordsr
)rVr�rgrrr�SetupDKIMFromResetMail�	s�z-MailServerManagerUtils.SetupDKIMFromResetMailc
Cs�z�d}zCt�t�d|��}|d|_|d|_|d|_|d|_d|_|j�	d�d	kr1d
|_
d}t|�}|��}|�
dd
�d
}||_Wn&tym}zd|_tj�tj�rctj�dt|��WYd}~nd}~ww|��tj�|jdd�|��d
kr�Wd
Stj�|jdd�d
dl}|j�d�tj�dd�d
dl m!}	|�"|	j#dd�d
kr�Wd
Stj�|jdd�|�$�d
kr�tj�|jdd�Wd
Stj�|jdd�|�%�d
kr�tj�|jdd�Wd
S|�&�d
k�rtj�|jdd�Wd
S|�'�|j(�r%tj�|jdd�d
dl)m*}
|
�+|j,d |j,�d
}d
d!l-m.}d
dl)m*}
t/j0�1�D]R}
z#|j0j2d"|
j3d#�}tj�|jdd$|
j3�|
�4d
d%|
j3|
j5�WnY|j(d
k�r�|d
k�r�tj�|jdd&�d
dl)m*}
|
�+|
j3d |
j3�d
}�q8tj�|jdd'�|�6�d(}t�7|�d)}t�7|�d*}tj�|��r�t|d+���}nd,}t8|�d-k�r�t|d.�}|�9d/�|�:�d0}t�7|�d1}t�7|�tj�|jdd2�WdSt�y}ztj�|jdd3t|��WYd}~dSd}~ww)4Nz/etc/cyberpanel/mysqlPasswordrW�	mysqluser�
mysqlpasswordr�r�r�z
rds.amazonr3r4rXr�r�OFFz%s. [setupConnection:75]raz.Removing and re-installing postfix/dovecot..,5zResetting configurations..,40rrr)�settings�default�PASSWORDzConfigurations reset..,70z+setup_postfix_dovecot_config failed. [404].z&Restoring OpenDKIM configurations..,70zInstall OpenDKIM failed. [404].z configureOpenDKIM failed. [404].z&Setting up Mail Server SSL if any..,75)�virtualHostUtilitiesz/home/%s/public_html)r
�mail.%srAz Creating mail domain for %s..,80z	/dev/nullz8Setting up Mail Server SSL as no hostname SSL found..,80zFixing permissions..,90z�/usr/local/CyberCP/bin/python /usr/local/CyberCP/dns/dnsManager.py ResetDNSConfigurations --tempStatusPath /home/cyberpanel/dnscheckztouch /home/cyberpanel/postfixz/etc/resolv.confr2��r znameserver 8.8.8.8
r�r�rczFailed. Error %s [404].);r�r�rrr�r�r�r�r�r7�RDSr'r�r��	LOCALHOSTrr!r"r#r>rrrrr`rerTr}�sysr?�environ�
setdefault�CyberCPr�r��	DATABASESr�r�r�r�rU�plogical.virtualHostUtilitiesr��issueSSLForMailServerrZ�websiteFunctions.modelsr
rrQrXrSr+�setupAutoDiscover�adminr�r5r�r(r))rV�passFile�jsonDatar]r�r^�ipAddressLocalrr�r�r��MailServerSSLCheckr
�websites�childr0�
etcResolve�
dataEtcResolvrrrr�ResetEmailConfigurations�	s�




�������������






���z/MailServerManagerUtils.ResetEmailConfigurationsc	
Cs^z�t��tjkrd}t�|�d}d}t|d�}|�|�|��d}d}t|d�}|�|�|��t��tjksHt��tjksHt��tjkrvt|d��	�}t|d�}|D]}|�
d	�d
krl|�
d�d
krl|�d�qV|�|�qV|��d
}t�|�d}t�|�d}t�|�WdSty�}zt
j�|jddt|��WYd}~dSd}~ww)Nr�r�r�r�r�r�r2r �Socketr3zlocal:zSocket  inet:8891@localhost
r�r�r�r4raz)configureOpenDKIM failed. Error %s [404].r)rr�r�r5r'r(r)r�r�r6r7r�rrrrerTr)	rVr0r�r�rr�r�r�rrrrr�?
sH

	


*




���z(MailServerManagerUtils.configureOpenDKIMc
Cs�d}t|�}|��}|�dd�d}zddl}|�d|�}||kr+dd||ffWSWn
dd||ffYSd|}t�|�}	|	�d�d	krLd
SdS)NrXr�r4rr�zmail.%s does not point to %s.z%openssl s_client -connect mail.%s:993rYr3)rzNo valid SSL on port 993.)r4zAll checks are OK.)r'r�r�ru�
gethostbynamerrr7)
rV�websiteNamer]r�r^r_ru�
siteIPAddrr0r�rrr�debugEmailForSite�
s"�
z(MailServerManagerUtils.debugEmailForSite)NNN)rIrJrKrQr`rjror}r�r�r�r�r�r�r�r�r�rrrrrN�s&
'bg-DrNcCsbtjdd�}|jddd�|jddd�|jdd	d�|jd
dd�|jdd
d�|jddd�|jddd�|��}|jdkrLt�|j|j|j	�dS|jdkrYt�
|j�dS|jdkrdt��dS|jdkrot��dS|jdkr|t�
|j�dS|jdkr�t�|j�dS|jdkr�t�dd�dS|jdkr�t�dd�dS|jdkr�t�dd�dS|jdkr�t�dd�dS|jdkr�t�dd�dS|jd kr�t�dd �dS|jd!kr�t�dd!�dS|jd"kr�t�dd"�dS|jd#kr�t�|j�dS|jd$k�rd%|ji}tdd$|�}|��dS|jd&k�r!t��dS|jd'k�r/t�|j�dSdS)(NzCyberPanel Installer)�descriptionrSzSpecific a function to call!)�helpz--domainzDomain name!z
--userNamezEmail Username!z
--passwordzEmail password!z--tempConfigPathzTemporary Configuration Path!z	--installzEnable/Disable Policy Server!z--tempStatusPathzPath of temporary status file.rtr�r�r%r*r-r�r�r�r�r�r�rr�rrr
r1r�rar�rH)�argparse�ArgumentParser�add_argument�
parse_argsrSrrtr+rcrIr�r�r%r*r(r-r�r�r�r�rr�rrr
r1rarNr�r�rH)�parser�argsrT�
backgroundrrrr��
s`















�r��__main__))r�r!r�r��django.httprr"r?�djangor�r��setup�os.pathr%�plogicalrrr�r�r��plogical.processUtilitiesrr]r[r�	threadingrO�mailServer.modelsrr	�emailPremium.modelsr
rr�rr
rrPrNr�rIrrrr�<module>sn|6
�