diff --git a/doc/release-notes/permalink-base-urls.md b/doc/release-notes/permalink-base-urls.md new file mode 100644 index 00000000000..1dd74057351 --- /dev/null +++ b/doc/release-notes/permalink-base-urls.md @@ -0,0 +1,10 @@ +The configuration setting `dataverse.pid.*.permalink.base-url`, which is used for PermaLinks, has been updated to +support greater flexibility. Previously, the string "/citation?persistentId=" was automatically appended to the +configured base URL. With this update, the base URL will now be used exactly as configured, without any automatic +additions. + +**Upgrade instructions:** + +- If you currently use a PermaLink provider with a configured `base-url`: You must manually append + "/citation?persistentId=" to the existing base URL to maintain functionality. +- If you use a PermaLink provider without a configured `base-url`: No changes are required. \ No newline at end of file diff --git a/doc/sphinx-guides/source/installation/config.rst b/doc/sphinx-guides/source/installation/config.rst index b2d9bd3d342..2f4a605260c 100644 --- a/doc/sphinx-guides/source/installation/config.rst +++ b/doc/sphinx-guides/source/installation/config.rst @@ -532,8 +532,13 @@ dataverse.pid.*.permalink.separator ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ PermaLinks are a simple PID option intended for intranet and catalog use cases. They can be used without an external service or -be configured with the ``base-url`` of a resolution service. PermaLinks also allow a custom ``separator`` to be used. (Note: when using multiple -PermaLink providers, you should avoid ambiguous authority/separator/shoulder combinations that would result in the same overall prefix.) +be configured with the ``base-url`` of a resolution service. PermaLinks also allow a custom ``separator`` to be used. + +Note: + +- If you configure ``base-url``, it should include a "/" after the hostname like this: ``https://demo.dataverse.org/``. +- When using multiple PermaLink providers, you should avoid ambiguous authority/separator/shoulder combinations that would result in the same overall prefix. +- In general, PermaLink authority/shoulder values should be alphanumeric. For other cases, admins may need to consider the potential impact of special characters in S3 storage identifiers, resolver URLs, exports, etc. .. _dataverse.pid.*.handlenet: diff --git a/src/main/java/edu/harvard/iq/dataverse/pidproviders/perma/PermaLinkPidProvider.java b/src/main/java/edu/harvard/iq/dataverse/pidproviders/perma/PermaLinkPidProvider.java index 91c7f527c88..7b55292350f 100644 --- a/src/main/java/edu/harvard/iq/dataverse/pidproviders/perma/PermaLinkPidProvider.java +++ b/src/main/java/edu/harvard/iq/dataverse/pidproviders/perma/PermaLinkPidProvider.java @@ -182,7 +182,7 @@ public GlobalId parsePersistentId(String protocol, String authority, String iden @Override public String getUrlPrefix() { - return getBaseUrl() + "/citation?persistentId=" + PERMA_PROTOCOL + ":"; + return getBaseUrl(); } @Override diff --git a/src/main/java/edu/harvard/iq/dataverse/pidproviders/perma/PermaLinkProviderFactory.java b/src/main/java/edu/harvard/iq/dataverse/pidproviders/perma/PermaLinkProviderFactory.java index 32b89223062..ca75fbff3a8 100644 --- a/src/main/java/edu/harvard/iq/dataverse/pidproviders/perma/PermaLinkProviderFactory.java +++ b/src/main/java/edu/harvard/iq/dataverse/pidproviders/perma/PermaLinkProviderFactory.java @@ -28,7 +28,7 @@ public PidProvider createPidProvider(String providerId) { String excludedList = JvmSettings.PID_PROVIDER_EXCLUDED_LIST.lookupOptional(providerId).orElse(""); String baseUrl = JvmSettings.PERMALINK_BASE_URL.lookupOptional(providerId) - .orElse(SystemConfig.getDataverseSiteUrlStatic()); + .orElse(SystemConfig.getDataverseSiteUrlStatic() + "/citation?persistentId=" + PermaLinkPidProvider.PERMA_PROTOCOL + ":"); ; String separator = JvmSettings.PERMALINK_SEPARATOR.lookupOptional(providerId).orElse(""); diff --git a/src/test/java/edu/harvard/iq/dataverse/pidproviders/PidUtilTest.java b/src/test/java/edu/harvard/iq/dataverse/pidproviders/PidUtilTest.java index cffac741c78..e36312edc8a 100644 --- a/src/test/java/edu/harvard/iq/dataverse/pidproviders/PidUtilTest.java +++ b/src/test/java/edu/harvard/iq/dataverse/pidproviders/PidUtilTest.java @@ -67,7 +67,7 @@ @JvmSetting(key = JvmSettings.PID_PROVIDER_SHOULDER, value = "QE", varArgs = "perma2") @JvmSetting(key = JvmSettings.PID_PROVIDER_MANAGED_LIST, value = "perma:LINKIT/FK2ABCDEF", varArgs ="perma2") @JvmSetting(key = JvmSettings.PERMALINK_SEPARATOR, value = "/", varArgs = "perma2") -@JvmSetting(key = JvmSettings.PERMALINK_BASE_URL, value = "https://example.org/123", varArgs = "perma2") +@JvmSetting(key = JvmSettings.PERMALINK_BASE_URL, value = "https://example.org/123/citation?persistentId=perma:", varArgs = "perma2") // Datacite 1 @JvmSetting(key = JvmSettings.PID_PROVIDER_LABEL, value = "dataCite 1", varArgs = "dc1") @JvmSetting(key = JvmSettings.PID_PROVIDER_TYPE, value = DataCiteDOIProvider.TYPE, varArgs = "dc1") @@ -191,7 +191,7 @@ public void testFactories() throws IOException { assertEquals("-", p.getSeparator()); assertTrue(p.getUrlPrefix().startsWith(SystemConfig.getDataverseSiteUrlStatic())); p = PidUtil.getPidProvider("perma2"); - assertTrue(p.getUrlPrefix().startsWith("https://example.org/123")); + assertTrue(p.getUrlPrefix().startsWith("https://example.org/123/citation?persistentId=")); p = PidUtil.getPidProvider("dc2"); assertEquals("FK3", p.getShoulder());