From 63ec4e6172864de6da1a2c5b6b96fcc7fc5033df Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Wed, 19 Jan 2022 11:58:55 +0100 Subject: [PATCH] Add security notifications to inform about vulnerabilities (#1924) Add security notifications in SCM-Manager to inform running instances about known security issues. These alerts can be core or plugin specific and will be shown to every user in the header. Co-authored-by: Matthias Thieroff Co-authored-by: Philipp Ahrendt Co-authored-by: Sebastian Sdorra --- .../groovy/com/cloudogu/scm/RunTask.groovy | 11 +- docs/de/user/alerts/assets/alerts-list.png | Bin 0 -> 50264 bytes docs/de/user/alerts/assets/alerts.png | Bin 0 -> 85523 bytes docs/de/user/alerts/index.md | 15 + docs/en/user/alerts/assets/alerts-list.png | Bin 0 -> 54478 bytes docs/en/user/alerts/assets/alerts.png | Bin 0 -> 84906 bytes docs/en/user/alerts/index.md | 17 ++ gradle/changelog/alerts.yaml | 2 + .../java/sonia/scm/BasicContextProvider.java | 25 ++ .../java/sonia/scm/SCMContextProvider.java | 11 + .../sonia/scm/config/ScmConfiguration.java | 43 ++- .../main/java/sonia/scm/web/VndMediaType.java | 2 + .../sonia/scm/BasicContextProviderTest.java | 40 +++ .../java/sonia/scm/web/RestDispatcher.java | 6 +- scm-ui/ui-api/src/alerts.ts | 107 +++++++ scm-ui/ui-api/src/config.test.ts | 1 + scm-ui/ui-api/src/index.ts | 1 + scm-ui/ui-types/src/Alerts.ts | 41 +++ scm-ui/ui-types/src/Config.ts | 1 + scm-ui/ui-types/src/index.ts | 1 + .../ui-webapp/public/locales/de/commons.json | 3 + .../ui-webapp/public/locales/de/config.json | 2 + .../ui-webapp/public/locales/en/commons.json | 3 + .../ui-webapp/public/locales/en/config.json | 2 + .../src/admin/components/form/ConfigForm.tsx | 4 +- .../admin/components/form/GeneralSettings.tsx | 20 +- .../src/components/HeaderDropDown.tsx | 206 +++++++++++++ scm-ui/ui-webapp/src/containers/Alerts.tsx | 142 +++++++++ .../src/containers/NavigationBar.tsx | 3 + .../src/containers/Notifications.tsx | 180 +++--------- .../ui-webapp/src/containers/OmniSearch.tsx | 17 +- .../scm/api/v2/resources/AlertsResource.java | 205 +++++++++++++ .../sonia/scm/api/v2/resources/ConfigDto.java | 1 + .../api/v2/resources/IndexDtoGenerator.java | 4 + .../scm/api/v2/resources/ResourceLinks.java | 19 ++ .../scm/api/v2/resources/UpdateConfigDto.java | 8 + .../java/sonia/scm/plugin/ExplodedSmp.java | 11 + .../sonia/scm/plugin/PluginProcessor.java | 8 +- .../java/sonia/scm/plugin/PluginTree.java | 105 +++---- .../api/v2/resources/AlertsResourceTest.java | 254 ++++++++++++++++ ...ScmConfigurationToConfigDtoMapperTest.java | 6 +- .../java/sonia/scm/plugin/PluginTreeTest.java | 272 +++++------------- 42 files changed, 1379 insertions(+), 420 deletions(-) create mode 100644 docs/de/user/alerts/assets/alerts-list.png create mode 100644 docs/de/user/alerts/assets/alerts.png create mode 100644 docs/de/user/alerts/index.md create mode 100644 docs/en/user/alerts/assets/alerts-list.png create mode 100644 docs/en/user/alerts/assets/alerts.png create mode 100644 docs/en/user/alerts/index.md create mode 100644 gradle/changelog/alerts.yaml create mode 100644 scm-ui/ui-api/src/alerts.ts create mode 100644 scm-ui/ui-types/src/Alerts.ts create mode 100644 scm-ui/ui-webapp/src/components/HeaderDropDown.tsx create mode 100644 scm-ui/ui-webapp/src/containers/Alerts.tsx create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/AlertsResource.java create mode 100644 scm-webapp/src/test/java/sonia/scm/api/v2/resources/AlertsResourceTest.java diff --git a/build-plugins/src/main/groovy/com/cloudogu/scm/RunTask.groovy b/build-plugins/src/main/groovy/com/cloudogu/scm/RunTask.groovy index 6d31211cf3..64f3b35d3b 100644 --- a/build-plugins/src/main/groovy/com/cloudogu/scm/RunTask.groovy +++ b/build-plugins/src/main/groovy/com/cloudogu/scm/RunTask.groovy @@ -102,13 +102,22 @@ class RunTask extends DefaultTask { } private Closure createBackend() { + Map scmProperties = System.getProperties().findAll { e -> { + return e.key.startsWith("scm") || e.key.startsWith("sonia") + }} + + def runProperties = new HashMap(scmProperties) + runProperties.put("user.home", extension.getHome()) + runProperties.put("scm.initialPassword", "scmadmin") + runProperties.put("scm.workingCopyPoolStrategy", "sonia.scm.repository.work.SimpleCachingWorkingCopyPool") + return { project.javaexec { mainClass.set(ScmServer.name) args(new File(project.buildDir, 'server/config.json').toString()) environment 'NODE_ENV', 'development' classpath project.buildscript.configurations.classpath - systemProperties = ["user.home": extension.getHome(), "scm.initialPassword": "scmadmin", "scm.workingCopyPoolStrategy": "sonia.scm.repository.work.SimpleCachingWorkingCopyPool"] + systemProperties = runProperties if (debugJvm) { debug = true debugOptions { diff --git a/docs/de/user/alerts/assets/alerts-list.png b/docs/de/user/alerts/assets/alerts-list.png new file mode 100644 index 0000000000000000000000000000000000000000..e4c0340fb28d11d27c2e1703cd2d16e68a904240 GIT binary patch literal 50264 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Ð_Cv5cz0W#a6Lfv=aasN)O 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 literal 0 HcmV?d00001 diff --git a/docs/de/user/alerts/index.md b/docs/de/user/alerts/index.md new file mode 100644 index 0000000000..fbd5fe3821 --- /dev/null +++ b/docs/de/user/alerts/index.md @@ -0,0 +1,15 @@ +--- +title: Alerts +--- + +Alerts informieren im SCM-Manager über sicherheitskritische Fehler. + +Aktuelle sicherheitskritische Meldungen werden mit einem Schild links neben dem Suchfeld im Kopf des SCM-Managers angezeigt. Eine hochgestellte Zahl zeigt die Anzahl der Alerts. Wenn keine Alerts für die verwendete Version des SCM-Managers bekannt sind, wird das Icon nicht angezeigt. + +![alerts in head](assets/alerts.png) + +Hovern oder Klicken des Schildes öffnet die Liste der Alerts. Die einzelnen Alerts sind in Regel mit weiterführenden Informationen zur Sicherheitslücke oder Fixes verlinkt. + +![alerts in head](assets/alerts-list.png) + +Alerts verschwinden, sobald die Ursache z.B. durch ein Versionsupgrade behoben ist. diff --git a/docs/en/user/alerts/assets/alerts-list.png b/docs/en/user/alerts/assets/alerts-list.png new file mode 100644 index 0000000000000000000000000000000000000000..afd27cbfbafbc3591acc2a9207d3980df40d3f62 GIT binary patch literal 54478 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 MdO_02VPg%_= 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 M1C!c9 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 literal 0 HcmV?d00001 diff --git a/docs/en/user/alerts/assets/alerts.png b/docs/en/user/alerts/assets/alerts.png new file mode 100644 index 0000000000000000000000000000000000000000..229940da60f3a3413971a4a724f0fe9fac8e6716 GIT binary patch literal 84906 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 APyhe` literal 0 HcmV?d00001 diff --git a/docs/en/user/alerts/index.md b/docs/en/user/alerts/index.md new file mode 100644 index 0000000000..d548f84f15 --- /dev/null +++ b/docs/en/user/alerts/index.md @@ -0,0 +1,17 @@ +--- +title: Alerts +--- + +Alerts are used in SCM-Manager to alarm users and administrators to vulnerabilities in SCM-Manager. + +Current alerts are indicated by a shield icon with a number to the left of the search box in the header of SCM-Manager. The number indicates the number of issues. If there are no known vulnerabilities for the installed version SCM-Manager the icon will not be displayed. + +![alerts in head](assets/alerts.png) + +Hovering or clicking the shield icon opens a list of issues. Issues are linked to a related resource. This resource usually describes the vulnerability and steps to address the issue. + +![alerts in head](assets/alerts-list.png) + +Alerts are removed as soon as the issue is resolved in your instance, e.g. by upgrading to a fixed version. + + diff --git a/gradle/changelog/alerts.yaml b/gradle/changelog/alerts.yaml new file mode 100644 index 0000000000..7da4d4f88b --- /dev/null +++ b/gradle/changelog/alerts.yaml @@ -0,0 +1,2 @@ +- type: added + description: Security notifications to inform the running instance about known security issues ([#1924](https://github.com/scm-manager/scm-manager/pull/1924)) diff --git a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java index 34deb7e552..e0cccecdfe 100644 --- a/scm-core/src/main/java/sonia/scm/BasicContextProvider.java +++ b/scm-core/src/main/java/sonia/scm/BasicContextProvider.java @@ -28,14 +28,18 @@ package sonia.scm; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; +import com.google.common.io.Files; +import sonia.scm.util.IOUtil; import sonia.scm.util.Util; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.nio.charset.StandardCharsets; import java.nio.file.Path; import java.util.Locale; import java.util.Properties; +import java.util.UUID; //~--- JDK imports ------------------------------------------------------------ @@ -95,6 +99,7 @@ public class BasicContextProvider implements SCMContextProvider baseDirectory = findBaseDirectory(); version = determineVersion(); stage = loadProjectStage(); + instanceId = readOrCreateInstanceId(); } catch (Exception ex) { @@ -166,6 +171,11 @@ public class BasicContextProvider implements SCMContextProvider return version; } + @Override + public String getInstanceId() { + return instanceId; + } + //~--- methods -------------------------------------------------------------- /** @@ -275,6 +285,18 @@ public class BasicContextProvider implements SCMContextProvider return properties.getProperty(MAVEN_PROPERTY_VERSION, VERSION_DEFAULT); } + private String readOrCreateInstanceId() throws IOException { + File configDirectory = new File(baseDirectory, "config"); + IOUtil.mkdirs(configDirectory); + File instanceIdFile = new File(configDirectory, ".instance-id"); + if (instanceIdFile.exists()) { + return Files.asCharSource(instanceIdFile, StandardCharsets.UTF_8).read(); + } + String uuid = UUID.randomUUID().toString(); + Files.asCharSink(instanceIdFile, StandardCharsets.UTF_8).write(uuid); + return uuid; + } + //~--- fields --------------------------------------------------------------- /** The base directory of the SCM-Manager */ @@ -288,4 +310,7 @@ public class BasicContextProvider implements SCMContextProvider /** the version of the SCM-Manager */ private String version; + + /** the instance id of the SCM-Manager */ + private String instanceId; } diff --git a/scm-core/src/main/java/sonia/scm/SCMContextProvider.java b/scm-core/src/main/java/sonia/scm/SCMContextProvider.java index 7723f35a3a..4c0b3a9268 100644 --- a/scm-core/src/main/java/sonia/scm/SCMContextProvider.java +++ b/scm-core/src/main/java/sonia/scm/SCMContextProvider.java @@ -30,6 +30,7 @@ import sonia.scm.version.Version; import java.io.File; import java.nio.file.Path; +import java.util.UUID; import static java.lang.String.format; @@ -99,4 +100,14 @@ public interface SCMContextProvider { Version parsedVersion = Version.parse(getVersion()); return format("%s.%s.x", parsedVersion.getMajor(), parsedVersion.getMinor()); } + + /** + * Returns the instance id of the SCM-Manager used. + * + * @return instance id of the SCM-Manager + * @since 2.30.0 + */ + default String getInstanceId() { + return UUID.randomUUID().toString(); + } } 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 72d1a0e8b1..72a14521da 100644 --- a/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java +++ b/scm-core/src/main/java/sonia/scm/config/ScmConfiguration.java @@ -71,11 +71,20 @@ public class ScmConfiguration implements Configuration { /** * Default url for plugin center authentication. + * * @since 2.28.0 */ public static final String DEFAULT_PLUGIN_AUTH_URL = "https://plugin-center-api.scm-manager.org/api/v1/auth/oidc"; + /** + * SCM Manager alerts url. + * + * @since 2.30.0 + */ + public static final String DEFAULT_ALERTS_URL = + "https://alerts.scm-manager.org/api/v1/alerts"; + /** * SCM Manager release feed url */ @@ -164,6 +173,14 @@ public class ScmConfiguration implements Configuration { @XmlElement(name = "plugin-auth-url") private String pluginAuthUrl = DEFAULT_PLUGIN_AUTH_URL; + /** + * Url of the alerts api. + * + * @since 2.30.0 + */ + @XmlElement(name = "alerts-url") + private String alertsUrl = DEFAULT_ALERTS_URL; + @XmlElement(name = "release-feed-url") private String releaseFeedUrl = DEFAULT_RELEASE_FEED_URL; @@ -247,7 +264,7 @@ public class ScmConfiguration implements Configuration { /** * Load all properties from another {@link ScmConfiguration} object. * - * @param other + * @param other {@link ScmConfiguration} to load from */ public void load(ScmConfiguration other) { this.realmDescription = other.realmDescription; @@ -270,6 +287,7 @@ public class ScmConfiguration implements Configuration { this.enabledXsrfProtection = other.enabledXsrfProtection; this.namespaceStrategy = other.namespaceStrategy; this.loginInfoUrl = other.loginInfoUrl; + this.alertsUrl = other.alertsUrl; this.releaseFeedUrl = other.releaseFeedUrl; this.mailDomainName = other.mailDomainName; this.emergencyContacts = other.emergencyContacts; @@ -332,6 +350,7 @@ public class ScmConfiguration implements Configuration { /** * Returns the url which is used for plugin center authentication. + * * @return authentication url * @since 2.28.0 */ @@ -341,6 +360,7 @@ public class ScmConfiguration implements Configuration { /** * Returns {@code true} if the default plugin auth url is used. + * * @return {@code true} if the default plugin auth url is used * @since 2.28.0 */ @@ -348,6 +368,16 @@ public class ScmConfiguration implements Configuration { return DEFAULT_PLUGIN_AUTH_URL.equals(pluginAuthUrl); } + /** + * Returns the url of the alerts api. + * + * @return the alerts url. + * @since 2.30.0 + */ + public String getAlertsUrl() { + return alertsUrl; + } + /** * Returns the url of the rss release feed. * @@ -574,6 +604,7 @@ public class ScmConfiguration implements Configuration { /** * Set the url for plugin center authentication. + * * @param pluginAuthUrl authentication url * @since 2.28.0 */ @@ -581,6 +612,16 @@ public class ScmConfiguration implements Configuration { this.pluginAuthUrl = pluginAuthUrl; } + /** + * Set the url for the alerts api. + * + * @param alertsUrl alerts url + * @since 2.30.0 + */ + public void setAlertsUrl(String alertsUrl) { + this.alertsUrl = alertsUrl; + } + public void setReleaseFeedUrl(String releaseFeedUrl) { this.releaseFeedUrl = releaseFeedUrl; } diff --git a/scm-core/src/main/java/sonia/scm/web/VndMediaType.java b/scm-core/src/main/java/sonia/scm/web/VndMediaType.java index 75ff8957c4..a7c94d4e8a 100644 --- a/scm-core/src/main/java/sonia/scm/web/VndMediaType.java +++ b/scm-core/src/main/java/sonia/scm/web/VndMediaType.java @@ -98,6 +98,8 @@ public class VndMediaType { public static final String NOTIFICATION_COLLECTION = PREFIX + "notificationCollection" + SUFFIX; + public static final String ALERTS_REQUEST = PREFIX + "alertsRequest" + SUFFIX; + public static final String QUERY_RESULT = PREFIX + "queryResult" + SUFFIX; public static final String SEARCHABLE_TYPE_COLLECTION = PREFIX + "searchableTypeCollection" + SUFFIX; diff --git a/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java b/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java index babba7dd3d..4810ddb1d9 100644 --- a/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java +++ b/scm-core/src/test/java/sonia/scm/BasicContextProviderTest.java @@ -24,6 +24,7 @@ package sonia.scm; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -91,4 +92,43 @@ class BasicContextProviderTest { } + @Nested + class InstanceIdTests { + + private String originalProperty; + + @BeforeEach + void setUp() { + originalProperty = System.getProperty(BasicContextProvider.DIRECTORY_PROPERTY); + } + + @AfterEach + void tearDown() { + if (originalProperty != null) { + System.setProperty(BasicContextProvider.DIRECTORY_PROPERTY, originalProperty); + } + } + + @Test + void shouldReturnInstanceId(@TempDir Path baseDirectory) { + System.setProperty(BasicContextProvider.DIRECTORY_PROPERTY, baseDirectory.toString()); + BasicContextProvider provider = new BasicContextProvider(); + + assertThat(provider.getInstanceId()).isNotBlank(); + } + + @Test + void shouldReturnPersistedInstanceId(@TempDir Path baseDirectory) { + System.setProperty(BasicContextProvider.DIRECTORY_PROPERTY, baseDirectory.toString()); + BasicContextProvider provider = new BasicContextProvider(); + + String firstInstanceId = provider.getInstanceId(); + + provider = new BasicContextProvider(); + + assertThat(provider.getInstanceId()).isEqualTo(firstInstanceId); + } + + } + } diff --git a/scm-test/src/main/java/sonia/scm/web/RestDispatcher.java b/scm-test/src/main/java/sonia/scm/web/RestDispatcher.java index bba3ef8304..fd5bad67e4 100644 --- a/scm-test/src/main/java/sonia/scm/web/RestDispatcher.java +++ b/scm-test/src/main/java/sonia/scm/web/RestDispatcher.java @@ -43,6 +43,7 @@ import sonia.scm.NotFoundException; import sonia.scm.ScmConstraintViolationException; import javax.ws.rs.Produces; +import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import javax.ws.rs.ext.ContextResolver; @@ -111,13 +112,16 @@ public class RestDispatcher { } private Integer getStatus(Exception ex) { + if (ex instanceof WebApplicationException) { + return ((WebApplicationException) ex).getResponse().getStatus(); + } return statusCodes .entrySet() .stream() .filter(e -> e.getKey().isAssignableFrom(ex.getClass())) .map(Map.Entry::getValue) .findAny() - .orElse(handleUnknownException(ex)); + .orElseGet(() -> handleUnknownException(ex)); } private Integer handleUnknownException(Exception ex) { diff --git a/scm-ui/ui-api/src/alerts.ts b/scm-ui/ui-api/src/alerts.ts new file mode 100644 index 0000000000..f7be8f92c8 --- /dev/null +++ b/scm-ui/ui-api/src/alerts.ts @@ -0,0 +1,107 @@ +/* + * 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. + */ + +import { useQuery } from "react-query"; +import { apiClient } from "./apiclient"; +import { ApiResult, useIndexLink } from "./base"; +import { AlertsResponse, HalRepresentation, Link } from "@scm-manager/ui-types"; + +type AlertRequest = HalRepresentation & { + checksum: string; + body: unknown; +}; + +type LocalStorageAlerts = AlertsResponse & { + checksum: string; +}; + +const alertsFromStorage = (): LocalStorageAlerts | undefined => { + const item = localStorage.getItem("alerts"); + if (item) { + return JSON.parse(item); + } +}; + +const fetchAlerts = (request: AlertRequest) => { + const url = (request._links["alerts"] as Link)?.href; + if (!url) { + throw new Error("no alerts link defined"); + } + return fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json" + }, + body: JSON.stringify(request.body) + }) + .then(response => { + if (!response.ok) { + throw new Error("Failed to fetch alerts"); + } + return response; + }) + .then(response => response.json()) + .then((data: AlertsResponse) => { + const storageItem: LocalStorageAlerts = { + ...data, + checksum: request.checksum + }; + localStorage.setItem("alerts", JSON.stringify(storageItem)); + return data; + }); +}; + +const restoreOrFetch = (request: AlertRequest): Promise => { + const storedAlerts = alertsFromStorage(); + if (!storedAlerts || storedAlerts.checksum !== request.checksum) { + return fetchAlerts(request); + } + return Promise.resolve(storedAlerts); +}; + +export const useAlerts = (): ApiResult => { + const link = useIndexLink("alerts"); + const { data, error, isLoading } = useQuery( + "alerts", + () => { + if (!link) { + throw new Error("Could not find alert link"); + } + return apiClient + .get(link) + .then(response => response.json()) + .then(restoreOrFetch); + }, + { + enabled: !!link, + staleTime: Infinity + } + ); + + return { + data, + error, + isLoading + }; +}; diff --git a/scm-ui/ui-api/src/config.test.ts b/scm-ui/ui-api/src/config.test.ts index 2b1f7311a0..8b3bbb66c4 100644 --- a/scm-ui/ui-api/src/config.test.ts +++ b/scm-ui/ui-api/src/config.test.ts @@ -57,6 +57,7 @@ describe("Test config hooks", () => { proxyServer: "", proxyUser: null, realmDescription: "", + alertsUrl: "", releaseFeedUrl: "", skipFailedAuthenticators: false, _links: { diff --git a/scm-ui/ui-api/src/index.ts b/scm-ui/ui-api/src/index.ts index 5ca6572913..aa058f1453 100644 --- a/scm-ui/ui-api/src/index.ts +++ b/scm-ui/ui-api/src/index.ts @@ -51,6 +51,7 @@ export * from "./sources"; export * from "./import"; export * from "./diff"; export * from "./notifications"; +export * from "./alerts"; export * from "./configLink"; export * from "./apiKeys"; export * from "./publicKeys"; diff --git a/scm-ui/ui-types/src/Alerts.ts b/scm-ui/ui-types/src/Alerts.ts new file mode 100644 index 0000000000..498ee890a1 --- /dev/null +++ b/scm-ui/ui-types/src/Alerts.ts @@ -0,0 +1,41 @@ +/* + * 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. + */ + +export type Alert = { + title: string; + description: string; + link?: string; + issuedAt: string; + affectedVersions?: string; +}; + +export type PluginAlerts = { + name: string; + alerts: Alert[]; +}; + +export type AlertsResponse = { + alerts?: Alert[]; + plugins?: PluginAlerts[]; +}; diff --git a/scm-ui/ui-types/src/Config.ts b/scm-ui/ui-types/src/Config.ts index dce8616fd1..8d94d83aa2 100644 --- a/scm-ui/ui-types/src/Config.ts +++ b/scm-ui/ui-types/src/Config.ts @@ -49,6 +49,7 @@ export type Config = HalRepresentation & { enabledUserConverter: boolean; namespaceStrategy: string; loginInfoUrl: string; + alertsUrl: string; releaseFeedUrl: string; mailDomainName: string; emergencyContacts: string[]; diff --git a/scm-ui/ui-types/src/index.ts b/scm-ui/ui-types/src/index.ts index 535aaab5a1..5f7ac49caa 100644 --- a/scm-ui/ui-types/src/index.ts +++ b/scm-ui/ui-types/src/index.ts @@ -67,6 +67,7 @@ export * from "./Admin"; export * from "./Diff"; export * from "./Notifications"; +export * from "./Alerts"; export * from "./ApiKeys"; export * from "./PublicKeys"; export * from "./GlobalPermissions"; diff --git a/scm-ui/ui-webapp/public/locales/de/commons.json b/scm-ui/ui-webapp/public/locales/de/commons.json index eaba13c63b..1d06c46cbd 100644 --- a/scm-ui/ui-webapp/public/locales/de/commons.json +++ b/scm-ui/ui-webapp/public/locales/de/commons.json @@ -164,6 +164,9 @@ "dismiss": "Löschen", "dismissAll": "Alle löschen" }, + "alerts": { + "shieldTitle": "Alerts" + }, "cardColumnGroup": { "showContent": "Inhalt einblenden", "hideContent": "Inhalt ausblenden" diff --git a/scm-ui/ui-webapp/public/locales/de/config.json b/scm-ui/ui-webapp/public/locales/de/config.json index f3056f2940..394a956e44 100644 --- a/scm-ui/ui-webapp/public/locales/de/config.json +++ b/scm-ui/ui-webapp/public/locales/de/config.json @@ -67,6 +67,7 @@ "off": "Deaktivieren" }, "skip-failed-authenticators": "Fehlgeschlagene Authentifizierer überspringen", + "alerts-url": "Alerts URL", "release-feed-url": "Release Feed URL", "mail-domain-name": "Fallback E-Mail Domain Name", "enabled-xsrf-protection": "XSRF Protection aktivieren", @@ -92,6 +93,7 @@ "dateFormatHelpText": "Moments Datumsformat. Zulässige Formate sind in der MomentJS Dokumentation beschrieben.", "pluginUrlHelpText": "Die URL der Plugin Center API. Beschreibung der Platzhalter: version = SCM-Manager Version; os = Betriebssystem; arch = Architektur", "pluginAuthUrlHelpText": "Die URL der Plugin Center Authentifizierungs API.", + "alertsUrlHelpText": "Die URL der Alerts API. Darüber wird über Alerts die Ihr System betreffen informiert. Um diese Funktion zu deaktivieren lassen Sie dieses Feld leer.", "releaseFeedUrlHelpText": "Die URL des RSS Release Feed des SCM-Manager. Darüber wird über die neue SCM-Manager Version informiert. Um diese Funktion zu deaktivieren lassen Sie dieses Feld leer.", "mailDomainNameHelpText": "Dieser Domain Name wird genutzt, wenn für einen User eine E-Mail-Adresse benötigt wird, für den keine hinterlegt ist. Diese Domain wird nicht zum Versenden von E-Mails genutzt und auch keine anderweitige Verbindung aufgebaut.", "enableForwardingHelpText": "mod_proxy Port Weiterleitung aktivieren.", diff --git a/scm-ui/ui-webapp/public/locales/en/commons.json b/scm-ui/ui-webapp/public/locales/en/commons.json index 323344d967..4611c1b0b7 100644 --- a/scm-ui/ui-webapp/public/locales/en/commons.json +++ b/scm-ui/ui-webapp/public/locales/en/commons.json @@ -165,6 +165,9 @@ "dismiss": "Dismiss", "dismissAll": "Dismiss all" }, + "alerts": { + "shieldTitle": "Alerts" + }, "cardColumnGroup": { "showContent": "Show content", "hideContent": "Hide content" diff --git a/scm-ui/ui-webapp/public/locales/en/config.json b/scm-ui/ui-webapp/public/locales/en/config.json index 7a18d41a71..e6d19a6d35 100644 --- a/scm-ui/ui-webapp/public/locales/en/config.json +++ b/scm-ui/ui-webapp/public/locales/en/config.json @@ -67,6 +67,7 @@ "off": "Disabled" }, "skip-failed-authenticators": "Skip Failed Authenticators", + "alerts-url": "Alerts URL", "release-feed-url": "Release Feed URL", "mail-domain-name": "Fallback Mail Domain Name", "enabled-xsrf-protection": "Enabled XSRF Protection", @@ -92,6 +93,7 @@ "dateFormatHelpText": "Moments date format. Please have a look at the MomentJS documentation.", "pluginUrlHelpText": "The url of the Plugin Center API. Explanation of the placeholders: version = SCM-Manager Version; os = Operation System; arch = Architecture", "pluginAuthUrlHelpText": "The url of the Plugin Center authentication API.", + "alertsUrlHelpText": "The url of the alerts api. This provides up-to-date alerts regarding your system. To disable this feature just leave the url blank.", "releaseFeedUrlHelpText": "The url of the RSS Release Feed for SCM-Manager. This provides up-to-date version information. To disable this feature just leave the url blank.", "mailDomainNameHelpText": "This domain name will be used to create email addresses for users without one when needed. It will not be used to send mails nor will be accessed otherwise.", "enableForwardingHelpText": "Enable mod_proxy port forwarding.", diff --git a/scm-ui/ui-webapp/src/admin/components/form/ConfigForm.tsx b/scm-ui/ui-webapp/src/admin/components/form/ConfigForm.tsx index 6cef88cd61..63f55a2fa4 100644 --- a/scm-ui/ui-webapp/src/admin/components/form/ConfigForm.tsx +++ b/scm-ui/ui-webapp/src/admin/components/form/ConfigForm.tsx @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -import React, { FC, useState, useEffect, FormEvent } from "react"; +import React, { FC, FormEvent, useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Config, ConfigChangeHandler, NamespaceStrategies } from "@scm-manager/ui-types"; import { Level, Notification, SubmitButton } from "@scm-manager/ui-components"; @@ -72,6 +72,7 @@ const ConfigForm: FC = ({ enabledUserConverter: false, namespaceStrategy: "", loginInfoUrl: "", + alertsUrl: "", releaseFeedUrl: "", mailDomainName: "", emergencyContacts: [], @@ -144,6 +145,7 @@ const ConfigForm: FC = ({ dateFormat={innerConfig.dateFormat} anonymousMode={innerConfig.anonymousMode} skipFailedAuthenticators={innerConfig.skipFailedAuthenticators} + alertsUrl={innerConfig.alertsUrl} releaseFeedUrl={innerConfig.releaseFeedUrl} mailDomainName={innerConfig.mailDomainName} enabledXsrfProtection={innerConfig.enabledXsrfProtection} diff --git a/scm-ui/ui-webapp/src/admin/components/form/GeneralSettings.tsx b/scm-ui/ui-webapp/src/admin/components/form/GeneralSettings.tsx index 178ef2130b..ad5f2de91b 100644 --- a/scm-ui/ui-webapp/src/admin/components/form/GeneralSettings.tsx +++ b/scm-ui/ui-webapp/src/admin/components/form/GeneralSettings.tsx @@ -24,12 +24,12 @@ import React, { FC } from "react"; import { useTranslation } from "react-i18next"; import { useUserSuggestions } from "@scm-manager/ui-api"; -import { NamespaceStrategies, AnonymousMode, SelectValue, ConfigChangeHandler } from "@scm-manager/ui-types"; +import { AnonymousMode, ConfigChangeHandler, NamespaceStrategies, SelectValue } from "@scm-manager/ui-types"; import { + AutocompleteAddEntryToTableField, Checkbox, InputField, MemberNameTagGroup, - AutocompleteAddEntryToTableField, Select } from "@scm-manager/ui-components"; import NamespaceStrategySelect from "./NamespaceStrategySelect"; @@ -41,6 +41,7 @@ type Props = { dateFormat: string; anonymousMode: AnonymousMode; skipFailedAuthenticators: boolean; + alertsUrl: string; releaseFeedUrl: string; mailDomainName: string; enabledXsrfProtection: boolean; @@ -57,6 +58,7 @@ const GeneralSettings: FC = ({ realmDescription, loginInfoUrl, anonymousMode, + alertsUrl, releaseFeedUrl, mailDomainName, enabledXsrfProtection, @@ -89,6 +91,9 @@ const GeneralSettings: FC = ({ const handleNamespaceStrategyChange = (value: string) => { onChange(true, value, "namespaceStrategy"); }; + const handleAlertsUrlChange = (value: string) => { + onChange(true, value, "alertsUrl"); + }; const handleReleaseFeedUrlChange = (value: string) => { onChange(true, value, "releaseFeedUrl"); }; @@ -207,7 +212,16 @@ const GeneralSettings: FC = ({
-
+
+ +
+
` + min-width: 35rem; + + @media screen and (max-width: ${devices.desktop.width}px) { + min-width: 30rem; + } + + @media screen and (max-width: ${devices.tablet.width}px) { + min-width: 25rem; + } + + @media screen and (max-width: ${devices.mobile.width}px) { + min-width: 20rem; + ${props => + props.mobilePosition === "right" && + css` + right: -1.5rem; + left: auto; + `}; + + } + + @media screen and (max-width: ${devices.desktop.width - 1}px) { + margin-right: 1rem; + } + + @media screen and (min-width: ${devices.desktop.width}px) { + right: 0; + left: auto; + } + + &:before { + position: absolute; + content: ""; + pointer-events: none; + height: 0; + width: 0; + top: -7px; // top padding of dropdown-menu + border-spacing + transform-origin: center; + transform: rotate(135deg); + + @media screen and (max-width: ${devices.desktop.width - 1}px) { + left: 1.3rem; + } + + @media screen and (min-width: ${devices.desktop.width}px) { + right: 1.3rem; + } + + ${props => + props.mobilePosition === "right" && + css` + @media screen and (max-width: ${devices.mobile.width}px) { + left: auto; + right: 1.75rem; + } + `}; + } +`; + +export const Table = styled.table` + border-collapse: collapse; +`; + +export const Column = styled.td` + vertical-align: middle !important; +`; + +export const NonWrappingColumn = styled(Column)` + white-space: nowrap; +`; + +const DropdownMenuContainer: FC = ({ children }) => ( +
{children}
+); + +const ErrorBox: FC<{ error?: Error | null }> = ({ error }) => { + if (!error) { + return null; + } + return ( + + + + ); +}; + +const LoadingBox: FC = () => ( +
+ +
+); + +const IconContainer = styled.div` + width: 2rem; + height: 2rem; +`; + +type CounterProps = { + count: string; +}; + +const Counter = styled.span` + position: absolute; + top: -0.75rem; + right: ${props => (props.count.length <= 1 ? "-0.25" : "-0.50")}rem; +`; + +type IconWrapperProps = { + icon: React.ReactNode; + count?: string; +}; + +const IconWrapper: FC = ({ icon, count }) => ( + + {icon} + {count ? {count} : null} + +); + +type Props = DropDownMenuProps & { + className?: string; + icon: React.ReactNode; + count?: string; + error?: Error | null; + isLoading?: boolean; +}; + +const DropDownTrigger = styled.div` + padding: 0.65rem 0.75rem; +`; + +const HeaderDropDown: FC = ({ className, icon, count, error, isLoading, mobilePosition, children }) => { + const [open, setOpen] = useState(false); + + useEffect(() => { + const close = () => setOpen(false); + window.addEventListener("click", close); + return () => window.removeEventListener("click", close); + }, []); + + return ( + <> +
e.stopPropagation()} + > + setOpen(o => !o)} + > + + + + + {isLoading ? : null} + {children} + +
+ + ); +}; + +export default HeaderDropDown; diff --git a/scm-ui/ui-webapp/src/containers/Alerts.tsx b/scm-ui/ui-webapp/src/containers/Alerts.tsx new file mode 100644 index 0000000000..7b16ddcc68 --- /dev/null +++ b/scm-ui/ui-webapp/src/containers/Alerts.tsx @@ -0,0 +1,142 @@ +/* + * 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. + */ + +import React, { FC } from "react"; +import { useTranslation } from "react-i18next"; +import classNames from "classnames"; +import styled from "styled-components"; +import { Alert } from "@scm-manager/ui-types"; +import { DateFromNow, Icon } from "@scm-manager/ui-components"; +import { useAlerts } from "@scm-manager/ui-api"; +import HeaderDropDown, { Column, NonWrappingColumn, Table } from "../components/HeaderDropDown"; + +const FullHeightTable = styled(Table)` + height: 100%; +`; + +const RightColumn = styled(NonWrappingColumn)` + height: 100%; +`; + +type EntryProps = { + alert: ComponentAlert; +}; + +const AlertsEntry: FC = ({ alert }) => { + const navigateTo = () => { + if (alert.link) { + window.open(alert.link)?.focus(); + } + }; + + return ( + + +

{alert.title}

+

{alert.description}

+
+ +
+

+ {alert.component} {alert.affectedVersions} +

+ +
+
+ + ); +}; + +type Props = { + data: ComponentAlert[]; +}; + +const AlertsList: FC = ({ data }) => ( +
+ + + {data.map((a, i) => ( + + ))} + + +
+); + +const ShieldNotificationIcon: FC = () => { + const [t] = useTranslation("commons"); + return ; +}; + +type ComponentAlert = Alert & { + component: string; +}; + +const useFlattenedAlerts = () => { + const { data, error } = useAlerts(); + + if (data) { + const flattenedAlerts: ComponentAlert[] = data.alerts?.map(a => ({ ...a, component: "core" })) || []; + data.plugins?.forEach(p => flattenedAlerts.push(...(p.alerts || []).map(a => ({ ...a, component: p.name })))); + flattenedAlerts.sort((a, b) => { + if (new Date(a.issuedAt) < new Date(b.issuedAt)) { + return 1; + } + return -1; + }); + return { + data: flattenedAlerts, + error + }; + } + + return { + data, + error + }; +}; + +type AlertsProps = { + className?: string; +}; + +const Alerts: FC = ({ className }) => { + const { data, error } = useFlattenedAlerts(); + if ((!data || data.length === 0) && !error) { + return null; + } + return ( + } + count={data ? data.length.toString() : "?"} + error={error} + className={className} + mobilePosition="right" + > + {data ? : null} + + ); +}; + +export default Alerts; diff --git a/scm-ui/ui-webapp/src/containers/NavigationBar.tsx b/scm-ui/ui-webapp/src/containers/NavigationBar.tsx index d6d528fc6a..9ab844b13f 100644 --- a/scm-ui/ui-webapp/src/containers/NavigationBar.tsx +++ b/scm-ui/ui-webapp/src/containers/NavigationBar.tsx @@ -21,6 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ + import React, { FC, useEffect, useState } from "react"; import { Links } from "@scm-manager/ui-types"; import classNames from "classnames"; @@ -31,6 +32,7 @@ import OmniSearch from "./OmniSearch"; import LogoutButton from "./LogoutButton"; import LoginButton from "./LoginButton"; import { useTranslation } from "react-i18next"; +import Alerts from "./Alerts"; const StyledMenuBar = styled.div` background-color: transparent !important; @@ -147,6 +149,7 @@ const NavigationBar: FC = ({ links }) => {
+
diff --git a/scm-ui/ui-webapp/src/containers/Notifications.tsx b/scm-ui/ui-webapp/src/containers/Notifications.tsx index abdbfa226b..a21e34c5d2 100644 --- a/scm-ui/ui-webapp/src/containers/Notifications.tsx +++ b/scm-ui/ui-webapp/src/containers/Notifications.tsx @@ -21,8 +21,9 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -import React, { FC, useEffect, useState } from "react"; -import { useHistory, Link } from "react-router-dom"; + +import React, { FC } from "react"; +import { Link, useHistory } from "react-router-dom"; import { useTranslation } from "react-i18next"; import classNames from "classnames"; import styled from "styled-components"; @@ -35,60 +36,15 @@ import { import { Notification, NotificationCollection } from "@scm-manager/ui-types"; import { Button, - Notification as InfoNotification, + DateFromNow, ErrorNotification, Icon, + Notification as InfoNotification, ToastArea, ToastNotification, - ToastType, - Loading, - DateFromNow, - devices + ToastType } from "@scm-manager/ui-components"; - -const DropDownMenu = styled.div` - min-width: 35rem; - - @media screen and (max-width: ${devices.mobile.width}px) { - min-width: 20rem; - } - - @media screen and (max-width: ${devices.desktop.width - 1}px) { - margin-right: 1rem; - } - - @media screen and (min-width: ${devices.desktop.width}px) { - right: 0; - left: auto; - } - - &:before { - position: absolute; - content: ""; - pointer-events: none; - height: 0; - width: 0; - top: -7px; // top padding of dropdown-menu + border-spacing - transform-origin: center; - transform: rotate(135deg); - - @media screen and (max-width: ${devices.desktop.width - 1}px) { - left: 1.3rem; - } - - @media screen and (min-width: ${devices.desktop.width}px) { - right: 1.3rem; - } - } -`; - -const VerticalCenteredTd = styled.td` - vertical-align: middle !important; -`; - -const DateColumn = styled(VerticalCenteredTd)` - white-space: nowrap; -`; +import HeaderDropDown, { Column, NonWrappingColumn, Table } from "../components/HeaderDropDown"; const DismissColumn = styled.td` vertical-align: middle !important; @@ -115,23 +71,17 @@ const NotificationEntry: FC = ({ notification, removeToast }) => { } return ( - history.push(notification.link)} className="is-clickable"> + history.push(notification.link)} className="is-clickable"> - - + + - - + + {isLoading ? (
) : ( - + )} @@ -153,7 +103,7 @@ const ClearEntry: FC = ({ notifications, clearToasts }) => { return (
-
@@ -164,18 +114,18 @@ const NotificationList: FC = ({ data, clear, remove }) => { const [t] = useTranslation("commons"); const clearLink = data._links.clear; - const all = [...data._embedded.notifications].reverse(); + const all = [...(data._embedded?.notifications || [])].reverse(); const top = all.slice(0, 6); return (
- +
{top.map((n, i) => ( ))} -
+ {all.length > 6 ? (

{t("notifications.xMore", { count: all.length - 6 })} @@ -207,7 +157,7 @@ type Props = { const NotificationDropDown: FC = ({ data, remove, clear }) => ( <> - {data._embedded.notifications.length > 0 ? ( + {(data._embedded?.notifications.length ?? 0) > 0 ? ( ) : ( @@ -260,61 +210,29 @@ const NotificationSubscription: FC = ({ notifications, remove ); }; -const BellNotificationContainer = styled.div` - width: 2rem; - height: 2rem; -`; - -type NotificationCounterProps = { - count: number; -}; - -const NotificationCounter = styled.span` - position: absolute; - top: -0.5rem; - right: ${props => (props.count < 10 ? "0" : "-0.25")}rem; -`; - type BellNotificationIconProps = { data?: NotificationCollection; - onClick: () => void; }; -const BellNotificationIcon: FC = ({ data, onClick }) => { +const BellNotificationIcon: FC = ({ data }) => { const [t] = useTranslation("commons"); - const counter = data?._embedded.notifications.length || 0; + const counter = data?._embedded?.notifications.length || 0; return ( - - - {counter > 0 ? {counter < 100 ? counter : "∞"} : null} - + ); }; -const LoadingBox: FC = () => ( -

- -
-); - -const ErrorBox: FC<{ error: Error | null }> = ({ error }) => { - if (!error) { - return null; +const count = (data?: NotificationCollection) => { + const counter = data?._embedded?.notifications.length || 0; + if (counter !== 0) { + return counter < 100 ? counter.toString() : "∞"; } - return ( - - - - ); }; type NotificationProps = { @@ -325,37 +243,19 @@ const Notifications: FC = ({ className }) => { const { data, isLoading, error, refetch } = useNotifications(); const { notifications, remove, clear } = useNotificationSubscription(refetch, data); - const [open, setOpen] = useState(false); - useEffect(() => { - const close = () => setOpen(false); - window.addEventListener("click", close); - return () => window.removeEventListener("click", close); - }, []); - return ( <> -
e.stopPropagation()} + } + count={count(data)} + mobilePosition="left" > -
- setOpen(o => !o)} /> -
- - - {isLoading ? : null} - {data ? : null} - -
+ {data ? : null} + ); }; diff --git a/scm-ui/ui-webapp/src/containers/OmniSearch.tsx b/scm-ui/ui-webapp/src/containers/OmniSearch.tsx index 35b8c8f607..a311dfad19 100644 --- a/scm-ui/ui-webapp/src/containers/OmniSearch.tsx +++ b/scm-ui/ui-webapp/src/containers/OmniSearch.tsx @@ -28,7 +28,14 @@ import { useSearch } from "@scm-manager/ui-api"; import classNames from "classnames"; import { Link, useHistory, useLocation } from "react-router-dom"; import { useTranslation } from "react-i18next"; -import { Button, HitProps, Notification, RepositoryAvatar, useStringHitFieldValue } from "@scm-manager/ui-components"; +import { + Button, + devices, + HitProps, + Notification, + RepositoryAvatar, + useStringHitFieldValue +} from "@scm-manager/ui-components"; import SyntaxHelp from "../search/SyntaxHelp"; import SyntaxModal from "../search/SyntaxModal"; import SearchErrorNotification from "../search/SearchErrorNotification"; @@ -83,6 +90,12 @@ const ResultFooter = styled.div` border-top: 1px solid lightgray; `; +const SearchInput = styled(Input)` + @media screen and (max-width: ${devices.mobile.width}px) { + width: 9rem; + } +`; + const AvatarSection: FC = ({ hit }) => { const namespace = useStringHitFieldValue(hit, "namespace"); const name = useStringHitFieldValue(hit, "name"); @@ -366,7 +379,7 @@ const OmniSearch: FC = () => { >
- dateSupplier; + + @Inject + public AlertsResource(SCMContextProvider scmContextProvider, ScmConfiguration scmConfiguration, PluginLoader pluginLoader) { + this(scmContextProvider, scmConfiguration, pluginLoader, () -> LocalDateTime.now().format(FORMATTER)); + } + + @VisibleForTesting + AlertsResource(SCMContextProvider scmContextProvider, ScmConfiguration scmConfiguration, PluginLoader pluginLoader, Supplier dateSupplier) { + this.scmContextProvider = scmContextProvider; + this.scmConfiguration = scmConfiguration; + this.pluginLoader = pluginLoader; + this.dateSupplier = dateSupplier; + } + + @GET + @Path("") + @Produces(VndMediaType.ALERTS_REQUEST) + @Operation( + summary = "Alerts", + description = "Returns url and body prepared for the alert service", + tags = "Alerts", + operationId = "alerts_get_request" + ) + @ApiResponse( + responseCode = "200", + description = "success", + content = @Content( + mediaType = VndMediaType.ALERTS_REQUEST, + schema = @Schema(implementation = HalRepresentation.class) + ) + ) + @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") + @ApiResponse( + responseCode = "500", + description = "internal server error", + content = @Content( + mediaType = VndMediaType.ERROR_TYPE, + schema = @Schema(implementation = ErrorDto.class) + )) + public AlertsRequest getAlertsRequest(@Context UriInfo uriInfo) throws IOException { + if (Strings.isNullOrEmpty(scmConfiguration.getAlertsUrl())) { + throw new WebApplicationException("Alerts disabled", Response.Status.CONFLICT); + } + + String instanceId = scmContextProvider.getInstanceId(); + String version = scmContextProvider.getVersion(); + String os = SystemUtil.getOS(); + String arch = SystemUtil.getArch(); + String jre = SystemUtil.getJre(); + + List plugins = pluginLoader.getInstalledPlugins().stream() + .map(p -> p.getDescriptor().getInformation()) + .map(i -> new Plugin(i.getName(), i.getVersion())) + .collect(Collectors.toList()); + + String url = scmConfiguration.getAlertsUrl(); + AlertsRequestBody body = new AlertsRequestBody(instanceId, version, os, arch, jre, plugins); + String checksum = createChecksum(url, body); + + Links links = createLinks(uriInfo, url); + return new AlertsRequest(links, checksum, body); + } + + private Links createLinks(UriInfo uriInfo, String alertsUrl) { + return Links.linkingTo() + .self(uriInfo.getAbsolutePath().toASCIIString()) + .single(Link.link("alerts", alertsUrl)) + .build(); + } + + @SuppressWarnings("UnstableApiUsage") + private String createChecksum(String url, AlertsRequestBody body) throws IOException { + Hasher hasher = Hashing.sha256().newHasher(); + hasher.putString(url, StandardCharsets.UTF_8); + hasher.putString(dateSupplier.get(), StandardCharsets.UTF_8); + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ObjectOutputStream out = new ObjectOutputStream(baos)) { + out.writeObject(body); + } + + hasher.putBytes(baos.toByteArray()); + return hasher.hash().toString(); + } + + @Getter + @Setter + @NoArgsConstructor + @SuppressWarnings("java:S2160") // we need no equals here + public static class AlertsRequest extends HalRepresentation { + + private String checksum; + private AlertsRequestBody body; + + public AlertsRequest(Links links, String checksum, AlertsRequestBody body) { + super(links); + this.checksum = checksum; + this.body = body; + } + } + + @Value + public static class AlertsRequestBody implements Serializable { + + String instanceId; + String version; + String os; + String arch; + String jre; + @SuppressWarnings("java:S1948") // the field is serializable, but sonar does not get it + List plugins; + + } + + @Value + public static class Plugin implements Serializable { + + String name; + String version; + + } + +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigDto.java index 9c5f695cb4..d4f2c3c0bc 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigDto.java @@ -61,6 +61,7 @@ public class ConfigDto extends HalRepresentation implements UpdateConfigDto { private boolean enabledApiKeys; private String namespaceStrategy; private String loginInfoUrl; + private String alertsUrl; private String releaseFeedUrl; private String mailDomainName; private Set emergencyContacts; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java index 0deea54e22..767f99d938 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java @@ -146,6 +146,10 @@ public class IndexDtoGenerator extends HalAppenderMapper { builder.array(searchLinks()); builder.single(link("searchableTypes", resourceLinks.search().searchableTypes())); + + if (!Strings.isNullOrEmpty(configuration.getAlertsUrl())) { + builder.single(link("alerts", resourceLinks.alerts().get())); + } } else { builder.single(link("login", resourceLinks.authentication().jsonLogin())); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java index 5de7e80a00..8fbcfe5132 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ResourceLinks.java @@ -1222,4 +1222,23 @@ class ResourceLinks { return indexLinkBuilder.method("authResource").parameters().method("authenticationInfo").parameters().href(); } } + + public AlertsLinks alerts() { + return new AlertsLinks(scmPathInfoStore.get().get()); + } + + static class AlertsLinks { + + private final LinkBuilder indexLinkBuilder; + + AlertsLinks(ScmPathInfo pathInfo) { + indexLinkBuilder = new LinkBuilder(pathInfo, AlertsResource.class); + } + + String get() { + return indexLinkBuilder.method("getAlertsRequest").parameters().href(); + } + + } + } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java index f62c51db13..fc413cb0e1 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java @@ -71,6 +71,14 @@ interface UpdateConfigDto { String getLoginInfoUrl(); + /** + * Get the url to the alerts api. + * + * @return alerts url + * @since 2.30.0 + */ + String getAlertsUrl(); + String getReleaseFeedUrl(); String getMailDomainName(); diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/ExplodedSmp.java b/scm-webapp/src/main/java/sonia/scm/plugin/ExplodedSmp.java index 777c4a11d9..8758232261 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/ExplodedSmp.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/ExplodedSmp.java @@ -30,6 +30,7 @@ import com.google.common.base.Function; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.nio.file.Files; import java.nio.file.Path; import java.util.Objects; @@ -84,6 +85,16 @@ public final class ExplodedSmp //~--- get methods ---------------------------------------------------------- + /** + * Returns {@code true} if the exploded smp contains a core plugin + * @return {@code true} for a core plugin + * @since 2.30.0 + */ + public boolean isCore() { + return Files.exists(path.resolve(PluginConstants.FILE_CORE)); + } + + /** * Returns the path to the plugin directory. * diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java index 15e12bd6eb..6eabee1c8a 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginProcessor.java @@ -34,6 +34,7 @@ import com.google.common.collect.Sets; import com.google.common.hash.Hashing; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.SCMContext; import sonia.scm.lifecycle.classloading.ClassLoaderLifeCycle; import javax.xml.bind.JAXBContext; @@ -175,7 +176,7 @@ public final class PluginProcessor Set plugins = concat(installedPlugins, newlyInstalledPlugins); logger.trace("start building plugin tree"); - PluginTree pluginTree = new PluginTree(plugins); + PluginTree pluginTree = new PluginTree(SCMContext.getContext().getStage(), plugins); logger.info("install plugin tree:\n{}", pluginTree); @@ -468,16 +469,13 @@ public final class PluginProcessor Path descriptorPath = directory.resolve(PluginConstants.FILE_DESCRIPTOR); if (Files.exists(descriptorPath)) { - - boolean core = Files.exists(directory.resolve(PluginConstants.FILE_CORE)); - ClassLoader cl = createClassLoader(classLoader, smp); InstalledPluginDescriptor descriptor = createDescriptor(cl, descriptorPath); WebResourceLoader resourceLoader = createWebResourceLoader(directory); - plugin = new InstalledPlugin(descriptor, cl, resourceLoader, directory, core); + plugin = new InstalledPlugin(descriptor, cl, resourceLoader, directory, smp.isCore()); } else { logger.warn("found plugin directory without plugin descriptor"); } diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java index 9ea241919a..b2def0c447 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java @@ -24,10 +24,10 @@ package sonia.scm.plugin; -//~--- non-JDK imports -------------------------------------------------------- import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.Stage; import java.util.Arrays; import java.util.Collection; @@ -35,76 +35,62 @@ import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; -//~--- JDK imports ------------------------------------------------------------ - /** - * * @author Sebastian Sdorra */ -public final class PluginTree -{ +public final class PluginTree { - /** Field description */ private static final int SCM_VERSION = 2; /** * the logger for PluginTree */ - private static final Logger logger = - LoggerFactory.getLogger(PluginTree.class); + private static final Logger LOG = LoggerFactory.getLogger(PluginTree.class); - //~--- constructors --------------------------------------------------------- + private final Stage stage; + private final List rootNodes; - /** - * Constructs ... - * - * - * @param smps - */ - public PluginTree(ExplodedSmp... smps) - { - this(Arrays.asList(smps)); + public PluginTree(Stage stage, ExplodedSmp... smps) { + this(stage, Arrays.asList(smps)); } - /** - * Constructs ... - * - * - * @param smps - */ - public PluginTree(Collection smps) - { - + public PluginTree(Stage stage, Collection smps) { + this.stage = stage; smps.forEach(s -> { InstalledPluginDescriptor plugin = s.getPlugin(); - logger.trace("plugin: {}", plugin.getInformation().getName()); - logger.trace("dependencies: {}", plugin.getDependencies()); - logger.trace("optional dependencies: {}", plugin.getOptionalDependencies()); + LOG.trace("plugin: {}", plugin.getInformation().getName()); + LOG.trace("dependencies: {}", plugin.getDependencies()); + LOG.trace("optional dependencies: {}", plugin.getOptionalDependencies()); }); rootNodes = new SmpNodeBuilder().buildNodeTree(smps); - for (ExplodedSmp smp : smps) - { - InstalledPluginDescriptor plugin = smp.getPlugin(); + for (ExplodedSmp smp : smps) { + checkIfSupported(smp); + } + } - if (plugin.getScmVersion() != SCM_VERSION) - { - //J- - throw new PluginException( - String.format( - "scm version %s of plugin %s does not match, required is version %s", - plugin.getScmVersion(), plugin.getInformation().getId(), SCM_VERSION - ) - ); - //J+ - } + private void checkIfSupported(ExplodedSmp smp) { + InstalledPluginDescriptor plugin = smp.getPlugin(); - PluginCondition condition = plugin.getCondition(); + if (plugin.getScmVersion() != SCM_VERSION) { + throw new PluginException( + String.format( + "scm version %s of plugin %s does not match, required is version %s", + plugin.getScmVersion(), plugin.getInformation().getId(), SCM_VERSION + ) + ); + } - if (!condition.isSupported()) - { - //J- + checkIfConditionsMatch(smp, plugin); + } + + private void checkIfConditionsMatch(ExplodedSmp smp, InstalledPluginDescriptor plugin) { + PluginCondition condition = plugin.getCondition(); + if (!condition.isSupported()) { + if (smp.isCore() && stage == Stage.DEVELOPMENT) { + LOG.warn("plugin {} does not match conditions {}", plugin.getInformation().getId(), condition); + } else { throw new PluginConditionFailedException( condition, String.format( @@ -112,29 +98,17 @@ public final class PluginTree plugin.getInformation().getId(), condition ) ); - //J+ } } } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - public List getLeafLastNodes() - { + public List getLeafLastNodes() { LinkedHashSet leafFirst = new LinkedHashSet<>(); rootNodes.forEach(node -> appendLeafFirst(leafFirst, node)); LinkedList leafLast = new LinkedList<>(); - leafFirst.forEach(leafLast::addFirst); - return leafLast; } @@ -143,9 +117,6 @@ public final class PluginTree leafFirst.add(node); } - - //~--- methods -------------------------------------------------------------- - @Override public String toString() { StringBuilder buffer = new StringBuilder(); @@ -163,8 +134,4 @@ public final class PluginTree } } - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private final List rootNodes; } diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AlertsResourceTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AlertsResourceTest.java new file mode 100644 index 0000000000..6d4206ffbf --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/AlertsResourceTest.java @@ -0,0 +1,254 @@ +/* + * 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.api.v2.resources; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.jboss.resteasy.mock.MockHttpRequest; +import org.jboss.resteasy.mock.MockHttpResponse; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.SCMContextProvider; +import sonia.scm.api.v2.resources.AlertsResource.AlertsRequest; +import sonia.scm.api.v2.resources.AlertsResource.AlertsRequestBody; +import sonia.scm.config.ScmConfiguration; +import sonia.scm.plugin.InstalledPlugin; +import sonia.scm.plugin.InstalledPluginDescriptor; +import sonia.scm.plugin.PluginInformation; +import sonia.scm.plugin.PluginLoader; +import sonia.scm.util.SystemUtil; +import sonia.scm.web.RestDispatcher; +import sonia.scm.web.VndMediaType; + +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class AlertsResourceTest { + + private final ObjectMapper mapper = new ObjectMapper(); + + @Mock + private PluginLoader pluginLoader; + + @Mock + private SCMContextProvider scmContextProvider; + + private RestDispatcher restDispatcher; + private ScmConfiguration scmConfiguration; + + @BeforeEach + void setUp() { + restDispatcher = new RestDispatcher(); + scmConfiguration = new ScmConfiguration(); + } + + @Test + void shouldFailWithConflictIfAlertsUrlIsNull() throws Exception { + scmConfiguration.setAlertsUrl(null); + + MockHttpResponse response = invoke(); + + assertThat(response.getStatus()).isEqualTo(409); + } + + @Test + void shouldReturnSelfUrl() throws Exception { + MockHttpResponse response = invoke(); + JsonNode node = mapper.readTree(response.getContentAsString()); + assertThat(node.get("_links").get("self").get("href").asText()).isEqualTo("/v2/alerts"); + } + + @Test + void shouldReturnAlertsUrl() throws Exception { + MockHttpResponse response = invoke(); + JsonNode node = mapper.readTree(response.getContentAsString()); + assertThat(node.get("_links").get("alerts").get("href").asText()).isEqualTo(ScmConfiguration.DEFAULT_ALERTS_URL); + } + + @Test + void shouldReturnVndMediaType() throws Exception { + MockHttpResponse response = invoke(); + assertThat(response.getOutputHeaders().getFirst("Content-Type")).hasToString(VndMediaType.ALERTS_REQUEST); + } + + @Test + void shouldReturnCustomAlertsUrl() throws Exception { + scmConfiguration.setAlertsUrl("https://mycustom.alerts.io"); + + MockHttpResponse response = invoke(); + JsonNode node = mapper.readTree(response.getContentAsString()); + + assertThat(node.get("_links").get("alerts").get("href").asText()).isEqualTo("https://mycustom.alerts.io"); + } + + @Test + void shouldReturnAlertsRequest() throws Exception { + String instanceId = UUID.randomUUID().toString(); + when(scmContextProvider.getInstanceId()).thenReturn(instanceId); + when(scmContextProvider.getVersion()).thenReturn("2.28.0"); + + InstalledPlugin pluginA = createInstalledPlugin("some-scm-plugin", "1.0.0"); + InstalledPlugin pluginB = createInstalledPlugin("other-scm-plugin", "2.1.1"); + when(pluginLoader.getInstalledPlugins()).thenReturn(Arrays.asList(pluginA, pluginB)); + + MockHttpResponse response = invoke(); + + assertThat(response.getStatus()).isEqualTo(200); + + AlertsRequest alertsRequest = unmarshal(response); + AlertsRequestBody body = alertsRequest.getBody(); + assertThat(body.getInstanceId()).isEqualTo(instanceId); + assertThat(body.getVersion()).isEqualTo("2.28.0"); + assertThat(body.getOs()).isEqualTo(SystemUtil.getOS()); + assertThat(body.getArch()).isEqualTo(SystemUtil.getArch()); + assertThat(body.getJre()).isEqualTo(SystemUtil.getJre()); + + List plugins = body.getPlugins(); + assertThat(plugins.size()).isEqualTo(2); + AlertsResource.Plugin somePlugin = findPlugin(plugins, "some-scm-plugin"); + assertThat(somePlugin.getVersion()).isEqualTo("1.0.0"); + AlertsResource.Plugin otherPlugin = findPlugin(plugins, "other-scm-plugin"); + assertThat(otherPlugin.getVersion()).isEqualTo("2.1.1"); + } + + @Test + void shouldReturnSameChecksumIfNothingChanged() throws Exception { + String instanceId = UUID.randomUUID().toString(); + when(scmContextProvider.getInstanceId()).thenReturn(instanceId); + when(scmContextProvider.getVersion()).thenReturn("2.28.0"); + + InstalledPlugin plugin = createInstalledPlugin("some-scm-plugin", "1.0.0"); + when(pluginLoader.getInstalledPlugins()).thenReturn(Collections.singletonList(plugin)); + + MockHttpResponse response = invoke(); + String checksum = unmarshal(response).getChecksum(); + + MockHttpResponse secondResponse = invoke(); + + assertThat(unmarshal(secondResponse).getChecksum()).isEqualTo(checksum); + } + + @Test + void shouldReturnDifferentChecksumIfCoreVersionChanges() throws Exception { + when(scmContextProvider.getVersion()).thenReturn("2.28.0"); + + MockHttpResponse response = invoke(); + String checksum = unmarshal(response).getChecksum(); + + when(scmContextProvider.getVersion()).thenReturn("2.28.1"); + + MockHttpResponse secondResponse = invoke(); + + assertThat(unmarshal(secondResponse).getChecksum()).isNotEqualTo(checksum); + } + + @Test + void shouldReturnDifferentChecksumIfPluginVersionChanges() throws Exception { + InstalledPlugin plugin1_0_0 = createInstalledPlugin("some-scm-plugin", "1.0.0"); + when(pluginLoader.getInstalledPlugins()).thenReturn(Collections.singletonList(plugin1_0_0)); + + MockHttpResponse response = invoke(); + String checksum = unmarshal(response).getChecksum(); + + InstalledPlugin plugin1_0_1 = createInstalledPlugin("some-scm-plugin", "1.0.1"); + when(pluginLoader.getInstalledPlugins()).thenReturn(Collections.singletonList(plugin1_0_1)); + + MockHttpResponse secondResponse = invoke(); + + assertThat(unmarshal(secondResponse).getChecksum()).isNotEqualTo(checksum); + } + + @Test + void shouldReturnDifferentChecksumIfDateChanges() throws Exception { + MockHttpResponse response = invoke(); + String checksum = unmarshal(response).getChecksum(); + + InstalledPlugin plugin1_0_1 = createInstalledPlugin("some-scm-plugin", "1.0.1"); + when(pluginLoader.getInstalledPlugins()).thenReturn(Collections.singletonList(plugin1_0_1)); + + MockHttpResponse secondResponse = invoke("1979-10-12"); + + assertThat(unmarshal(secondResponse).getChecksum()).isNotEqualTo(checksum); + } + + private InstalledPlugin createInstalledPlugin(String name, String version) { + PluginInformation pluginInformation = new PluginInformation(); + pluginInformation.setName(name); + pluginInformation.setVersion(version); + return createInstalledPlugin(pluginInformation); + } + + private InstalledPlugin createInstalledPlugin(PluginInformation pluginInformation) { + InstalledPluginDescriptor descriptor = mock(InstalledPluginDescriptor.class); + lenient().when(descriptor.getInformation()).thenReturn(pluginInformation); + return new InstalledPlugin(descriptor, null, null, null, false); + } + + private MockHttpResponse invoke() throws Exception { + return invoke(null); + } + + private MockHttpResponse invoke(String date) throws Exception { + AlertsResource alertsResource; + if (date != null) { + alertsResource = new AlertsResource(scmContextProvider, scmConfiguration, pluginLoader, () -> date); + } else { + alertsResource = new AlertsResource(scmContextProvider, scmConfiguration, pluginLoader); + } + + restDispatcher.addSingletonResource(alertsResource); + + MockHttpRequest request = MockHttpRequest.get("/v2/alerts"); + MockHttpResponse response = new MockHttpResponse(); + restDispatcher.invoke(request, response); + + return response; + } + + private AlertsRequest unmarshal(MockHttpResponse response) throws JsonProcessingException, UnsupportedEncodingException { + return mapper.readValue(response.getContentAsString(), AlertsRequest.class); + } + + private AlertsResource.Plugin findPlugin(List plugins, String name) { + return plugins.stream() + .filter(p -> name.equals(p.getName())) + .findFirst() + .orElseThrow(() -> new IllegalStateException("plugin " + name + " not found in request")); + } + +} diff --git a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ScmConfigurationToConfigDtoMapperTest.java b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ScmConfigurationToConfigDtoMapperTest.java index f8a8f093ff..9058de2c0c 100644 --- a/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ScmConfigurationToConfigDtoMapperTest.java +++ b/scm-webapp/src/test/java/sonia/scm/api/v2/resources/ScmConfigurationToConfigDtoMapperTest.java @@ -39,12 +39,8 @@ import sonia.scm.config.ScmConfiguration; import sonia.scm.security.AnonymousMode; import java.net.URI; -import java.util.Arrays; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertSame; -import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -106,6 +102,7 @@ class ScmConfigurationToConfigDtoMapperTest { assertThat(dto.isEnabledXsrfProtection()).isTrue(); assertThat(dto.getNamespaceStrategy()).isEqualTo("username"); assertThat(dto.getLoginInfoUrl()).isEqualTo("https://scm-manager.org/login-info"); + assertThat(dto.getAlertsUrl()).isEqualTo("https://alerts.scm-manager.org/api/v1/alerts"); assertThat(dto.getReleaseFeedUrl()).isEqualTo("https://www.scm-manager.org/download/rss.xml"); assertThat(dto.getMailDomainName()).isEqualTo("scm-manager.local"); assertThat(dto.getEmergencyContacts()).contains(expectedUsers); @@ -169,6 +166,7 @@ class ScmConfigurationToConfigDtoMapperTest { config.setEnabledXsrfProtection(true); config.setNamespaceStrategy("username"); config.setLoginInfoUrl("https://scm-manager.org/login-info"); + config.setAlertsUrl("https://alerts.scm-manager.org/api/v1/alerts"); config.setReleaseFeedUrl("https://www.scm-manager.org/download/rss.xml"); config.setEmergencyContacts(Sets.newSet(expectedUsers)); return config; diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java index 193cbe9acc..5981ca5896 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PluginTreeTest.java @@ -21,166 +21,143 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.plugin; -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.common.base.Function; import com.google.common.collect.Lists; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; - -import static com.google.common.collect.ImmutableSet.of; -import static org.hamcrest.Matchers.*; - -import static org.junit.Assert.*; - -//~--- JDK imports ------------------------------------------------------------ +import sonia.scm.Stage; import java.io.IOException; - +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import static com.google.common.collect.ImmutableSet.of; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + /** - * * @author Sebastian Sdorra */ -public class PluginTreeTest -{ +public class PluginTreeTest { + + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); - /** - * Method description - * - * - * @throws IOException - */ @Test(expected = PluginConditionFailedException.class) - public void testPluginConditionFailed() throws IOException - { - PluginCondition condition = new PluginCondition("999", - new ArrayList(), "hit"); - InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(2, createInfo("a", "1"), null, condition, - false, null, null); + public void testPluginConditionFailed() throws IOException { + PluginCondition condition = new PluginCondition("999", new ArrayList<>(), "hit"); + InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(2, createInfo("a", "1"), null, condition, + false, null, null); ExplodedSmp smp = createSmp(plugin); - new PluginTree(smp).getLeafLastNodes(); + new PluginTree(Stage.PRODUCTION, smp).getLeafLastNodes(); } - /** - * Method description - * - * - * @throws IOException - */ - @Test(expected = PluginNotInstalledException.class) - public void testPluginNotInstalled() throws IOException - { - new PluginTree(createSmpWithDependency("b", "a")).getLeafLastNodes(); + @Test(expected = PluginConditionFailedException.class) + public void testPluginConditionFailedInDevelopmentStage() throws IOException { + PluginCondition condition = new PluginCondition("999", new ArrayList<>(), "hit"); + InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(2, createInfo("a", "1"), null, condition, + false, null, null); + ExplodedSmp smp = createSmp(plugin); + + new PluginTree(Stage.DEVELOPMENT, smp).getLeafLastNodes(); } - /** - * Method description - * - * - * @throws IOException - */ + @Test - public void testNodes() throws IOException - { + public void testSkipCorePluginValidationOnDevelopment() throws IOException { + PluginCondition condition = new PluginCondition("999", new ArrayList<>(), "hit"); + InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(2, createInfo("a", "1"), null, condition, + false, null, null); + + // make it core + ExplodedSmp smp = createSmp(plugin); + Path path = smp.getPath(); + Files.createFile(path.resolve(PluginConstants.FILE_CORE)); + + List nodes = new PluginTree(Stage.DEVELOPMENT, smp).getLeafLastNodes(); + assertFalse(nodes.isEmpty()); + } + + @Test(expected = PluginNotInstalledException.class) + public void testPluginNotInstalled() throws IOException { + new PluginTree(Stage.PRODUCTION, createSmpWithDependency("b", "a")).getLeafLastNodes(); + } + + @Test + public void testNodes() throws IOException { List smps = createSmps("a", "b", "c"); - List nodes = unwrapIds(new PluginTree(smps).getLeafLastNodes()); + List nodes = unwrapIds(new PluginTree(Stage.PRODUCTION, smps).getLeafLastNodes()); assertThat(nodes, containsInAnyOrder("a", "b", "c")); } - /** - * Method description - * - * - * @throws IOException - */ @Test(expected = PluginException.class) - public void testScmVersion() throws IOException - { + public void testScmVersion() throws IOException { InstalledPluginDescriptor plugin = new InstalledPluginDescriptor(1, createInfo("a", "1"), null, null, false, - null, null); + null, null); ExplodedSmp smp = createSmp(plugin); - new PluginTree(smp).getLeafLastNodes(); + new PluginTree(Stage.PRODUCTION, smp).getLeafLastNodes(); } - /** - * Method description - * - * - * @throws IOException - */ @Test - public void testSimpleDependencies() throws IOException - { - //J- - ExplodedSmp[] smps = new ExplodedSmp[] { + public void testSimpleDependencies() throws IOException { + ExplodedSmp[] smps = new ExplodedSmp[]{ createSmpWithDependency("a"), createSmpWithDependency("b", "a"), createSmpWithDependency("c", "a", "b") }; - //J+ - PluginTree tree = new PluginTree(smps); + PluginTree tree = new PluginTree(Stage.PRODUCTION, smps); List nodes = tree.getLeafLastNodes(); - System.out.println(tree); - assertThat(unwrapIds(nodes), contains("a", "b", "c")); } @Test - public void testComplexDependencies() throws IOException - { - //J- + public void testComplexDependencies() throws IOException { ExplodedSmp[] smps = new ExplodedSmp[]{ createSmpWithDependency("a", "b", "c", "d"), createSmpWithDependency("b", "c"), createSmpWithDependency("c"), createSmpWithDependency("d") }; - //J+ - PluginTree tree = new PluginTree(smps); + PluginTree tree = new PluginTree(Stage.PRODUCTION, smps); List nodes = tree.getLeafLastNodes(); - System.out.println(tree); - assertThat(unwrapIds(nodes), contains("d", "c", "b", "a")); } @Test public void testWithOptionalDependency() throws IOException { - ExplodedSmp[] smps = new ExplodedSmp[] { + ExplodedSmp[] smps = new ExplodedSmp[]{ createSmpWithDependency("a"), createSmpWithDependency("b", null, of("a")), createSmpWithDependency("c", null, of("a", "b")) }; - PluginTree tree = new PluginTree(smps); + PluginTree tree = new PluginTree(Stage.PRODUCTION, smps); List nodes = tree.getLeafLastNodes(); - System.out.println(tree); - assertThat(unwrapIds(nodes), contains("a", "b", "c")); } @Test public void testRealWorldDependencies() throws IOException { - //J- ExplodedSmp[] smps = new ExplodedSmp[]{ createSmpWithDependency("scm-editor-plugin"), createSmpWithDependency("scm-ci-plugin"), @@ -206,7 +183,7 @@ public class PluginTreeTest createSmpWithDependency("scm-script-plugin"), createSmpWithDependency("scm-activity-plugin"), createSmpWithDependency("scm-mail-plugin"), - createSmpWithDependency("scm-branchwp-plugin", of(), of("scm-editor-plugin", "scm-review-plugin", "scm-mail-plugin" )), + createSmpWithDependency("scm-branchwp-plugin", of(), of("scm-editor-plugin", "scm-review-plugin", "scm-mail-plugin")), createSmpWithDependency("scm-notify-plugin", "scm-mail-plugin"), createSmpWithDependency("scm-redmine-plugin", "scm-issuetracker-plugin"), createSmpWithDependency("scm-jira-plugin", "scm-mail-plugin", "scm-issuetracker-plugin"), @@ -214,17 +191,10 @@ public class PluginTreeTest createSmpWithDependency("scm-pathwp-plugin", of(), of("scm-editor-plugin")), createSmpWithDependency("scm-cockpit-legacy-plugin", "scm-statistic-plugin", "scm-rest-legacy-plugin", "scm-activity-plugin") }; - //J+ - Arrays.stream(smps) - .forEach(smp -> System.out.println(smp.getPlugin())); - - - PluginTree tree = new PluginTree(smps); + PluginTree tree = new PluginTree(Stage.PRODUCTION, smps); List nodes = tree.getLeafLastNodes(); - System.out.println(tree); - assertEachParentHasChild(nodes, "scm-review-plugin", "scm-branchwp-plugin"); } @@ -239,18 +209,15 @@ public class PluginTreeTest assertEachParentHasChild(pluginNode.getChildren(), parentName, childName); } - @Test public void testWithDeepOptionalDependency() throws IOException { - ExplodedSmp[] smps = new ExplodedSmp[] { + ExplodedSmp[] smps = new ExplodedSmp[]{ createSmpWithDependency("a"), createSmpWithDependency("b", "a"), createSmpWithDependency("c", null, of("b")) }; - PluginTree tree = new PluginTree(smps); - - System.out.println(tree); + PluginTree tree = new PluginTree(Stage.PRODUCTION, smps); List nodes = tree.getLeafLastNodes(); @@ -259,28 +226,18 @@ public class PluginTreeTest @Test public void testWithNonExistentOptionalDependency() throws IOException { - ExplodedSmp[] smps = new ExplodedSmp[] { + ExplodedSmp[] smps = new ExplodedSmp[]{ createSmpWithDependency("a", null, of("b")) }; - PluginTree tree = new PluginTree(smps); + PluginTree tree = new PluginTree(Stage.PRODUCTION, smps); List nodes = tree.getLeafLastNodes(); assertThat(unwrapIds(nodes), containsInAnyOrder("a")); } - /** - * Method description - * - * - * @param name - * @param version - * - * @return - */ private PluginInformation createInfo(String name, - String version) - { + String version) { PluginInformation info = new PluginInformation(); info.setName(name); @@ -289,58 +246,21 @@ public class PluginTreeTest return info; } - /** - * Method description - * - * - * @param plugin - * - * @return - * - * @throws IOException - */ - private ExplodedSmp createSmp(InstalledPluginDescriptor plugin) throws IOException - { - return new ExplodedSmp(tempFolder.newFile().toPath(), plugin); + private ExplodedSmp createSmp(InstalledPluginDescriptor plugin) throws IOException { + return new ExplodedSmp(tempFolder.newFolder().toPath(), plugin); } - /** - * Method description - * - * - * @param name - * - * @return - * - * @throws IOException - */ - private ExplodedSmp createSmp(String name) throws IOException - { + private ExplodedSmp createSmp(String name) throws IOException { return createSmp(new InstalledPluginDescriptor(2, createInfo(name, "1.0.0"), null, null, false, null, null)); } - /** - * Method description - * - * - * @param name - * @param dependencies - * - * @return - * - * @throws IOException - */ private ExplodedSmp createSmpWithDependency(String name, - String... dependencies) - throws IOException - { + String... dependencies) + throws IOException { Set dependencySet = new HashSet<>(); - for (String d : dependencies) - { - dependencySet.add(d); - } + Collections.addAll(dependencySet, dependencies); return createSmpWithDependency(name, dependencySet, null); } @@ -357,52 +277,18 @@ public class PluginTreeTest return createSmp(plugin); } - /** - * Method description - * - * - * @param names - * - * @return - * - * @throws IOException - */ - private List createSmps(String... names) throws IOException - { + private List createSmps(String... names) throws IOException { List smps = Lists.newArrayList(); - for (String name : names) - { + for (String name : names) { smps.add(createSmp(name)); } return smps; } - /** - * Method description - * - * - * @param nodes - * - * @return - */ - private List unwrapIds(List nodes) - { - return Lists.transform(nodes, new Function() - { - - @Override - public String apply(PluginNode input) - { - return input.getId(); - } - }); + private List unwrapIds(List nodes) { + return nodes.stream().map(PluginNode::getId).collect(Collectors.toList()); } - //~--- fields --------------------------------------------------------------- - - /** Field description */ - @Rule - public TemporaryFolder tempFolder = new TemporaryFolder(); }