mirror of
https://github.com/the-djmaze/snappymail.git
synced 2025-01-02 21:12:02 +08:00
69 lines
2 KiB
PHP
69 lines
2 KiB
PHP
|
<?php
|
||
|
|
||
|
class ChangePasswordHestiaDriver
|
||
|
{
|
||
|
const
|
||
|
NAME = 'Hestia',
|
||
|
DESCRIPTION = 'Change passwords in Hestia.';
|
||
|
|
||
|
/**
|
||
|
* @var \RainLoop\Config\Plugin
|
||
|
*/
|
||
|
private $oConfig = null;
|
||
|
|
||
|
/**
|
||
|
* @var \MailSo\Log\Logger
|
||
|
*/
|
||
|
protected $oLogger = null;
|
||
|
|
||
|
function __construct(\RainLoop\Config\Plugin $oConfig, \MailSo\Log\Logger $oLogger)
|
||
|
{
|
||
|
$this->oConfig = $oConfig;
|
||
|
$this->oLogger = $oLogger;
|
||
|
}
|
||
|
|
||
|
public static function isSupported() : bool
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public static function configMapping() : array
|
||
|
{
|
||
|
return array(
|
||
|
\RainLoop\Plugins\Property::NewInstance('hestia_host')->SetLabel('Hestia Host')
|
||
|
->SetDefaultValue('')
|
||
|
->SetDescription('Ex: localhost or domain.com'),
|
||
|
\RainLoop\Plugins\Property::NewInstance('hestia_port')->SetLabel('Hestia Port')
|
||
|
->SetType(\RainLoop\Enumerations\PluginPropertyType::INT)
|
||
|
->SetDefaultValue(8083),
|
||
|
\RainLoop\Plugins\Property::NewInstance('hestia_allowed_emails')->SetLabel('Allowed emails')
|
||
|
->SetType(\RainLoop\Enumerations\PluginPropertyType::STRING_TEXT)
|
||
|
->SetDescription('Allowed emails, space as delimiter, wildcard supported. Example: user1@domain1.net user2@domain1.net *@domain2.net')
|
||
|
->SetDefaultValue('*')
|
||
|
);
|
||
|
}
|
||
|
|
||
|
public function ChangePassword(\RainLoop\Model\Account $oAccount, string $sPrevPassword, string $sNewPassword) : bool
|
||
|
{
|
||
|
if (!\RainLoop\Plugins\Helper::ValidateWildcardValues($oAccount->Email(), $this->oConfig->Get('plugin', 'hestia_allowed_emails', ''))) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$sHost = $this->oConfig->Get('plugin', 'hestia_login');
|
||
|
$sPort = $this->oConfig->Get('plugin', 'hestia_port');
|
||
|
|
||
|
$HTTP = \SnappyMail\HTTP\Request::factory();
|
||
|
$postvars = array(
|
||
|
'email' => $oAccount->Email(),
|
||
|
'password' => $sPrevPassword,
|
||
|
'new' => $sNewPassword,
|
||
|
);
|
||
|
$cRequest = $HTTP->doRequest('POST','https://'.$sHost.':'.$sPort.'/reset/mail/',http_build_query($postvars));
|
||
|
if($cRequest -> body == '==ok=='){
|
||
|
return true;
|
||
|
}else{
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|