diff --git a/CHANGELOG b/CHANGELOG index a4b1c6147..2a8cef893 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Password: Added 'modoboa' driver (#6361) - Plugin API: Added 'raise_error' hook (#6199) - Fix custom logo size in Elastic (#6424) - Fix listing the same attachment multiple times on forwarded messages diff --git a/plugins/password/README b/plugins/password/README index 675e69baf..769f42959 100644 --- a/plugins/password/README +++ b/plugins/password/README @@ -46,6 +46,7 @@ 2.19. Vpopmail daemon (vpopmaild) 2.20. Plesk (Plesk RPC-API) 2.21. Kpasswd + 2.22. Modoboa 3. Driver API 4. Sudo setup @@ -355,13 +356,20 @@ Set the RPC-Path in $config['password_plesk_rpc_path']. Normally this is: enterprise/control/agent.php. - 2.21. Kpasswd + 2.21. Kpasswd ----------------------------------- Driver to change the password in Kerberos environments via the 'kpasswd' command. See config.inc.php.dist file for configuration description. + 2.22. Modoboa + ----------------------------------- + + Driver to change the password in Modoboa servers. + See config.inc.php.dist file for configuration description. + + 3. Driver API ------------- diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist index 5a23b4874..e6e1f736e 100644 --- a/plugins/password/config.inc.php.dist +++ b/plugins/password/config.inc.php.dist @@ -482,3 +482,8 @@ $config['password_plesk_rpc_path'] = 'enterprise/control/agent.php'; // --------------------- // Command to use $config['password_kpasswd_cmd'] = '/usr/bin/kpasswd'; + +// Modoboa Driver options +// --------------------- +// put token number from Modoboa server +$config['password_modoboa_api_token'] = ''; diff --git a/plugins/password/drivers/modoboa.php b/plugins/password/drivers/modoboa.php index b315bf56a..18ed0576a 100644 --- a/plugins/password/drivers/modoboa.php +++ b/plugins/password/drivers/modoboa.php @@ -29,9 +29,8 @@ * You need to define theses variables in plugin/password/config.inc.php * * $config['password_driver'] = 'modoboa'; // use modoboa as driver - * $config['token_api_modoboa'] = ''; // put token number from Modoboa server + * $config['password_modoboa_api_token'] = ''; // put token number from Modoboa server * $config['password_minimum_length'] = 8; // select same number as in Modoboa server - * */ class rcube_modoboa_password @@ -39,44 +38,43 @@ class rcube_modoboa_password function save($curpass, $passwd) { // Init config access - $rcmail = rcmail::get_instance(); - $ModoboaToken = $rcmail->config->get('token_api_modoboa'); - + $rcmail = rcmail::get_instance(); + $ModoboaToken = $rcmail->config->get('password_modoboa_api_token'); $RoudCubeUsername = $_SESSION['username']; - $IMAPhost = $_SESSION['imap_host']; + $IMAPhost = $_SESSION['imap_host']; // Call GET to fetch values from modoboa server $curl = curl_init(); curl_setopt_array($curl, array( - CURLOPT_URL => "https://" . $IMAPhost . "/api/v1/accounts/?search=" . urlencode($RoudCubeUsername), - CURLOPT_RETURNTRANSFER => true, - CURLOPT_ENCODING => "", - CURLOPT_MAXREDIRS => 10, - CURLOPT_TIMEOUT => 30, - CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, - CURLOPT_CUSTOMREQUEST => "GET", - CURLOPT_HTTPHEADER => array( - "Authorization: Token " . $ModoboaToken, - "Cache-Control: no-cache", - "Content-Type: application/json" - ), + CURLOPT_URL => "https://" . $IMAPhost . "/api/v1/accounts/?search=" . urlencode($RoudCubeUsername), + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "GET", + CURLOPT_HTTPHEADER => array( + "Authorization: Token " . $ModoboaToken, + "Cache-Control: no-cache", + "Content-Type: application/json" + ), )); $response = curl_exec($curl); - $err = curl_error($curl); + $err = curl_error($curl); curl_close($curl); if ($err) { - return PASSWORD_CONNECT_ERROR; + return PASSWORD_CONNECT_ERROR; } // Decode json string $decoded = json_decode($response); - + if (!is_array($decoded)) { - return PASSWORD_CONNECT_ERROR; + return PASSWORD_CONNECT_ERROR; } // Get user ID (pk) @@ -84,36 +82,36 @@ class rcube_modoboa_password // Encode json with new password $ret['username'] = $decoded[0]->username; - $ret['role'] = $decoded[0]->role; + $ret['role'] = $decoded[0]->role; $ret['password'] = $passwd; // new password - $encoded = json_encode($ret); + $encoded = json_encode($ret); // Call HTTP API Modoboa $curl = curl_init(); curl_setopt_array($curl, array( - CURLOPT_URL => "https://" . $IMAPhost . "/api/v1/accounts/" . $userid . "/", - CURLOPT_RETURNTRANSFER => true, - CURLOPT_ENCODING => "", - CURLOPT_MAXREDIRS => 10, - CURLOPT_TIMEOUT => 30, - CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, - CURLOPT_CUSTOMREQUEST => "PUT", - CURLOPT_POSTFIELDS => "" . $encoded . "", - CURLOPT_HTTPHEADER => array( - "Authorization: Token " . $ModoboaToken, - "Cache-Control: no-cache", - "Content-Type: application/json" - ), + CURLOPT_URL => "https://" . $IMAPhost . "/api/v1/accounts/" . $userid . "/", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_ENCODING => "", + CURLOPT_MAXREDIRS => 10, + CURLOPT_TIMEOUT => 30, + CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, + CURLOPT_CUSTOMREQUEST => "PUT", + CURLOPT_POSTFIELDS => "" . $encoded . "", + CURLOPT_HTTPHEADER => array( + "Authorization: Token " . $ModoboaToken, + "Cache-Control: no-cache", + "Content-Type: application/json" + ), )); $response = curl_exec($curl); - $err = curl_error($curl); + $err = curl_error($curl); curl_close($curl); if ($err) { - return PASSWORD_CONNECT_ERROR; + return PASSWORD_CONNECT_ERROR; } return PASSWORD_SUCCESS;