Merge branch 'release/v4.0.0-rc2'

This commit is contained in:
Marcin Łojewski
2018-06-14 19:28:26 +02:00
10 changed files with 40 additions and 6 deletions

View File

@@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
## [v4.0.0-rc2]
### Added
- User active column
### Changed
- Fixed "Use of undefined constant" error for Argon2 Crypt with PHP below 7.2.
## [4.0.0-rc1] ## [4.0.0-rc1]
### Added ### Added
- New hashing algorithms: Argon2 Crypt (PHP 7.2 and above), Blowfish Crypt, Courier base64-encoded MD5, Courier base64-encoded SHA1, - New hashing algorithms: Argon2 Crypt (PHP 7.2 and above), Blowfish Crypt, Courier base64-encoded MD5, Courier base64-encoded SHA1,
@@ -58,5 +65,6 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
### Changed ### Changed
- Supported version of ownCloud, Nextcloud: ownCloud 10, Nextcloud 12 - Supported version of ownCloud, Nextcloud: ownCloud 10, Nextcloud 12
[v4.0.0-rc2]: https://github.com/nextcloud/user_sql/compare/v4.0.0-rc1...v4.0.0-rc2
[4.0.0-rc1]: https://github.com/nextcloud/user_sql/compare/v3.1.0...v4.0.0-rc1 [4.0.0-rc1]: https://github.com/nextcloud/user_sql/compare/v3.1.0...v4.0.0-rc1
[3.1.0]: https://github.com/nextcloud/user_sql/compare/v2.4.0...v3.1.0 [3.1.0]: https://github.com/nextcloud/user_sql/compare/v2.4.0...v3.1.0

View File

@@ -67,6 +67,7 @@ Name | Description | Details
**Home** | Home path column. | Mandatory for `Query` *Home sync* option. **Home** | Home path column. | Mandatory for `Query` *Home sync* option.
**Password** | Password hash column. | Mandatory for user backend. **Password** | Password hash column. | Mandatory for user backend.
**Display name** | Display name column. | Optional. **Display name** | Display name column. | Optional.
**Active** | Flag indicating if user can log in. | Optional.<br/>Default: true.
**Can change avatar** | Flag indicating if user can change its avatar. | Optional.<br/>Default: false. **Can change avatar** | Flag indicating if user can change its avatar. | Optional.<br/>Default: false.
#### Group table #### Group table
@@ -112,6 +113,7 @@ CREATE TABLE sql_users
email TEXT NULL, email TEXT NULL,
home TEXT NULL, home TEXT NULL,
password TEXT NOT NULL, password TEXT NOT NULL,
active TINYINT(1) NOT NULL DEFAULT '1',
can_change_avatar BOOLEAN NOT NULL DEFAULT FALSE, can_change_avatar BOOLEAN NOT NULL DEFAULT FALSE,
CONSTRAINT users_username_uindex UNIQUE (username) CONSTRAINT users_username_uindex UNIQUE (username)
); );
@@ -161,6 +163,7 @@ User table: jhi_users
Username column: login Username column: login
Password column: password_hash Password column: password_hash
Email column: email Email column: email
Active column: activated
Hashing algorithm: Unix (Crypt) Hashing algorithm: Unix (Crypt)
``` ```

View File

@@ -8,7 +8,7 @@
Retrieve the users and groups info. Allow the users to change their passwords. Retrieve the users and groups info. Allow the users to change their passwords.
Sync the users' email addresses with the addresses stored by Nextcloud. Sync the users' email addresses with the addresses stored by Nextcloud.
</description> </description>
<version>4.0.0-rc1</version> <version>4.0.0-rc2</version>
<licence>agpl</licence> <licence>agpl</licence>
<author>Andreas Böhler &lt;dev (at) aboehler (dot) at&gt;</author> <author>Andreas Böhler &lt;dev (at) aboehler (dot) at&gt;</author>
<author>Marcin Łojewski &lt;dev@mlojewski.me&gt;</author> <author>Marcin Łojewski &lt;dev@mlojewski.me&gt;</author>

View File

@@ -75,7 +75,7 @@ user_sql.adminSettingsUI = function () {
); );
autocomplete( autocomplete(
"#db-table-user-column-uid, #db-table-user-column-email, #db-table-user-column-home, #db-table-user-column-password, #db-table-user-column-name, #db-table-user-column-avatar", "#db-table-user-column-uid, #db-table-user-column-email, #db-table-user-column-home, #db-table-user-column-password, #db-table-user-column-name, #db-table-user-column-active, #db-table-user-column-avatar",
"/apps/user_sql/settings/autocomplete/table/user" "/apps/user_sql/settings/autocomplete/table/user"
); );

View File

@@ -278,6 +278,14 @@ final class UserBackend extends Backend
$password, $user->password $password, $user->password
); );
if ($user->active == false) {
$this->logger->info(
"User account is inactive for user: $uid",
["app" => $this->appName]
);
return false;
}
if ($isCorrect !== true) { if ($isCorrect !== true) {
$this->logger->info( $this->logger->info(
"Invalid password attempt for user: $uid", "Invalid password attempt for user: $uid",

View File

@@ -45,6 +45,7 @@ final class DB
const USER_GROUP_GID_COLUMN = "db.table.user_group.column.gid"; const USER_GROUP_GID_COLUMN = "db.table.user_group.column.gid";
const USER_GROUP_UID_COLUMN = "db.table.user_group.column.uid"; const USER_GROUP_UID_COLUMN = "db.table.user_group.column.uid";
const USER_ACTIVE_COLUMN = "db.table.user.column.active";
const USER_AVATAR_COLUMN = "db.table.user.column.avatar"; const USER_AVATAR_COLUMN = "db.table.user.column.avatar";
const USER_EMAIL_COLUMN = "db.table.user.column.email"; const USER_EMAIL_COLUMN = "db.table.user.column.email";
const USER_HOME_COLUMN = "db.table.user.column.home"; const USER_HOME_COLUMN = "db.table.user.column.home";

View File

@@ -54,15 +54,22 @@ class CryptArgon2 extends AbstractAlgorithm
* @param int $threads Number of threads to use for computing. * @param int $threads Number of threads to use for computing.
*/ */
public function __construct( public function __construct(
IL10N $localization, IL10N $localization, $memoryCost = -1, $timeCost = -1, $threads = -1
$memoryCost = PASSWORD_ARGON2_DEFAULT_MEMORY_COST,
$timeCost = PASSWORD_ARGON2_DEFAULT_TIME_COST,
$threads = PASSWORD_ARGON2_DEFAULT_THREADS
) { ) {
if (version_compare(PHP_VERSION, "7.2.0") === -1) { if (version_compare(PHP_VERSION, "7.2.0") === -1) {
throw new \RuntimeException( throw new \RuntimeException(
"PASSWORD_ARGON2I requires PHP 7.2.0 or above." "PASSWORD_ARGON2I requires PHP 7.2.0 or above."
); );
} else {
if ($memoryCost === -1) {
$memoryCost = PASSWORD_ARGON2_DEFAULT_MEMORY_COST;
}
if ($timeCost === -1) {
$timeCost = PASSWORD_ARGON2_DEFAULT_TIME_COST;
}
if ($threads === -1) {
$threads = PASSWORD_ARGON2_DEFAULT_THREADS;
}
} }
parent::__construct($localization); parent::__construct($localization);

View File

@@ -48,6 +48,10 @@ class User
* @var string The user's home location. * @var string The user's home location.
*/ */
public $home; public $home;
/**
* @var bool Is user account active.
*/
public $active;
/** /**
* @var bool Can user change its avatar. * @var bool Can user change its avatar.
*/ */

View File

@@ -65,6 +65,7 @@ class QueryProvider implements \ArrayAccess
$gGID = $this->properties[DB::GROUP_GID_COLUMN]; $gGID = $this->properties[DB::GROUP_GID_COLUMN];
$gName = $this->properties[DB::GROUP_NAME_COLUMN]; $gName = $this->properties[DB::GROUP_NAME_COLUMN];
$uActive = $this->properties[DB::USER_ACTIVE_COLUMN];
$uAvatar = $this->properties[DB::USER_AVATAR_COLUMN]; $uAvatar = $this->properties[DB::USER_AVATAR_COLUMN];
$uEmail = $this->properties[DB::USER_EMAIL_COLUMN]; $uEmail = $this->properties[DB::USER_EMAIL_COLUMN];
$uHome = $this->properties[DB::USER_HOME_COLUMN]; $uHome = $this->properties[DB::USER_HOME_COLUMN];
@@ -90,6 +91,7 @@ class QueryProvider implements \ArrayAccess
(empty($uName) ? "null" : $uName) . " AS name, " . (empty($uName) ? "null" : $uName) . " AS name, " .
(empty($uEmail) ? "null" : $uEmail) . " AS email, " . (empty($uEmail) ? "null" : $uEmail) . " AS email, " .
(empty($uHome) ? "null" : $uHome) . " AS home, " . (empty($uHome) ? "null" : $uHome) . " AS home, " .
(empty($uActive) ? "true" : $uActive) . " AS active, " .
(empty($uAvatar) ? "false" : $uAvatar) . " AS avatar"; (empty($uAvatar) ? "false" : $uAvatar) . " AS avatar";
$this->queries = [ $this->queries = [

View File

@@ -147,6 +147,7 @@ function print_select_options(
print_text_input($l, "db-table-user-column-home", "Home", $_['db.table.user.column.home']); print_text_input($l, "db-table-user-column-home", "Home", $_['db.table.user.column.home']);
print_text_input($l, "db-table-user-column-password", "Password", $_['db.table.user.column.password']); print_text_input($l, "db-table-user-column-password", "Password", $_['db.table.user.column.password']);
print_text_input($l, "db-table-user-column-name", "Display name", $_['db.table.user.column.name']); print_text_input($l, "db-table-user-column-name", "Display name", $_['db.table.user.column.name']);
print_text_input($l, "db-table-user-column-active", "Active", $_['db.table.user.column.active']);
print_text_input($l, "db-table-user-column-avatar", "Can change avatar", $_['db.table.user.column.avatar']); ?> print_text_input($l, "db-table-user-column-avatar", "Can change avatar", $_['db.table.user.column.avatar']); ?>
</fieldset> </fieldset>
</div> </div>