From ad0e9419090a883de79c083e50ef1d43373fa5f1 Mon Sep 17 00:00:00 2001 From: jr-rk <95219754+jr-rk@users.noreply.github.com> Date: Tue, 11 Aug 2026 15:41:36 +0200 Subject: [PATCH 1/2] fix(rest): make REST root version prefix configurable (default "DSpace") RootConverter hardcoded "DSpace " as the version-string prefix that the UI renders as . The "CLARIN-DSpace " identity introduced by #985 was dropped in the 7.6.5 merge (#1031); hardcoding it back would mis-brand the non-customer branches. Instead read the prefix from a new `dspace.version.prefix` property, defaulting to "DSpace" so nothing changes unless a deployment opts in (e.g. CLARIN sets "CLARIN-DSpace"). Port of dataquest-dev/dspace-customers#903 (item 6). Co-Authored-By: Claude Fable 5 --- .../org/dspace/app/rest/converter/RootConverter.java | 3 ++- .../dspace/app/rest/converter/RootConverterTest.java | 12 ++++++++++++ dspace/config/dspace.cfg | 5 +++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java index 3675ddf13f0..8e769cf4c27 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java @@ -44,7 +44,8 @@ public RootRest convert(HttpServletRequest request) { } else { rootRest.setDspaceServer(dspaceUrl); } - rootRest.setDspaceVersion("DSpace " + getSourceVersion()); + String versionPrefix = configurationService.getProperty("dspace.version.prefix", "DSpace"); + rootRest.setDspaceVersion(versionPrefix + " " + getSourceVersion()); rootRest.setBuildVersion(getBuildVersion()); return rootRest; } diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/RootConverterTest.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/RootConverterTest.java index 951bedbf47c..53b16fd8cb3 100644 --- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/RootConverterTest.java +++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/RootConverterTest.java @@ -45,6 +45,7 @@ public void setUp() throws Exception { when(configurationService.getProperty("dspace.name")).thenReturn("dspacename"); when(configurationService.getProperty("dspace.server.url")).thenReturn(serverURL); when(configurationService.getProperty("dspace.server.ssr.url", serverURL)).thenReturn(serverSSRURL); + when(configurationService.getProperty("dspace.version.prefix", "DSpace")).thenReturn("DSpace"); } @@ -85,4 +86,15 @@ public void testCorrectInternalUrlSetFromConfigurationService() throws Exception assertEquals(serverSSRURL, rootRest.getDspaceServer()); assertEquals("DSpace " + Util.getSourceVersion(), rootRest.getDspaceVersion()); } + + @Test + public void testConfigurableVersionPrefix() throws Exception { + when(configurationService.getProperty("dspace.version.prefix", "DSpace")).thenReturn("CLARIN-DSpace"); + request.setScheme("https"); + request.setServerName("dspace-rest"); + request.setServerPort(443); + request.setRequestURI("/server/api"); + RootRest rootRest = rootConverter.convert(request); + assertEquals("CLARIN-DSpace " + Util.getSourceVersion(), rootRest.getDspaceVersion()); + } } diff --git a/dspace/config/dspace.cfg b/dspace/config/dspace.cfg index add4564d547..4359ea7d6cc 100644 --- a/dspace/config/dspace.cfg +++ b/dspace/config/dspace.cfg @@ -42,6 +42,11 @@ dspace.ui.url = http://localhost:4000 dspace.name = DSpace at My University dspace.shortname = DSpace +# Prefix for the version string exposed at the REST root (/server/api), rendered by the UI as +# the HTML value. Defaults to "DSpace" when unset; CLARIN/customer +# deployments may set e.g. "CLARIN-DSpace". +# dspace.version.prefix = DSpace + # Assetstore configurations have moved to config/modules/assetstore.cfg # and config/spring/api/bitstore.xml. # Additional storage options (e.g. Amazon S3) are available in `assetstore.cfg` From 6fe6678ccf313ef2b83542646a320ba804ca0164 Mon Sep 17 00:00:00 2001 From: jr-rk <95219754+jr-rk@users.noreply.github.com> Date: Wed, 12 Aug 2026 15:57:05 +0200 Subject: [PATCH 2/2] fix(rest): fall back to default when dspace.version.prefix is blank configurationService.getProperty(key, default) only returns the default when the key is absent; a present-but-empty value returned "" and produced a malformed version string (leading space) at the REST root. Guard with StringUtils.defaultIfBlank so both missing and blank collapse to "DSpace". Co-Authored-By: Claude Opus 4.8 --- .../main/java/org/dspace/app/rest/converter/RootConverter.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java index 8e769cf4c27..3b8b1ec1136 100644 --- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java +++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java @@ -44,7 +44,8 @@ public RootRest convert(HttpServletRequest request) { } else { rootRest.setDspaceServer(dspaceUrl); } - String versionPrefix = configurationService.getProperty("dspace.version.prefix", "DSpace"); + String versionPrefix = StringUtils.defaultIfBlank( + configurationService.getProperty("dspace.version.prefix", "DSpace"), "DSpace"); rootRest.setDspaceVersion(versionPrefix + " " + getSourceVersion()); rootRest.setBuildVersion(getBuildVersion()); return rootRest;