diff --git a/plugins/change-password-mailcow/driver.php b/plugins/change-password-mailcow/driver.php new file mode 100644 index 000000000..3a66b63c9 --- /dev/null +++ b/plugins/change-password-mailcow/driver.php @@ -0,0 +1,74 @@ +oLogger = $oLogger; + $this->sHostName = $oConfig->Get('plugin', 'mailcow_api_hostname', ''); + $this->sApiToken = $oConfig->Get('plugin', 'mailcow_api_token', ''); + } + + public static function isSupported() : bool + { + return true; + } + + public static function configMapping() : array + { + return array( + \RainLoop\Plugins\Property::NewInstance('mailcow_api_hostname') + ->SetLabel('Mailcow API hostname'), + \RainLoop\Plugins\Property::NewInstance('mailcow_api_token') + ->SetLabel('API token') + ->SetDescription('The Read/Write API token'), + ); + } + + public function ChangePassword(\RainLoop\Model\Account $oAccount, string $sPrevPassword, string $sNewPassword) : bool + { + $url = 'https://'.$this->sHostName.'/api/v1/edit/mailbox'; + $headers = [ + 'content-type' => 'application/json', + 'accept' => 'application/json', + 'X-API-Key' => $this->sApiToken, + ]; + $body = array( + 'items' => [ $oAccount->Email() ], + 'attr' => [ + 'password' => (string)$sNewPassword, + 'password2' => (string)$sNewPassword, + ], + ); + + $ch = curl_init($url); + $payload = json_encode($body); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $payload); + curl_setopt($ch, CURLOPT_HTTPHEADER, array_map(function($k, $v) {return "$k: $v";}, array_keys($headers), $headers)); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $result = curl_exec($ch); + curl_close($ch); + + $status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE); + + if ($status === 200 && $result && ($res = json_decode($result, true)) && $res[0]['type'] === 'success') { + return true; + } + + $this->oLogger->Write("Mailcow[Error]: Response: {$status} {$result}"); + return false; + } +} diff --git a/plugins/change-password-mailcow/index.php b/plugins/change-password-mailcow/index.php new file mode 100644 index 000000000..80a19c406 --- /dev/null +++ b/plugins/change-password-mailcow/index.php @@ -0,0 +1,18 @@ +