Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/roundcube/roundcubemail.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukáš Matula <lukas@gbely.net>2021-11-06 11:15:37 +0300
committerGitHub <noreply@github.com>2021-11-06 11:15:37 +0300
commit4c347f0e245dfb4f4df285c7696c55be45395e8c (patch)
tree779752df0c85b97ca3eee94275cd301a3575a7fe
parent59913fd5863faa39667e27a49a07adf128010bc8 (diff)
Mailcow driver for password plugin (#8291)
-rw-r--r--plugins/password/README1
-rw-r--r--plugins/password/config.inc.php.dist6
-rw-r--r--plugins/password/drivers/mailcow.php80
3 files changed, 87 insertions, 0 deletions
diff --git a/plugins/password/README b/plugins/password/README
index eb1903180..1b098bd33 100644
--- a/plugins/password/README
+++ b/plugins/password/README
@@ -51,6 +51,7 @@
2.1.25. Mail-in-a-Box (miab)
2.1.26. HTTP-API (httpapi)
2.1.27. dovecot_passwdfile
+ 2.1.28. Mailcow
2.2. Password Strength Drivers
2.2.1. Zxcvbn
2.2.2. Have I been pwned? (pwned)
diff --git a/plugins/password/config.inc.php.dist b/plugins/password/config.inc.php.dist
index d5fcfddeb..b7bd75c73 100644
--- a/plugins/password/config.inc.php.dist
+++ b/plugins/password/config.inc.php.dist
@@ -507,3 +507,9 @@ $config['password_httpapi_expect'] = '/^ok$/i';
// dovecot_passwdfile
// ------------------
$config['password_dovecot_passwdfile_path'] = '/etc/mail/imap.passwd';
+
+
+// Mailcow driver options
+// ----------------------
+$config['password_mailcow_api_host'] = 'localhost';
+$config['password_mailcow_api_token'] = ''; \ No newline at end of file
diff --git a/plugins/password/drivers/mailcow.php b/plugins/password/drivers/mailcow.php
new file mode 100644
index 000000000..10ff295fc
--- /dev/null
+++ b/plugins/password/drivers/mailcow.php
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * Mailcow Password Driver
+ *
+ * @version 1.0
+ * @author Lukas "Hexaris" Matula hexaris@gbely.net
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see http://www.gnu.org/licenses/.
+ *
+ * It is necessary to set the following variables in plugin/password/config.inc.php
+ * $config['password_driver'] = 'mailcow';
+ * $config['password_mailcow_api_host'] = '';
+ * $config['password_mailcow_api_token'] = '';
+ */
+
+class rcube_mailcow_password
+{
+ function save($curpass, $passwd, $username)
+ {
+ $rcmail = rcmail::get_instance();
+
+ $host = $rcmail->config->get('password_mailcow_api_host');
+ $token = $rcmail->config->get('password_mailcow_api_token');
+
+ try {
+ $client = password::get_http_client();
+
+ $headers = [
+ 'X-API-Key' => $token,
+ 'accept' => 'application/json'
+ ];
+
+ $cowdata = [
+ "attr" => [
+ "password" => $passwd,
+ "password2" => $passwd
+ ],
+ "items" => [ $username ]
+ ];
+
+ $response = $client->post('https://'.$host.'/api/v1/edit/mailbox', [
+ 'headers' => $headers,
+ 'json' => $cowdata
+ ]);
+
+ $cowreply = json_decode($response->getBody(),true);
+
+ if ($cowreply[0]['type'] == 'success') {
+ return PASSWORD_SUCCESS;
+ } else {
+ return PASSWORD_ERROR;
+ }
+ }
+
+ catch (Exception $e) {
+ $result = $e->getMessage();
+ }
+
+ rcube::raise_error([
+ 'code' => 600, 'file' => __FILE__, 'line' => __LINE__,
+ 'message' => "Password plugin: Problem with Mailcow API: $result",
+ ],
+ true, false
+ );
+
+ return PASSWORD_CONNECT_ERROR;
+ }
+} \ No newline at end of file