Fix KeycloakUriBuilder for Uris without a host name

Signed-off-by: Jan-Henrik Bruhn <github@jhbruhn.de>
This commit is contained in:
Jan-Henrik Bruhn 2024-09-14 13:51:52 +02:00 committed by Marek Posolda
parent 6503d202ac
commit da5fd31a5f
2 changed files with 10 additions and 2 deletions

View file

@ -458,13 +458,15 @@ public class KeycloakUriBuilder {
buffer.append(ssp); buffer.append(ssp);
} else if (userInfo != null || host != null || port != -1) { } else if (userInfo != null || host != null || port != -1) {
buffer.append("//"); buffer.append("//");
if (userInfo != null) if (userInfo != null) {
if (host == null || host.isEmpty()) throw new RuntimeException("empty host name, but userInfo supplied");
replaceUserInfoParameter(paramMap, fromEncodedMap, isTemplate, userInfo, buffer).append("@"); replaceUserInfoParameter(paramMap, fromEncodedMap, isTemplate, userInfo, buffer).append("@");
}
if (host != null) { if (host != null) {
if ("".equals(host)) throw new RuntimeException("empty host name");
replaceParameter(paramMap, fromEncodedMap, isTemplate, host, buffer, encodeSlash); replaceParameter(paramMap, fromEncodedMap, isTemplate, host, buffer, encodeSlash);
} }
if (port != -1 && (preserveDefaultPort || !(("http".equals(scheme) && port == 80) || ("https".equals(scheme) && port == 443)))) { if (port != -1 && (preserveDefaultPort || !(("http".equals(scheme) && port == 80) || ("https".equals(scheme) && port == 443)))) {
if (host == null || host.isEmpty()) throw new RuntimeException("empty host name, but port supplied");
buffer.append(":").append(Integer.toString(port)); buffer.append(":").append(Integer.toString(port));
} }
} else if (authority != null) { } else if (authority != null) {

View file

@ -92,4 +92,10 @@ public class KeycloakUriBuilderTest {
Assert.assertEquals("https://user-info%E2%82%AC@localhost:8443", KeycloakUriBuilder.fromUri( Assert.assertEquals("https://user-info%E2%82%AC@localhost:8443", KeycloakUriBuilder.fromUri(
"https://user-info€@localhost:8443", false).buildAsString()); "https://user-info€@localhost:8443", false).buildAsString());
} }
@Test
public void testEmptyHostname() {
Assert.assertEquals("app.immich:///oauth-callback", KeycloakUriBuilder.fromUri(
"app.immich:///oauth-callback").buildAsString());
}
} }