mirror of
https://github.com/scm-manager/scm-manager.git
synced 2026-03-05 11:50:58 +01:00
Merge commit '5cb60e49e' into develop
This commit is contained in:
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [2.37.1] - 2022-07-06
|
||||
### Fixed
|
||||
- Encrypt passwords stored via cli commands ([#2080](https://github.com/scm-manager/scm-manager/pull/2080))
|
||||
|
||||
## [2.37.0] - 2022-06-28
|
||||
### Added
|
||||
- Developers can omit the link prop of the CardColumnSmall component ([#2076](https://github.com/scm-manager/scm-manager/pull/2076))
|
||||
@@ -1094,3 +1098,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
[2.36.0]: https://scm-manager.org/download/2.36.0
|
||||
[2.36.1]: https://scm-manager.org/download/2.36.1
|
||||
[2.37.0]: https://scm-manager.org/download/2.37.0
|
||||
[2.37.1]: https://scm-manager.org/download/2.37.1
|
||||
|
||||
@@ -22,5 +22,5 @@
|
||||
# SOFTWARE.
|
||||
#
|
||||
group = sonia.scm
|
||||
version = 2.37.1-SNAPSHOT
|
||||
version = 2.37.2-SNAPSHOT
|
||||
org.gradle.jvmargs=-Xmx1024M
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@scm-manager/scm-git-plugin",
|
||||
"private": true,
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"license": "MIT",
|
||||
"main": "./src/main/js/index.ts",
|
||||
"scripts": {
|
||||
@@ -11,7 +11,7 @@
|
||||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-plugins": "2.37.1-SNAPSHOT"
|
||||
"@scm-manager/ui-plugins": "2.37.2-SNAPSHOT"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@scm-manager/babel-preset": "^2.13.1",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@scm-manager/scm-hg-plugin",
|
||||
"private": true,
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"license": "MIT",
|
||||
"main": "./src/main/js/index.ts",
|
||||
"scripts": {
|
||||
@@ -10,7 +10,7 @@
|
||||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-plugins": "2.37.1-SNAPSHOT"
|
||||
"@scm-manager/ui-plugins": "2.37.2-SNAPSHOT"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@scm-manager/babel-preset": "^2.13.1",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@scm-manager/scm-legacy-plugin",
|
||||
"private": true,
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"license": "MIT",
|
||||
"main": "./src/main/js/index.tsx",
|
||||
"scripts": {
|
||||
@@ -10,7 +10,7 @@
|
||||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-plugins": "2.37.1-SNAPSHOT"
|
||||
"@scm-manager/ui-plugins": "2.37.2-SNAPSHOT"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@scm-manager/babel-preset": "^2.13.1",
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@scm-manager/scm-svn-plugin",
|
||||
"private": true,
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"license": "MIT",
|
||||
"main": "./src/main/js/index.ts",
|
||||
"scripts": {
|
||||
@@ -10,7 +10,7 @@
|
||||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-plugins": "2.37.1-SNAPSHOT"
|
||||
"@scm-manager/ui-plugins": "2.37.2-SNAPSHOT"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@scm-manager/babel-preset": "^2.13.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/e2e-tests",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"description": "End to end Tests for SCM-Manager",
|
||||
"main": "index.js",
|
||||
"author": "Eduard Heimbuch <eduard.heimbuch@cloudogu.com>",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-api",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"description": "React hook api for the SCM-Manager backend",
|
||||
"main": "build/index.js",
|
||||
"module": "build/index.mjs",
|
||||
@@ -29,7 +29,7 @@
|
||||
"tsup": "^5.12.6"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-types": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-types": "2.37.2-SNAPSHOT",
|
||||
"fetch-mock-jest": "^1.5.1",
|
||||
"gitdiff-parser": "^0.2.2",
|
||||
"query-string": "6.14.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-components",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"description": "UI Components for SCM-Manager and its plugins",
|
||||
"main": "src/index.ts",
|
||||
"files": [
|
||||
@@ -25,7 +25,7 @@
|
||||
"@scm-manager/jest-preset": "^2.13.0",
|
||||
"@scm-manager/prettier-config": "^2.10.1",
|
||||
"@scm-manager/tsconfig": "^2.13.0",
|
||||
"@scm-manager/ui-tests": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-tests": "2.37.2-SNAPSHOT",
|
||||
"@storybook/addon-actions": "^6.4.20",
|
||||
"@storybook/addon-essentials": "^6.4.20",
|
||||
"@storybook/addon-interactions": "^6.4.20",
|
||||
@@ -64,9 +64,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@headlessui/react": "^1.4.3",
|
||||
"@scm-manager/ui-api": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-extensions": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-types": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-api": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-extensions": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-types": "2.37.2-SNAPSHOT",
|
||||
"classnames": "^2.2.6",
|
||||
"date-fns": "^2.4.1",
|
||||
"deepmerge": "^4.2.2",
|
||||
@@ -91,8 +91,8 @@
|
||||
"unified": "^9.2.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@scm-manager/ui-syntaxhighlighting": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-text": "2.37.1-SNAPSHOT"
|
||||
"@scm-manager/ui-syntaxhighlighting": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-text": "2.37.2-SNAPSHOT"
|
||||
},
|
||||
"babel": {
|
||||
"presets": [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-extensions",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"license": "MIT",
|
||||
"private": false,
|
||||
"author": "Sebastian Sdorra <sebastian.sdorra@cloudogu.com>",
|
||||
@@ -17,7 +17,7 @@
|
||||
"test": "jest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-types": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-types": "2.37.2-SNAPSHOT",
|
||||
"react": "^17.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-legacy",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"private": true,
|
||||
"main": "build/index.js",
|
||||
"module": "build/index.mjs",
|
||||
@@ -12,9 +12,9 @@
|
||||
"test": "jest --passWithNoTests"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-api": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-extensions": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-types": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-api": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-extensions": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-types": "2.37.2-SNAPSHOT",
|
||||
"react": "^17.0.1",
|
||||
"react-redux": "^5.0.7",
|
||||
"redux": "^4.0.0"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-modules",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"private": true,
|
||||
"main": "build/index.js",
|
||||
"module": "build/index.mjs",
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-plugins",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"ui-plugins": "./bin/ui-plugins.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-components": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-extensions": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-components": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-extensions": "2.37.2-SNAPSHOT",
|
||||
"classnames": "^2.2.6",
|
||||
"query-string": "6.14.1",
|
||||
"react": "^17.0.1",
|
||||
@@ -26,9 +26,9 @@
|
||||
"@scm-manager/plugin-scripts": "^1.2.2",
|
||||
"@scm-manager/prettier-config": "^2.10.1",
|
||||
"@scm-manager/tsconfig": "^2.13.0",
|
||||
"@scm-manager/ui-scripts": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-tests": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-types": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-scripts": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-tests": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-types": "2.37.2-SNAPSHOT",
|
||||
"@types/classnames": "^2.2.9",
|
||||
"@types/enzyme": "^3.10.3",
|
||||
"@types/fetch-mock": "^7.3.1",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-polyfill",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"description": "Polyfills for SCM-Manager UI",
|
||||
"main": "src/index.js",
|
||||
"author": "Sebastian Sdorra <sebastian.sdorra@cloudogu.com>",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-scripts",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"description": "Build scripts for SCM-Manager",
|
||||
"main": "src/index.js",
|
||||
"author": "Sebastian Sdorra <sebastian.sdorra@cloudogu.com>",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-styles",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"description": "Styles for SCM-Manager",
|
||||
"main": "src/scm.scss",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-syntaxhighlighting",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"private": true,
|
||||
"main": "src/index.ts",
|
||||
"scripts": {
|
||||
@@ -13,7 +13,7 @@
|
||||
"depcheck": "depcheck --ignores=@scm-manager/jest-preset,@scm-manager/tsconfig,@storybook/*,webpack"
|
||||
},
|
||||
"dependencies": {
|
||||
"@scm-manager/ui-text": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-text": "2.37.2-SNAPSHOT",
|
||||
"nanoid": "^3.3.2",
|
||||
"react-diff-view": "^2.4.10",
|
||||
"refractor": "^4.5.0"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-tests",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"description": "UI-Tests helpers",
|
||||
"author": "Sebastian Sdorra <sebastian.sdorra@cloudogu.com>",
|
||||
"license": "MIT",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-text",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"private": true,
|
||||
"main": "build/index.js",
|
||||
"module": "build/index.mjs",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-types",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"description": "Typescript types for SCM-Manager related Objects",
|
||||
"main": "src/index.ts",
|
||||
"files": [
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
{
|
||||
"name": "@scm-manager/ui-webapp",
|
||||
"version": "2.37.1-SNAPSHOT",
|
||||
"version": "2.37.2-SNAPSHOT",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@headlessui/react": "^1.4.3",
|
||||
"@scm-manager/ui-api": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-components": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-extensions": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-modules": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-syntaxhighlighting": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-text": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-legacy": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-api": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-components": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-extensions": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-modules": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-syntaxhighlighting": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-text": "2.37.2-SNAPSHOT",
|
||||
"@scm-manager/ui-legacy": "2.37.2-SNAPSHOT",
|
||||
"classnames": "^2.2.5",
|
||||
"history": "^4.10.1",
|
||||
"i18next": "^19.6.0",
|
||||
@@ -37,7 +37,7 @@
|
||||
"devDependencies": {
|
||||
"@scm-manager/eslint-config": "^2.15.1",
|
||||
"@scm-manager/jest-preset": "^2.13.0",
|
||||
"@scm-manager/ui-tests": "2.37.1-SNAPSHOT",
|
||||
"@scm-manager/ui-tests": "2.37.2-SNAPSHOT",
|
||||
"@types/classnames": "^2.2.9",
|
||||
"@types/enzyme": "^3.10.3",
|
||||
"@types/fetch-mock": "^7.3.1",
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
package sonia.scm.user.cli;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import org.apache.shiro.authc.credential.PasswordService;
|
||||
import picocli.CommandLine;
|
||||
import sonia.scm.cli.ParentCommand;
|
||||
import sonia.scm.user.User;
|
||||
@@ -39,6 +40,7 @@ class UserConvertToInternalCommand implements Runnable {
|
||||
@CommandLine.Mixin
|
||||
private final UserTemplateRenderer templateRenderer;
|
||||
private final UserManager manager;
|
||||
private final PasswordService passwordService;
|
||||
|
||||
@CommandLine.Parameters(index = "0", paramLabel = "<username>", descriptionKey = "scm.user.username")
|
||||
private String username;
|
||||
@@ -47,9 +49,10 @@ class UserConvertToInternalCommand implements Runnable {
|
||||
private String password;
|
||||
|
||||
@Inject
|
||||
UserConvertToInternalCommand(UserTemplateRenderer templateRenderer, UserManager manager) {
|
||||
UserConvertToInternalCommand(UserTemplateRenderer templateRenderer, UserManager manager, PasswordService passwordService) {
|
||||
this.templateRenderer = templateRenderer;
|
||||
this.manager = manager;
|
||||
this.passwordService = passwordService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -58,7 +61,7 @@ class UserConvertToInternalCommand implements Runnable {
|
||||
|
||||
if (user != null) {
|
||||
user.setExternal(false);
|
||||
user.setPassword(password);
|
||||
user.setPassword(passwordService.encryptPassword(password));
|
||||
manager.modify(user);
|
||||
templateRenderer.render(user);
|
||||
} else {
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
package sonia.scm.user.cli;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import org.apache.shiro.authc.credential.PasswordService;
|
||||
import picocli.CommandLine;
|
||||
import sonia.scm.cli.CommandValidator;
|
||||
import sonia.scm.cli.ParentCommand;
|
||||
@@ -43,6 +44,7 @@ class UserCreateCommand implements Runnable {
|
||||
@CommandLine.Mixin
|
||||
private final CommandValidator validator;
|
||||
private final UserManager manager;
|
||||
private final PasswordService passwordService;
|
||||
|
||||
@CommandLine.Parameters(index = "0", paramLabel = "<username>", descriptionKey = "scm.user.username")
|
||||
private String username;
|
||||
@@ -66,10 +68,11 @@ class UserCreateCommand implements Runnable {
|
||||
@Inject
|
||||
public UserCreateCommand(UserTemplateRenderer templateRenderer,
|
||||
CommandValidator validator,
|
||||
UserManager manager) {
|
||||
UserManager manager, PasswordService passwordService) {
|
||||
this.templateRenderer = templateRenderer;
|
||||
this.validator = validator;
|
||||
this.manager = manager;
|
||||
this.passwordService = passwordService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -84,7 +87,7 @@ class UserCreateCommand implements Runnable {
|
||||
if (password == null) {
|
||||
templateRenderer.renderPasswordError();
|
||||
}
|
||||
newUser.setPassword(password);
|
||||
newUser.setPassword(passwordService.encryptPassword(password));
|
||||
newUser.setActive(!inactive);
|
||||
} else {
|
||||
if (inactive) {
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
package sonia.scm.user.cli;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import org.apache.shiro.authc.credential.PasswordService;
|
||||
import picocli.CommandLine;
|
||||
import sonia.scm.cli.CommandValidator;
|
||||
import sonia.scm.cli.ParentCommand;
|
||||
@@ -43,6 +44,7 @@ class UserModifyCommand implements Runnable {
|
||||
@CommandLine.Mixin
|
||||
private final CommandValidator validator;
|
||||
private final UserManager manager;
|
||||
private final PasswordService passwordService;
|
||||
|
||||
@CommandLine.Parameters(index = "0", paramLabel = "<username>", descriptionKey = "scm.user.username")
|
||||
private String username;
|
||||
@@ -58,10 +60,11 @@ class UserModifyCommand implements Runnable {
|
||||
private String password;
|
||||
|
||||
@Inject
|
||||
UserModifyCommand(UserTemplateRenderer templateRenderer, CommandValidator validator, UserManager manager) {
|
||||
UserModifyCommand(UserTemplateRenderer templateRenderer, CommandValidator validator, UserManager manager, PasswordService passwordService) {
|
||||
this.templateRenderer = templateRenderer;
|
||||
this.validator = validator;
|
||||
this.manager = manager;
|
||||
this.passwordService = passwordService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -78,7 +81,7 @@ class UserModifyCommand implements Runnable {
|
||||
user.setMail(email);
|
||||
}
|
||||
if (password != null) {
|
||||
user.setPassword(password);
|
||||
user.setPassword(passwordService.encryptPassword(password));
|
||||
}
|
||||
manager.modify(user);
|
||||
templateRenderer.render(user);
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
package sonia.scm.user.cli;
|
||||
|
||||
import org.apache.shiro.authc.credential.PasswordService;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -49,12 +50,14 @@ class UserConvertToInternalCommandTest {
|
||||
|
||||
@Mock
|
||||
private UserManager manager;
|
||||
@Mock
|
||||
private PasswordService passwordService;
|
||||
|
||||
private UserConvertToInternalCommand command;
|
||||
|
||||
@BeforeEach
|
||||
void initCommand() {
|
||||
command = new UserConvertToInternalCommand(testRenderer.getTemplateRenderer(), manager);
|
||||
command = new UserConvertToInternalCommand(testRenderer.getTemplateRenderer(), manager, passwordService);
|
||||
}
|
||||
|
||||
@Nested
|
||||
@@ -73,7 +76,10 @@ class UserConvertToInternalCommandTest {
|
||||
|
||||
@Test
|
||||
void shouldActivateInternalUser() {
|
||||
command.setPassword("havelock123");
|
||||
String password = "havelock123";
|
||||
String enc_password = "enc_havelock123";
|
||||
when(passwordService.encryptPassword(password)).thenReturn(enc_password);
|
||||
command.setPassword(password);
|
||||
|
||||
command.run();
|
||||
|
||||
@@ -81,7 +87,7 @@ class UserConvertToInternalCommandTest {
|
||||
assertThat(argument.getName()).isEqualTo("havelock");
|
||||
assertThat(argument.getDisplayName()).isEqualTo("Havelock Vetinari");
|
||||
assertThat(argument.isExternal()).isFalse();
|
||||
assertThat(argument.getPassword()).isEqualTo("havelock123");
|
||||
assertThat(argument.getPassword()).isEqualTo(enc_password);
|
||||
assertThat(argument.getMail()).isEqualTo("havelock.vetinari@discworld");
|
||||
assertThat(argument.isActive()).isTrue();
|
||||
return true;
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
package sonia.scm.user.cli;
|
||||
|
||||
import org.apache.shiro.authc.credential.PasswordService;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -40,6 +41,7 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -53,16 +55,20 @@ class UserCreateCommandTest {
|
||||
private CommandValidator validator;
|
||||
@Mock
|
||||
private UserManager manager;
|
||||
@Mock
|
||||
private PasswordService passwordService;
|
||||
|
||||
private UserCreateCommand command;
|
||||
|
||||
@BeforeEach
|
||||
void initCommand() {
|
||||
command = new UserCreateCommand(testRenderer.getTemplateRenderer(), validator, manager);
|
||||
command = new UserCreateCommand(testRenderer.getTemplateRenderer(), validator, manager, passwordService);
|
||||
}
|
||||
|
||||
@Nested
|
||||
class ForSuccessfulCreationTest {
|
||||
private static final String PASSWORD = "patrician";
|
||||
private static final String ENC_PASSWORD = "enc_patrician";
|
||||
|
||||
@BeforeEach
|
||||
void mockCreation() {
|
||||
@@ -76,6 +82,7 @@ class UserCreateCommandTest {
|
||||
command.setUsername("havelock");
|
||||
command.setDisplayName("Havelock Vetinari");
|
||||
command.setEmail("havelock.vetinari@discworld");
|
||||
lenient().when(passwordService.encryptPassword(PASSWORD)).thenReturn(ENC_PASSWORD);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -88,7 +95,7 @@ class UserCreateCommandTest {
|
||||
assertThat(argument.getName()).isEqualTo("havelock");
|
||||
assertThat(argument.getDisplayName()).isEqualTo("Havelock Vetinari");
|
||||
assertThat(argument.isExternal()).isFalse();
|
||||
assertThat(argument.getPassword()).isEqualTo("patrician");
|
||||
assertThat(argument.getPassword()).isEqualTo(ENC_PASSWORD);
|
||||
assertThat(argument.getMail()).isEqualTo("havelock.vetinari@discworld");
|
||||
assertThat(argument.isActive()).isTrue();
|
||||
return true;
|
||||
@@ -114,7 +121,7 @@ class UserCreateCommandTest {
|
||||
|
||||
@Test
|
||||
void shouldCreateInactiveUser() {
|
||||
command.setPassword("patrician");
|
||||
command.setPassword(PASSWORD);
|
||||
command.setInactive(true);
|
||||
|
||||
command.run();
|
||||
@@ -123,7 +130,7 @@ class UserCreateCommandTest {
|
||||
assertThat(argument.getName()).isEqualTo("havelock");
|
||||
assertThat(argument.getDisplayName()).isEqualTo("Havelock Vetinari");
|
||||
assertThat(argument.isExternal()).isFalse();
|
||||
assertThat(argument.getPassword()).isEqualTo("patrician");
|
||||
assertThat(argument.getPassword()).isEqualTo(ENC_PASSWORD);
|
||||
assertThat(argument.getMail()).isEqualTo("havelock.vetinari@discworld");
|
||||
assertThat(argument.isActive()).isFalse();
|
||||
return true;
|
||||
@@ -133,7 +140,7 @@ class UserCreateCommandTest {
|
||||
@Test
|
||||
void shouldPrintUserAfterCreationInEnglish() {
|
||||
testRenderer.setLocale("en");
|
||||
command.setPassword("patrician");
|
||||
command.setPassword(PASSWORD);
|
||||
|
||||
command.run();
|
||||
|
||||
@@ -153,7 +160,7 @@ class UserCreateCommandTest {
|
||||
@Test
|
||||
void shouldPrintUserAfterCreationInGerman() {
|
||||
testRenderer.setLocale("de");
|
||||
command.setPassword("patrician");
|
||||
command.setPassword(PASSWORD);
|
||||
|
||||
command.run();
|
||||
|
||||
@@ -169,6 +176,23 @@ class UserCreateCommandTest {
|
||||
);
|
||||
assertThat(testRenderer.getStdErr()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldEncryptPassword() {
|
||||
command.setPassword(PASSWORD);
|
||||
|
||||
command.run();
|
||||
|
||||
verify(manager).create(argThat(argument -> {
|
||||
assertThat(argument.getName()).isEqualTo("havelock");
|
||||
assertThat(argument.getDisplayName()).isEqualTo("Havelock Vetinari");
|
||||
assertThat(argument.isExternal()).isFalse();
|
||||
assertThat(argument.getPassword()).isEqualTo(ENC_PASSWORD);
|
||||
assertThat(argument.getMail()).isEqualTo("havelock.vetinari@discworld");
|
||||
assertThat(argument.isActive()).isTrue();
|
||||
return true;
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
@Nested
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
package sonia.scm.user.cli;
|
||||
|
||||
import org.apache.shiro.authc.credential.PasswordService;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -40,6 +41,7 @@ import static org.junit.jupiter.api.Assertions.*;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.Mockito.doThrow;
|
||||
import static org.mockito.Mockito.lenient;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
@@ -53,16 +55,20 @@ class UserModifyCommandTest {
|
||||
private CommandValidator validator;
|
||||
@Mock
|
||||
private UserManager manager;
|
||||
@Mock
|
||||
private PasswordService passwordService;
|
||||
|
||||
private UserModifyCommand command;
|
||||
|
||||
@BeforeEach
|
||||
void initCommand() {
|
||||
command = new UserModifyCommand(testRenderer.getTemplateRenderer(), validator, manager);
|
||||
command = new UserModifyCommand(testRenderer.getTemplateRenderer(), validator, manager, passwordService);
|
||||
}
|
||||
|
||||
@Nested
|
||||
class ForSuccessfulModificationTest {
|
||||
private static final String NEW_PASSWORD = "havelock";
|
||||
private static final String NEW_ENC_PASSWORD = "enc_havelock";
|
||||
|
||||
@BeforeEach
|
||||
void mockGet() {
|
||||
@@ -73,13 +79,14 @@ class UserModifyCommandTest {
|
||||
user.setCreationDate(1649262000000L);
|
||||
user.setLastModified(1649272000000L);
|
||||
when(manager.get(any())).thenReturn(user);
|
||||
lenient().when(passwordService.encryptPassword(NEW_PASSWORD)).thenReturn(NEW_ENC_PASSWORD);
|
||||
}
|
||||
|
||||
@Test
|
||||
void shouldModifyUser() {
|
||||
command.setDisplayName("Lord Vetinari");
|
||||
command.setEmail("patrician@discworld");
|
||||
command.setPassword("havelock");
|
||||
command.setPassword(NEW_PASSWORD);
|
||||
|
||||
command.run();
|
||||
|
||||
@@ -87,7 +94,7 @@ class UserModifyCommandTest {
|
||||
assertThat(argument.getName()).isEqualTo("havelock");
|
||||
assertThat(argument.getDisplayName()).isEqualTo("Lord Vetinari");
|
||||
assertThat(argument.isExternal()).isFalse();
|
||||
assertThat(argument.getPassword()).isEqualTo("havelock");
|
||||
assertThat(argument.getPassword()).isEqualTo(NEW_ENC_PASSWORD);
|
||||
assertThat(argument.getMail()).isEqualTo("patrician@discworld");
|
||||
assertThat(argument.isActive()).isTrue();
|
||||
return true;
|
||||
@@ -97,7 +104,7 @@ class UserModifyCommandTest {
|
||||
@Test
|
||||
void shouldNotModifyDisplayNameIfNotSet() {
|
||||
command.setEmail("patrician@discworld");
|
||||
command.setPassword("havelock");
|
||||
command.setPassword(NEW_PASSWORD);
|
||||
|
||||
command.run();
|
||||
|
||||
@@ -105,7 +112,7 @@ class UserModifyCommandTest {
|
||||
assertThat(argument.getName()).isEqualTo("havelock");
|
||||
assertThat(argument.getDisplayName()).isEqualTo("Havelock Vetinari");
|
||||
assertThat(argument.isExternal()).isFalse();
|
||||
assertThat(argument.getPassword()).isEqualTo("havelock");
|
||||
assertThat(argument.getPassword()).isEqualTo(NEW_ENC_PASSWORD);
|
||||
assertThat(argument.getMail()).isEqualTo("patrician@discworld");
|
||||
assertThat(argument.isActive()).isTrue();
|
||||
return true;
|
||||
@@ -115,7 +122,7 @@ class UserModifyCommandTest {
|
||||
@Test
|
||||
void shouldNotModifyEmailIfNotSet() {
|
||||
command.setDisplayName("Lord Vetinari");
|
||||
command.setPassword("havelock");
|
||||
command.setPassword(NEW_PASSWORD);
|
||||
|
||||
command.run();
|
||||
|
||||
@@ -123,7 +130,7 @@ class UserModifyCommandTest {
|
||||
assertThat(argument.getName()).isEqualTo("havelock");
|
||||
assertThat(argument.getDisplayName()).isEqualTo("Lord Vetinari");
|
||||
assertThat(argument.isExternal()).isFalse();
|
||||
assertThat(argument.getPassword()).isEqualTo("havelock");
|
||||
assertThat(argument.getPassword()).isEqualTo(NEW_ENC_PASSWORD);
|
||||
assertThat(argument.getMail()).isEqualTo("havelock.vetinari@discworld");
|
||||
assertThat(argument.isActive()).isTrue();
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user