From 45195bcd61303f696fbb6640e84061e312c5ce77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20=C5=81ojewski?= Date: Sat, 23 Dec 2017 13:38:05 +0100 Subject: [PATCH] Update code for release of the app in the Nextcloud App Store --- .hg_archival.txt | 4 --- .hgignore | 2 -- .hgtags | 14 --------- README.md | 7 +++-- appinfo/info.xml | 16 +++++----- appinfo/update.php | 73 --------------------------------------------- css/settings.css | 3 +- screenshot.png | Bin 0 -> 24828 bytes 8 files changed, 16 insertions(+), 103 deletions(-) delete mode 100644 .hg_archival.txt delete mode 100644 .hgignore delete mode 100644 .hgtags delete mode 100644 appinfo/update.php create mode 100644 screenshot.png diff --git a/.hg_archival.txt b/.hg_archival.txt deleted file mode 100644 index 8255758..0000000 --- a/.hg_archival.txt +++ /dev/null @@ -1,4 +0,0 @@ -repo: 3f045a88dd7014290a9bf60cbd740c8548dba967 -node: 77b8809852f4a8599200c9a538f94319ca5a4ff4 -branch: default -tag: v.2.3.1 diff --git a/.hgignore b/.hgignore deleted file mode 100644 index 4f0682f..0000000 --- a/.hgignore +++ /dev/null @@ -1,2 +0,0 @@ -.project -.settings diff --git a/.hgtags b/.hgtags deleted file mode 100644 index a55e874..0000000 --- a/.hgtags +++ /dev/null @@ -1,14 +0,0 @@ -8401b998f40be1e93d05b5c4db61ba98932c3de3 v0.2 -c74b035788ebbcade6bfae22963632f4c5f49540 v0.3 -5ee6481afb63f32dcfeaf93a72c07c4bc2a1a993 v0.4 -5ee6481afb63f32dcfeaf93a72c07c4bc2a1a993 v0.4 -f9eb8e6e4b4f2bcb521554bc513cc94d9ccf6fbd v0.4 -df3dc7358b79abdd7075ba78b58fff1da7fa3fde to -df3dc7358b79abdd7075ba78b58fff1da7fa3fde 0.5 -df3dc7358b79abdd7075ba78b58fff1da7fa3fde to -0000000000000000000000000000000000000000 to -df3dc7358b79abdd7075ba78b58fff1da7fa3fde 0.5 -0000000000000000000000000000000000000000 0.5 -845b75d72ec18f3fbf2a74f1a1ec3cf54ca4a304 v0.7 -599b774a4b6ac81b44971ac1a319fc41c04e3589 v2.3 -1fedd27cb5d8c69a998c8278463c8e8abd1f371a v2.3.0 diff --git a/README.md b/README.md index dac088c..710eed8 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ user_sql ======== -Owncloud/Nextcloud SQL authentification +Owncloud/Nextcloud SQL authentication -This is plugin is heavily based on user_imap, user_pwauth, user_ldap and user_redmine! +This repository contains continuation of work done in [this repo](https://www.aboehler.at/hg/user_sql/). + +This plugin is heavily based on user_imap, user_pwauth, user_ldap and user_redmine! Enable it in your Admin -> Apps section and configure your server's details. Currently, it supports most of postfixadmin's encryption options, except dovecot and saslauthd. @@ -20,5 +22,6 @@ username separated by ';' to login as target user using supervisor's password Credits + * Andreas Boehler for releasing the first version of this application * Johan Hendriks provided his user_postfixadmin * Ed Wildgoose for fixing possible SQL injection vulnerability diff --git a/appinfo/info.xml b/appinfo/info.xml index d2b6911..fc26ac3 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -1,14 +1,16 @@ - user_sql - SQL user backend - Authenticate Users by SQL - Authenticate Users by SQL - 2.3.1 + user_sql_2 + SQL user backend 2 + Authenticate users by SQL queries. + Authenticate users by SQL queries. + 1.0.0 agpl - Andreas Boehler <dev (at) aboehler -(dot) at > + Andreas Boehler <dev (at) aboehler (dot) at > user_sql + https://github.com/mlojewski-me/user_sql/issues + https://github.com/mlojewski-me/user_sql + https://raw.githubusercontent.com/mlojewski-me/user_sql/2_v1.0.0/screenshot.png diff --git a/appinfo/update.php b/appinfo/update.php deleted file mode 100644 index c5ae8a2..0000000 --- a/appinfo/update.php +++ /dev/null @@ -1,73 +0,0 @@ - - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE - * License as published by the Free Software Foundation; either - * version 3 of the License, or any later version. - * - * This library 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 AFFERO GENERAL PUBLIC LICENSE for more details. - * - * You should have received a copy of the GNU Affero General Public - * License along with this library. If not, see . - * - */ - -$installedVersion = \OC::$server->getConfig()->getAppValue('user_sql', 'installed_version'); - -$params = array('sql_host' => 'sql_hostname', - 'sql_user' => 'sql_username', - 'sql_database' => 'sql_database', - 'sql_password' => 'sql_password', - 'sql_table' => 'sql_table', - 'sql_column_username' => 'col_username', - 'sql_column_password' => 'col_password', - 'sql_type' => 'sql_driver', - 'sql_column_active' => 'col_active', - 'sql_column_supervisor' => 'supervisor', - 'sql_supervisor' => 'set_supervisor', - 'strip_domain' => 'set_strip_domain', - 'default_domain' => 'set_default_domain', - 'crypt_type' => 'set_crypt_type', - 'sql_column_displayname' => 'col_displayname', - 'allow_password_change' => 'set_allow_pwchange', - 'sql_column_active_invert' => 'set_active_invert', - 'sql_column_email' => 'col_email', - 'mail_sync_mode' => 'set_mail_sync_mode' - ); - -$delParams = array('domain_settings', - 'map_array', - 'domain_array' - ); - -if(version_compare($installedVersion, '1.99', '<')) -{ - foreach($params as $oldPar => $newPar) - { - $val = \OC::$server->getConfig()->getAppValue('user_sql', $oldPar); - if(($oldPar === 'strip_domain') || ($oldPar === 'allow_password_change') || ($oldPar === 'sql_column_active_invert')) - { - if($val) - $val = 'true'; - else - $val = 'false'; - } - if($val) - \OC::$server->getConfig()->setAppValue('user_sql', $newPar.'_default', $val); - \OC::$server->getConfig()->deleteAppValue('user_sql', $oldPar); - } - - foreach($delParams as $param) - { - \OC::$server->getConfig()->deleteAppValue('user_sql', $param); - } -} diff --git a/css/settings.css b/css/settings.css index 8fd2c24..87f19b7 100644 --- a/css/settings.css +++ b/css/settings.css @@ -17,7 +17,8 @@ #sql-3 p label:first-child, #sql-4 p label:first-child, #sql-5 p label:first-child, -#sql-6 p label:first-child { +#sql-6 p label:first-child, +#sql-7 p label:first-child { display: inline-block; text-align: right; width: 300px; diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..fd2ed67420c361a039427b316bc365267cef7acb GIT binary patch literal 24828 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 literal 0 HcmV?d00001