diff options
author | Lukáš Matula <lukas@gbely.net> | 2021-11-06 11:15:37 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-11-06 11:15:37 +0300 |
commit | 4c347f0e245dfb4f4df285c7696c55be45395e8c (patch) | |
tree | 779752df0c85b97ca3eee94275cd301a3575a7fe | |
parent | 59913fd5863faa39667e27a49a07adf128010bc8 (diff) |
Mailcow driver for password plugin (#8291)
-rw-r--r-- | plugins/password/README | 1 | ||||
-rw-r--r-- | plugins/password/config.inc.php.dist | 6 | ||||
-rw-r--r-- | plugins/password/drivers/mailcow.php | 80 |
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 |