Browse Source
add missing tables to backup script (mailbox_app_password, totp_exception_address, dkim, dkim_signing)
add missing tables to backup script (mailbox_app_password, totp_exception_address, dkim, dkim_signing)
Failed to extract signature
2 changed files with 4 additions and 223 deletions
@ -1,223 +0,0 @@ |
|||
<?php |
|||
|
|||
/** |
|||
* Requires the Zend framework is installed and in the include path. |
|||
* |
|||
* Usage example: |
|||
* require_once('Zend/XmlRpc/Client.php'); |
|||
* $xmlrpc = new Zend_XmlRpc_Client('https://server/xmlrpc.php'); |
|||
* |
|||
* $http_client = $xmlrpc->getHttpClient(); |
|||
* $http_client->setCookieJar(); |
|||
* |
|||
* $login_object = $xmlrpc->getProxy('login'); |
|||
* $success = $login_object->login($email_address, $password); |
|||
* |
|||
* if($success) { |
|||
* echo "We're logged in"; |
|||
* } |
|||
* else { |
|||
* die("Auth failed"); |
|||
* } |
|||
* $user = $xmlrpc->getProxy('user'); |
|||
* $alias = $xmlrpc->getProxy('alias'); |
|||
* $vacation = $xmlrpc->getProxy('vacation'); |
|||
* |
|||
* if($vacation->checkVacation()) { |
|||
* echo "Vacation turned on for user"; |
|||
* } |
|||
* |
|||
* Note, the requirement that your XmlRpc client provides cookies with each request. |
|||
* If it does not do this, then your authentication details will not persist across requests, and |
|||
* this XMLRPC interface will not work. |
|||
*/ |
|||
require_once('common.php'); |
|||
|
|||
if ($CONF['xmlrpc_enabled'] == false) { |
|||
die("xmlrpc support disabled"); |
|||
} |
|||
|
|||
require_once('Zend/XmlRpc/Server.php'); |
|||
$server = new Zend_XmlRpc_Server(); |
|||
|
|||
/** |
|||
* @param string $username |
|||
* @param string $password |
|||
* @return boolean true on success, else false. |
|||
*/ |
|||
function login($username, $password) |
|||
{ |
|||
$login = new Login('mailbox'); |
|||
if ($login->login($username, $password)) { |
|||
session_regenerate_id(); |
|||
$_SESSION['authenticated'] = true; |
|||
$_SESSION['sessid'] = array(); |
|||
$_SESSION['sessid']['username'] = $username; |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
|
|||
if (!isset($_SESSION['authenticated'])) { |
|||
$server->addFunction('login', 'login'); |
|||
} else { |
|||
$server->setClass('UserProxy', 'user'); |
|||
$server->setClass('VacationProxy', 'vacation'); |
|||
$server->setClass('AliasProxy', 'alias'); |
|||
} |
|||
echo $server->handle(); |
|||
|
|||
|
|||
class UserProxy |
|||
{ |
|||
/** |
|||
* @param string $old_password |
|||
* @param string $new_password |
|||
* @return boolean true on success |
|||
*/ |
|||
public function changePassword($old_password, $new_password) |
|||
{ |
|||
$uh = new MailboxHandler(); |
|||
$username = $_SESSION['sessid']['username'] ?? ''; |
|||
|
|||
if (empty($username)) { |
|||
throw new \Exception("not logged in? invalid session"); |
|||
} |
|||
|
|||
if (!$uh->init($username)) { |
|||
return false; // user doesn't exist.
|
|||
} |
|||
|
|||
$login = new Login('mailbox'); |
|||
|
|||
try { |
|||
return $login->changePassword($username, $new_password, $old_password); |
|||
} catch (\Exception $e) { |
|||
return false; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* @param string $username |
|||
* @param string $password |
|||
* @return boolean true if successful. |
|||
*/ |
|||
public function login($username, $password) |
|||
{ |
|||
$login = new Login('mailbox'); |
|||
return $login->login($username, $password); |
|||
} |
|||
} |
|||
|
|||
class VacationProxy |
|||
{ |
|||
/** |
|||
* @return boolean true if the vacation is removed successfully. Else false. |
|||
*/ |
|||
public function remove() |
|||
{ |
|||
$vh = new VacationHandler($_SESSION['sessid']['username']); |
|||
return $vh->remove(); |
|||
} |
|||
|
|||
/** |
|||
* @return boolean true if vacation stuff is enabled in this instance of postfixadmin |
|||
* and the user has the ability to make changes to it. |
|||
*/ |
|||
public function isVacationSupported() |
|||
{ |
|||
$vh = new VacationHandler($_SESSION['sessid']['username']); |
|||
return $vh->vacation_supported(); |
|||
} |
|||
|
|||
/** |
|||
* @return boolean true if the user has an active vacation record etc. |
|||
*/ |
|||
public function checkVacation() |
|||
{ |
|||
$vh = new VacationHandler($_SESSION['sessid']['username']); |
|||
return $vh->check_vacation(); |
|||
} |
|||
|
|||
/** |
|||
* @return array|bool - either array of vacation details or boolean false if the user has none. |
|||
*/ |
|||
public function getDetails() |
|||
{ |
|||
$vh = new VacationHandler($_SESSION['sessid']['username']); |
|||
return $vh->get_details(); |
|||
} |
|||
|
|||
/** |
|||
* @param string $subject |
|||
* @param string $body |
|||
* @param int $interval_time |
|||
* @param string $activeFrom |
|||
* @param string $activeUntil |
|||
* @return boolean true on success. |
|||
* Whatiis @replyType?? for |
|||
*/ |
|||
public function setAway($subject, $body, $interval_time = 0, $activeFrom = '2000-01-01', $activeUntil = '2099-12-31') |
|||
{ |
|||
$vh = new VacationHandler($_SESSION['sessid']['username']); |
|||
return $vh->set_away($subject, $body, $interval_time, $activeFrom, $activeUntil); |
|||
} |
|||
} |
|||
|
|||
class AliasProxy |
|||
{ |
|||
/** |
|||
* @return array - array of aliases this user has. Array may be empty. |
|||
*/ |
|||
public function get() |
|||
{ |
|||
$ah = new AliasHandler(); |
|||
$ah->init($_SESSION['sessid']['username']); |
|||
/* I see no point in returning special addresses to the user. */ |
|||
$ah->view(); |
|||
$result = $ah->result; |
|||
return $result['goto']; |
|||
} |
|||
|
|||
/** |
|||
* @param array of email addresses (Strings) |
|||
* @param string flag to set ('forward_and_store' or 'remote_only') |
|||
* @return boolean true |
|||
*/ |
|||
public function update($addresses, $flags) |
|||
{ |
|||
$ah = new AliasHandler(); |
|||
$ah->init($_SESSION['sessid']['username']); |
|||
|
|||
$values = ['goto' => $addresses]; |
|||
|
|||
if ($flags == 'forward_and_store') { |
|||
$values['goto_mailbox'] = 1; |
|||
} elseif ($flags == 'remote_only') { |
|||
$values['goto_mailbox'] = 0; |
|||
} else { |
|||
return false; # invalid parameter
|
|||
} |
|||
|
|||
if (!$ah->set($values)) { |
|||
//error_log('ah->set failed' . print_r($values, true));
|
|||
return false; |
|||
} |
|||
$store = $ah->save(); |
|||
return $store; |
|||
} |
|||
|
|||
/** |
|||
* @return boolean true if the user has 'store_and_forward' set. |
|||
* (i.e. their email address is also in the alias table). IF it returns false, then it's 'remote_only' |
|||
*/ |
|||
public function hasStoreAndForward() |
|||
{ |
|||
$ah = new AliasHandler(); |
|||
$ah->init($_SESSION['sessid']['username']); |
|||
$ah->view(); |
|||
$result = $ah->result; |
|||
return $result['goto_mailbox'] == 1; |
|||
} |
|||
} |
|||
/* vim: set expandtab softtabstop=4 tabstop=4 shiftwidth=4: */ |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue