diff --git a/CHANGELOG.md b/CHANGELOG.md index f70c7d8efa..4ee60d21b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add repository export for Subversion ([#1488](https://github.com/scm-manager/scm-manager/pull/1488)) - Provide more options for Helm chart ([#1485](https://github.com/scm-manager/scm-manager/pull/1485)) - Option to create a permanent link to a source file ([#1489](https://github.com/scm-manager/scm-manager/pull/1489)) -- add markdown codeblock renderer extension point ([#1492](https://github.com/scm-manager/scm-manager/pull/1492)) +- Add markdown codeblock renderer extension point ([#1492](https://github.com/scm-manager/scm-manager/pull/1492)) +- Add Java version to plugin center url ([#1494](https://github.com/scm-manager/scm-manager/pull/1494)) ## [2.12.0] - 2020-12-17 ### Added diff --git a/docs/de/user/user/assets/user-create.png b/docs/de/user/user/assets/user-create.png index a7d625c430..50e1b605fc 100644 Binary files a/docs/de/user/user/assets/user-create.png and b/docs/de/user/user/assets/user-create.png differ diff --git a/docs/de/user/user/assets/user-settings-password.png b/docs/de/user/user/assets/user-settings-password.png index ed5bc5aa0e..ff17727a86 100644 Binary files a/docs/de/user/user/assets/user-settings-password.png and b/docs/de/user/user/assets/user-settings-password.png differ diff --git a/docs/de/user/user/assets/user-settings-permissions.png b/docs/de/user/user/assets/user-settings-permissions.png index 40a874f787..b0ee623868 100644 Binary files a/docs/de/user/user/assets/user-settings-permissions.png and b/docs/de/user/user/assets/user-settings-permissions.png differ diff --git a/docs/en/user/user/assets/user-create.png b/docs/en/user/user/assets/user-create.png index eedee01634..f7678ac041 100644 Binary files a/docs/en/user/user/assets/user-create.png and b/docs/en/user/user/assets/user-create.png differ diff --git a/docs/en/user/user/assets/user-settings-password.png b/docs/en/user/user/assets/user-settings-password.png index acaf04876b..457ec4627f 100644 Binary files a/docs/en/user/user/assets/user-settings-password.png and b/docs/en/user/user/assets/user-settings-password.png differ diff --git a/docs/en/user/user/assets/user-settings-permissions.png b/docs/en/user/user/assets/user-settings-permissions.png index fc2ab1b4e3..aa325d3386 100644 Binary files a/docs/en/user/user/assets/user-settings-permissions.png and b/docs/en/user/user/assets/user-settings-permissions.png differ diff --git a/pom.xml b/pom.xml index 78cfd9ff65..899ca76132 100644 --- a/pom.xml +++ b/pom.xml @@ -919,7 +919,7 @@ 3.1.0 2.1.1 - 4.5.8.Final + 4.5.8.SP1 1.19.4 2.12.0 4.2.3 diff --git a/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java b/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java index dfec682665..910fec675c 100644 --- a/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java +++ b/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java @@ -67,7 +67,7 @@ public class ScmConfiguration implements Configuration { * Default plugin url */ public static final String DEFAULT_PLUGINURL = - "https://plugin-center-api.scm-manager.org/api/v1/plugins/{version}?os={os}&arch={arch}"; + "https://plugin-center-api.scm-manager.org/api/v1/plugins/{version}?os={os}&arch={arch}&jre={jre}"; /** * SCM Manager release feed url diff --git a/scm-core/src/main/java/sonia/scm/util/SystemUtil.java b/scm-core/src/main/java/sonia/scm/util/SystemUtil.java index 0b84760e7c..33cda10260 100644 --- a/scm-core/src/main/java/sonia/scm/util/SystemUtil.java +++ b/scm-core/src/main/java/sonia/scm/util/SystemUtil.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.util; //~--- non-JDK imports -------------------------------------------------------- @@ -94,6 +94,10 @@ public final class SystemUtil return platform.getName(); } + public static String getJre() { + return System.getProperty("java.version"); + } + /** * Method description * diff --git a/scm-ui/ui-webapp/public/locales/de/commons.json b/scm-ui/ui-webapp/public/locales/de/commons.json index ae3e757eec..dfba48cd5e 100644 --- a/scm-ui/ui-webapp/public/locales/de/commons.json +++ b/scm-ui/ui-webapp/public/locales/de/commons.json @@ -86,6 +86,7 @@ "error-message": "'me' ist nicht definiert" }, "password": { + "subtitle": "Passwort ändern", "label": "Passwort", "newPassword": "Neues Passwort", "currentPassword": "Aktuelles Passwort", diff --git a/scm-ui/ui-webapp/public/locales/de/permissions.json b/scm-ui/ui-webapp/public/locales/de/permissions.json index 57c061743a..320dec7121 100644 --- a/scm-ui/ui-webapp/public/locales/de/permissions.json +++ b/scm-ui/ui-webapp/public/locales/de/permissions.json @@ -1,6 +1,7 @@ { "setPermissions": { - "button": "Berechtigungen speichern", + "subtitle": "Berechtigungen setzen", + "button": "Berechtigungen setzen", "setPermissionsSuccessful": "Berechtigungen erfolgreich gespeichert" } } diff --git a/scm-ui/ui-webapp/public/locales/de/users.json b/scm-ui/ui-webapp/public/locales/de/users.json index 9925209635..3936edb43b 100644 --- a/scm-ui/ui-webapp/public/locales/de/users.json +++ b/scm-ui/ui-webapp/public/locales/de/users.json @@ -61,6 +61,7 @@ } }, "singleUserPassword": { + "subtitle": "Passwort setzen", "button": "Passwort setzen", "setPasswordSuccessful": "Das Passwort wurde erfolgreich gespeichert." }, diff --git a/scm-ui/ui-webapp/public/locales/en/commons.json b/scm-ui/ui-webapp/public/locales/en/commons.json index 87b08e89d4..f28a746eeb 100644 --- a/scm-ui/ui-webapp/public/locales/en/commons.json +++ b/scm-ui/ui-webapp/public/locales/en/commons.json @@ -87,6 +87,7 @@ "error-message": "'me' is undefined" }, "password": { + "subtitle": "Change Password", "label": "Password", "newPassword": "New Password", "currentPassword": "Current Password", diff --git a/scm-ui/ui-webapp/public/locales/en/permissions.json b/scm-ui/ui-webapp/public/locales/en/permissions.json index 32c7157a51..adca743c20 100644 --- a/scm-ui/ui-webapp/public/locales/en/permissions.json +++ b/scm-ui/ui-webapp/public/locales/en/permissions.json @@ -1,5 +1,6 @@ { "setPermissions": { + "subtitle": "Set Permissions", "button": "Set Permissions", "setPermissionsSuccessful": "Permissions set successfully" } diff --git a/scm-ui/ui-webapp/public/locales/en/users.json b/scm-ui/ui-webapp/public/locales/en/users.json index 9feb0753a6..ca13a6a1c9 100644 --- a/scm-ui/ui-webapp/public/locales/en/users.json +++ b/scm-ui/ui-webapp/public/locales/en/users.json @@ -61,6 +61,7 @@ } }, "singleUserPassword": { + "subtitle": "Set Password", "button": "Set Password", "setPasswordSuccessful": "Password successfully set" }, diff --git a/scm-ui/ui-webapp/src/containers/ChangeUserPassword.tsx b/scm-ui/ui-webapp/src/containers/ChangeUserPassword.tsx index 6193042706..59116dea96 100644 --- a/scm-ui/ui-webapp/src/containers/ChangeUserPassword.tsx +++ b/scm-ui/ui-webapp/src/containers/ChangeUserPassword.tsx @@ -28,7 +28,8 @@ import { Level, Notification, PasswordConfirmation, - SubmitButton + SubmitButton, + Subtitle } from "@scm-manager/ui-components"; import { WithTranslation, withTranslation } from "react-i18next"; import { Me } from "@scm-manager/ui-types"; @@ -55,9 +56,6 @@ class ChangeUserPassword extends React.Component { oldPassword: "", password: "", loading: false, - passwordConfirmationError: false, - validatePasswordError: false, - validatePassword: "", passwordChanged: false, passwordValid: false }; @@ -127,6 +125,7 @@ class ChangeUserPassword extends React.Component { return (
+ {message}
diff --git a/scm-ui/ui-webapp/src/permissions/components/SetPermissions.tsx b/scm-ui/ui-webapp/src/permissions/components/SetPermissions.tsx index 29bdf03803..6b730cc107 100644 --- a/scm-ui/ui-webapp/src/permissions/components/SetPermissions.tsx +++ b/scm-ui/ui-webapp/src/permissions/components/SetPermissions.tsx @@ -25,7 +25,7 @@ import React from "react"; import { connect } from "react-redux"; import { WithTranslation, withTranslation } from "react-i18next"; import { Link } from "@scm-manager/ui-types"; -import { ErrorNotification, Level, Notification, SubmitButton } from "@scm-manager/ui-components"; +import { ErrorNotification, Level, Notification, SubmitButton, Subtitle } from "@scm-manager/ui-components"; import { getLink } from "../../modules/indexResource"; import { loadPermissionsForEntity, setPermissions } from "./handlePermissions"; import PermissionsWrapper from "./PermissionsWrapper"; @@ -134,6 +134,7 @@ class SetPermissions extends React.Component { return ( + {message} {this.renderPermissions()} { this.state = { password: "", loading: false, - passwordConfirmationError: false, - validatePasswordError: false, - validatePassword: "", passwordChanged: false, passwordValid: false }; @@ -85,14 +89,16 @@ class SetUserPassword extends React.Component { const { password } = this.state; this.setLoadingState(); setPassword(user._links.password.href, password) - .then(result => { + .then((result) => { if (result.error) { this.setErrorState(result.error); } else { this.setSuccessfulState(); } }) - .catch(err => {}); + .catch((err) => { + this.setErrorState(err); + }); } }; @@ -116,6 +122,7 @@ class SetUserPassword extends React.Component { return ( + {message} configurationStore = configurationStoreFactory + .withType(ScmConfiguration.class) + .withName("config") + .build(); + configurationStore.getOptional() + .ifPresent(config -> appendJreVersionParameter(configurationStore, config)); + } + + private void appendJreVersionParameter(ConfigurationStore configurationStore, ScmConfiguration config) { + String oldPluginUrl = config.getPluginUrl(); + if (!isEmpty(oldPluginUrl) && oldPluginUrl.contains("?")&& oldPluginUrl.contains("?os={os}")) { + config.setPluginUrl(oldPluginUrl + "&jre={jre}"); + configurationStore.set(config); + } + } + + @Override + public Version getTargetVersion() { + return parse("2.0.1"); + } + + @Override + public String getAffectedDataType() { + return "sonia.scm.plugin-center"; + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/update/plugin/PluginCenterJreVersionUpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/plugin/PluginCenterJreVersionUpdateStepTest.java new file mode 100644 index 0000000000..b744f57dfd --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/update/plugin/PluginCenterJreVersionUpdateStepTest.java @@ -0,0 +1,68 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.update.plugin; + +import org.junit.jupiter.api.Test; +import sonia.scm.config.ScmConfiguration; +import sonia.scm.store.ConfigurationStore; +import sonia.scm.store.InMemoryConfigurationStoreFactory; + +import static org.assertj.core.api.Assertions.assertThat; +import static sonia.scm.config.ScmConfiguration.DEFAULT_PLUGINURL; + +class PluginCenterJreVersionUpdateStepTest { + + InMemoryConfigurationStoreFactory configurationStoreFactory = new InMemoryConfigurationStoreFactory(); + ConfigurationStore configurationStore = configurationStoreFactory.withType(ScmConfiguration.class).withName("config").build(); + + @Test + void shouldKeepCustomPluginCenterUrl() { + String customPluginUrl = "http://some.old/url"; + mockPluginUrl(customPluginUrl); + + new PluginCenterJreVersionUpdateStep(configurationStoreFactory) + .doUpdate(); + + assertThat(configurationStore.get().getPluginUrl()).isEqualTo(customPluginUrl); + } + + @Test + void shouldUpdatePluginCenterUrlsWithQueryParameters() { + String oldDefaultPluginUrl = "https://plugin-center-api.scm-manager.org/api/v1/plugins/{version}?os={os}&arch={arch}"; + mockPluginUrl(oldDefaultPluginUrl); + + new PluginCenterJreVersionUpdateStep(configurationStoreFactory) + .doUpdate(); + + assertThat(configurationStore.get().getPluginUrl()).isEqualTo(DEFAULT_PLUGINURL); + } + + private void mockPluginUrl(String pluginUrl) { + ScmConfiguration scmConfiguration = new ScmConfiguration(); + scmConfiguration.setPluginUrl(pluginUrl); + configurationStore.set(scmConfiguration); + } + +}