diff --git a/plugins/password/drivers/modoboa.php b/plugins/password/drivers/modoboa.php new file mode 100644 index 000000000..b315bf56a --- /dev/null +++ b/plugins/password/drivers/modoboa.php @@ -0,0 +1,121 @@ +config->get('token_api_modoboa'); + + $RoudCubeUsername = $_SESSION['username']; + $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" + ), + )); + + $response = curl_exec($curl); + $err = curl_error($curl); + + curl_close($curl); + + if ($err) { + return PASSWORD_CONNECT_ERROR; + } + + // Decode json string + $decoded = json_decode($response); + + if (!is_array($decoded)) { + return PASSWORD_CONNECT_ERROR; + } + + // Get user ID (pk) + $userid = $decoded[0]->pk; + + // Encode json with new password + $ret['username'] = $decoded[0]->username; + $ret['role'] = $decoded[0]->role; + $ret['password'] = $passwd; // new password + $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" + ), + )); + + $response = curl_exec($curl); + $err = curl_error($curl); + + curl_close($curl); + + if ($err) { + return PASSWORD_CONNECT_ERROR; + } + + return PASSWORD_SUCCESS; + } +}