⚝
One Hat Cyber Team
⚝
Your IP:
216.73.217.4
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
psa-horde
/
ingo
/
lib
/
Transport
/
View File Name :
Ispconfig.php
* @author Jan Schneider
* @package Ingo */ /** * Ingo_Transport_Ispconfig implements an Ingo transport driver to allow * scripts to be installed and set active on an ISPConfig server. * * Ingo_Transport_ * * @author Michael Bunk
* @author Jan Schneider
* @package Ingo */ class Ingo_Transport_Ispconfig extends Ingo_Transport_Base { /** * The SOAP connection * * @var SoapClient */ protected $_soap; /** * The SOAP session id * * @var string */ protected $_soap_session; /** * The current vacation details. * * @var array */ protected $_details = null; /** * Sets a script running on the backend. * * @param array $script The filter script information. Passed elements: * - 'name': (string) the script name. * - 'recipes': (array) the filter recipe objects. * - 'script': (string) the filter script. * * @throws Ingo_Exception */ public function setScriptActive($script) { $vacation = null; foreach ($script['recipes'] as $recipe) { if ($recipe['rule'] == Ingo::RULE_VACATION) { $vacation = $recipe['object']->vacation; break; } else { throw new Ingo_Exception('The ISPConfig transport driver only supports vacation rules.'); } } if (!$vacation) { return; } // Fill mailuser_id and client_id. $this->_getUserDetails($this->_params['password']); try { $user = $this->_soap->mail_user_get( $this->_soap_session, $this->_details['mailuser_id']); $user['autoresponder'] = $recipe['object']->disable ? 'n' : 'y'; // UNIX timestamp. $start = $vacation->getVacationStart(); $end = $vacation->getVacationEnd(); if (empty($start)) { $start = time(); } if (empty($end)) { $end = time(); } $user['autoresponder_start_date'] = array( 'year' => date('Y', $start), 'month' => date('m', $start), 'day' => date('d', $start), 'hour' => date('H', $start), 'minute' => date('i', $start)); $user['autoresponder_end_date'] = array( 'year' => date('Y', $end), 'month' => date('m', $end), 'day' => date('d', $end), 'hour' => 23, 'minute' => 59); // $vacation->getVacationSubject() not supported by ISPConfig $user['autoresponder_text'] = $vacation->getVacationReason(); // otherwise ISPConfig calculates the hash of this hash... braindead unset($user['password']); $this->_soap->mail_user_update( $this->_soap_session, $this->_details['client_id'], $this->_details['mailuser_id'], $user); } catch (SoapFault $e) { throw new Ingo_Exception($e); } } /** * Retrieves the current vacation details for the user. * * @param string $password The password for user. * * @return array Vacation details * @throws Ingo_Exception */ protected function _getUserDetails($password) { if (!is_null($this->_details)) { return $this->_details; } $this->_checkConfig(); $this->_connect(); try { $users = $this->_soap->mail_user_get( $this->_soap_session, array('login' => $this->_params['username'])); } catch (SoapFault $e) { throw new Ingo_Exception($e); } if (count($users) != 1) { throw new Ingo_Exception( sprintf(_("%d users with login %s found, one expected."), count($users), $this->_params['username'])); } $user = $users[0]; $this->_details['vacation'] = ($user['autoresponder'] === 'y') ? 'Y' : 'N'; $this->_details['message'] = $user['autoresponder_text']; $this->_details['mailuser_id'] = $user['mailuser_id']; // 0 == admin $this->_details['client_id'] = 0; $this->_details['autoresponder_start_date'] = $user['autoresponder_start_date']; $this->_details['autoresponder_end_date'] = $user['autoresponder_end_date']; return $this->_details; } /** * Checks if the realm has a specific configuration. If not, tries to fall * back on the default configuration. If still not a valid configuration * then returns an exception. * * @throws Ingo_Exception */ protected function _checkConfig() { if (empty($this->_params['soap_uri']) || empty($this->_params['soap_user']) ) { throw new Ingo_Exception('The Ingo Ispconfig transport is not properly configured, edit your ingo/config/backends.local.php.'); } } /** * Connects to the SOAP server. * * @throws Ingo_Exception */ protected function _connect() { if ($this->_soap) { return; } $soap_uri = $this->_params['soap_uri']; $client = new SoapClient(null, array( 'location' => $soap_uri . 'index.php', 'uri' => $soap_uri)); try { if (!$session_id = $client->login( $this->_params['soap_user'], $this->_params['soap_pass'])) { throw new Ingo_Exception( sprintf(_("Login to %s failed."), $soap_uri)); } } catch (SoapFault $e) { throw new Ingo_Exception($e); } $this->_soap = &$client; $this->_soap_session = $session_id; } }