D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
usr
/
src
/
rmw
/
cpanel
/
RemoteMxWizard
/
php
/
Filename :
whm.func.php
back
Copy
<?php ################################################## # # # GK~root - Creating a better web # # Copyright (c) GK~root. All Rights Reserved. # # Software: Remote Mx Wizard # # Version: 1.0.3 # # Create Date: Jan 07 2015 # # Website: http://www.gk-root.com # # # ################################################## # # # This software is released under a license. # # You cannot transfer it to any other person, # # resell it or claim any code as your own. # # By using the software you agree to this terms. # # # ################################################## function ChangeProviderStatus($CpToken,$SetProviderStatus,$confFile) { if ($CpToken != $_ENV['cp_security_token']) {return false;} if (!validateConfFileName($confFile)) {return false;} $ProviderFile = '/usr/local/cpanel/base/3rdparty/RemoteMxWizard/mail_providers/'.$confFile; $ProviderFileContect = file_get_contents($ProviderFile); if (strpos($ProviderFileContect,'STATUS==1') !== false) { if (file_put_contents($ProviderFile,str_replace("STATUS==1", "STATUS==0", $ProviderFileContect))) { return true; } } elseif (strpos($ProviderFileContect,'STATUS==0') !== false) { $testValidConf = ValidateProviderConf($CpToken,$confFile); if ($testValidConf['status']) { if (file_put_contents($ProviderFile,str_replace("STATUS==0", "STATUS==1", $ProviderFileContect))) { return true; } } } return false; } function SaveMailProviderConf($CpToken) { $return['status'] = false; if ($CpToken == $_ENV['cp_security_token']) { $ConfFileStr = trim($_POST['Pconffile']); if (!validateConfFileName($ConfFileStr)) {$return['errors'][] = 'Invalid Provider File Name';} if (!empty($ConfFileStr)) {$Pconffile = '/usr/local/cpanel/base/3rdparty/RemoteMxWizard/mail_providers/'.$ConfFileStr;} else {$Pconffile = '';} if (!empty($_POST['providername'])) {$Pname = ucwords(preg_replace('!\s+!', ' ', $_POST['providername']));} else {$Pname = '';} if (!empty($_POST['Pdescription'])) {$Pdescription = $_POST['Pdescription'];} else {$Pdescription = '';} if (!empty($_POST['backupmx'])) {$Pbackupmx = $_POST['backupmx'];} else {$Pbackupmx = '';} if (!empty($_POST['spfrecord'])) {$Pspf = $_POST['spfrecord'];} else {$Pspf = '';} if (!empty($_POST['Pstatus'])) {$Pstatus = $_POST['Pstatus'];} else {$Pstatus = '0';} if (!empty($_POST['MXS'])) {$Pmxs = $_POST['MXS'];} else {$Pmxs = '';} if (isset($_POST['additional'])) {if (is_array($_POST['additional'])) {$Pservices = $_POST['additional'];} else {$Pservices = array();}} else {$Pservices = array();} // Configuration file content $ConfFileContent = "PNAME==".$Pname."\nDESCRIPTION==".$Pdescription."\nBACKUPMX==".$Pbackupmx."\nSPFR==".$Pspf."\nSTATUS==".$Pstatus."\n"; $mxArray = explode("\n",$Pmxs); $i=0; $ConfMxContent = ''; $return['MXR'] = false; if (!empty($Pmxs) && preg_match('/^[a-z0-9.-:|\s]+$/i', $Pmxs)) { foreach ($mxArray as $line) { $cleanline = trim($line); if (!empty($cleanline)) { $LinePart = explode(':',$line); if (!empty($LinePart[0]) && !empty($LinePart[1])) { $ConfMxContent .= "MXR".$i."==".$LinePart[0].":".$LinePart[1]."\n"; $i++; } else { $return['errors'][] = 'Invalid Provider MXs syntax for ['.$line.']'; } } } $return['MXR'] = $Pmxs; } elseif (!empty($Pmxs)) { $return['errors'][] = 'Invalid Provider MXs syntax'; } if (!empty($ConfMxContent)) { $ConfFileContent .= $ConfMxContent; } if (isset($Pservices['type'])) { $ii=0; $returnError = false; foreach ($Pservices['type'] as $key=>$type) { if (!empty($Pservices['record'][$key]) && !empty($Pservices['destination'][$key])) { if ($Pservices['settoselect'][$key] == 'yes') {$settoselect=1;} else {$settoselect=0;} $ConfFileContent .= "SERVICER".$ii."==".$type.":".$Pservices['record'][$key].":".$Pservices['destination'][$key].":".$settoselect."\n"; $ii++; } elseif (empty($Pservices['record'][$key]) && empty($Pservices['destination'][$key])) { continue; } else { $returnError = true; } } if ($returnError) { $return['errors'][] = 'Missing values in the Provider Additional Records'; } } // if (empty($return['errors'])) { if (file_put_contents($Pconffile,$ConfFileContent)) { $return['status'] = true; } else { $return['errors'][] = 'Cannot save the provider configuration'; } } } return $return; } function RemoveMailProviderConf($CpToken,$ConfFile) { if ($CpToken == $_ENV['cp_security_token']) { if (validateConfFileName($ConfFile)) { if (file_exists('/usr/local/cpanel/base/3rdparty/RemoteMxWizard/mail_providers/'.$ConfFile)) { if (unlink('/usr/local/cpanel/base/3rdparty/RemoteMxWizard/mail_providers/'.$ConfFile)) { return true; } } } } return false; } function ValidateProviderConf($CpTokens,$ConfigFile) { if ($CpTokens == $_ENV['cp_security_token']) { $ProviderConfig = GetMailProviderConf($ConfigFile); if (empty($ProviderConfig['NAME'])) { $return['errors'][] = 'The provider name cannot be empty.'; } if (empty($ProviderConfig['DESCRIPTION'])) { $return['errors'][] = 'The provider description cannot be empty.'; } if (isset($ProviderConfig['MXs']) && is_array($ProviderConfig['MXs'])) { foreach ($ProviderConfig['MXs'] as $mx=>$pri) { if (!checkdnsrr($mx, 'ANY')) { $return['errors'][] = 'No public DNS records found for the domain: '.$mx; } if (!checkIfNumber($pri)) { $return['errors'][] = $mx.' priority must be a number.'; } } } else { $return['errors'][] = 'The provider MXs cannot be empty.'; } if (!empty($ProviderConfig['BACKUPMX'])) { if (!checkIfNumber($ProviderConfig['BACKUPMX'])) { $return['errors'][] = 'The MX Backup priority must be a number.'; } elseif ( isset($ProviderConfig['MXs']) && ( (int)max($ProviderConfig['MXs']) > (int)$ProviderConfig['BACKUPMX'] ) ) { $return['errors'][] = 'The MX Backup should have the highest priority.'; } } if (isset($ProviderConfig['SERVICERS']) && is_array($ProviderConfig['SERVICERS'])) { foreach ($ProviderConfig['SERVICERS'] as $service) { if ($service[1] && $service[2] && $service[0] != 'TXT') { $services[$service[2]][$service[0]] = $service[0]; } } foreach ($services as $serviceDomain=>$typeArr) { foreach ($typeArr as $type) { if ( ($type == 'CNAME') && (!checkdnsrr($serviceDomain, 'A') && !checkdnsrr($serviceDomain, 'CNAME')) ) { $return['errors'][] = 'No CNAME or A record found for the service domain: '.$serviceDomain; } elseif ($type == 'A' && !ifValidIpAddress($serviceDomain) ) { $return['errors'][] = 'Invalid ip address '.$serviceDomain; } } } } } $return['status'] = (isset($return['errors'])) ? false : true; return $return; } function checkIfNumber($string) { $number = trim($string); if ( (int)($number) || ctype_digit($number) || is_numeric($number) ) { return true; } else { return false; } } function addNewMailProvider($CpToken) { $return['newfile'] = false; if ($CpToken == $_ENV['cp_security_token']) { $ConfFileName = trim($_POST['addnewprovider']); if (preg_match('/^[a-z0-9 ]+$/i', $ConfFileName)) { $filename = strtolower(preg_replace('!\s+!', '_', $ConfFileName)); $Pconffile = '/usr/local/cpanel/base/3rdparty/RemoteMxWizard/mail_providers/'.$filename.'.conf'; if (!file_exists($Pconffile)) { $ConfFileContent = "PNAME==\nDESCRIPTION==\nBACKUPMX==\nSPFR==\nSTATUS==0\n"; if (file_put_contents($Pconffile,$ConfFileContent)) { $return['newfile'] = $filename.'.conf'; } else { $return['error'] = 'Error creating the new provider'; } } else { $return['error'] = 'This provider name is already exist'; } } else { $return['error'] = 'You can use only alphanumeric characters for the new provider'; } } else { $return['error'] = 'Invalid cPanel security token'; } return $return; } function validateConfFileName($confFile) { if (preg_match('/^[a-z0-9_.]+$/i', $confFile)) { preg_match('/\.[^\.]+[conf]$/i', $confFile, $ext); if ($ext[0] == '.conf') { if (file_exists('/usr/local/cpanel/base/3rdparty/RemoteMxWizard/mail_providers/'.$confFile)) { return true; } } } return false; } function fileToProviderName($file) { return ucwords(str_replace('_', ' ', rtrim($file, '.conf'))); } function ifValidIpAddress($ip) { if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE)) { return true; } else { return preg_match("/([0-9\.]+)\.([0-9]+)(\/|\-)([0-9]+)$/", $ip); } } ?>