base init, login and test connection
This commit is contained in:
parent
2912e1c162
commit
265f8502da
1 changed files with 119 additions and 0 deletions
119
src/Mailcow.php
Normal file
119
src/Mailcow.php
Normal file
|
@ -0,0 +1,119 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright 2024 Noracloud
|
||||
* Copyright 2022-2023 FOSSBilling
|
||||
* Copyright 2011-2021 BoxBilling, Inc.
|
||||
* SPDX-License-Identifier: Apache-2.0.
|
||||
*
|
||||
* @copyright Noracloud (https://www.noracloud.fr)
|
||||
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache-2.0
|
||||
*/
|
||||
class Server_Manager_Mailcow extends Server_Manager
|
||||
{
|
||||
/**
|
||||
* Method is called just after obejct contruct is complete.
|
||||
* Add required parameters checks here.
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Return server manager parameters.
|
||||
*/
|
||||
public static function getForm(): array
|
||||
{
|
||||
return [
|
||||
'label' => 'Mailcow',
|
||||
'form' => [
|
||||
'credentials' => [
|
||||
'fields' => [
|
||||
[
|
||||
'name' => 'accesshash',
|
||||
'type' => 'text',
|
||||
'label' => 'API Key',
|
||||
'placeholder' => 'API Key to authenticate Mailcow service',
|
||||
'required' => true,
|
||||
],
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns link to account management page.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getLoginUrl(Server_Account $account = null)
|
||||
{
|
||||
return 'https://' . $this->_config['host'] . '/';
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns link to reseller account management.
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getResellerLoginUrl(Server_Account $account = null)
|
||||
{
|
||||
return $this->getLoginUrl();
|
||||
}
|
||||
|
||||
private function _makeRequest($type, $path, $params = [])
|
||||
{
|
||||
$host = 'https://' . $this->_config['host'] . '/api/v1/';
|
||||
|
||||
// Server credentials
|
||||
$headers['X-API-Key'] = $this->_config['accesshash'];
|
||||
|
||||
// Send POST query
|
||||
$client = $this->getHttpClient()->withOptions([
|
||||
'verify_peer' => false,
|
||||
'verify_host' => false,
|
||||
'timeout' => 10
|
||||
]);
|
||||
$response = $client->request($type, $host . $path, [
|
||||
'headers' => $headers,
|
||||
'body' => $params != [] ? $params : null
|
||||
]);
|
||||
$result = $response->getContent();
|
||||
|
||||
if (str_contains($result, 'authentication failed')) {
|
||||
throw new Server_Exception('Failed to connect to the :type: server. Please verify your credentials and configuration', [':type:' => 'Mailcow']);
|
||||
} elseif (str_contains($result, 'error')) {
|
||||
error_log("Mailcow returned error $result for the " . $params['cmd'] . 'command');
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function _getPackageName(Server_Package $package)
|
||||
{
|
||||
$name = $package->getName();
|
||||
|
||||
return $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method is called to check if configuration is correct
|
||||
* and class can connect to server.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function testConnection()
|
||||
{
|
||||
|
||||
// Make request and check sys info
|
||||
$result = $this->_makeRequest('GET', 'get/status/version');
|
||||
if (str_contains($result, 'version')) {
|
||||
return true;
|
||||
} else {
|
||||
throw new Server_Exception('Failed to connect to the :type: server. Please verify your credentials and configuration', [':type:' => 'Mailcow']);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue