Skip to content

Commit 40b5ba9

Browse files
authored
Merge pull request #4020 from 2748109647/fix/4010-preserve-absolute-pac4j-urls
pac4j: preserve absolute URLs in URL resolver
2 parents bce9dd0 + 84b1413 commit 40b5ba9

2 files changed

Lines changed: 53 additions & 3 deletions

File tree

‎modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/UrlResolverImpl.java‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ public String compute(String url, WebContext context) {
3232

3333
return url;
3434
}
35-
// Rewrite using context which might uses trust proxy setting.
36-
var path = absoluteURL ? URI.create(url).getPath() : url;
37-
var requestURL = ((Pac4jContext) context).getContext().getRequestURL(path);
35+
if (absoluteURL) {
36+
return url;
37+
}
38+
// Resolve relative URLs using the context, which might use trust proxy settings.
39+
var requestURL = ((Pac4jContext) context).getContext().getRequestURL(url);
3840
// no query String
3941
int i = requestURL.indexOf('?');
4042
return i > 0 ? requestURL.substring(0, i) : requestURL;
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Jooby https://jooby.io
3+
* Apache License Version 2.0 https://jooby.io/LICENSE.txt
4+
* Copyright 2014 Edgar Espina
5+
*/
6+
package io.jooby.internal.pac4j;
7+
8+
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
import static org.mockito.Mockito.verifyNoInteractions;
10+
import static org.mockito.Mockito.when;
11+
12+
import org.junit.jupiter.api.Test;
13+
import org.junit.jupiter.api.extension.ExtendWith;
14+
import org.mockito.Mock;
15+
import org.mockito.junit.jupiter.MockitoExtension;
16+
17+
import io.jooby.Context;
18+
import io.jooby.pac4j.Pac4jContext;
19+
20+
@ExtendWith(MockitoExtension.class)
21+
class UrlResolverImplTest {
22+
23+
@Mock private Pac4jContext pac4jContext;
24+
@Mock private Context joobyContext;
25+
26+
@Test
27+
void shouldPreserveAbsoluteExternalUrlWithQuery() {
28+
String url = "https://www.casserverpac4j.dev/login?locale=fr";
29+
String callbackUrl = "https://app.example.org/callback?client_name=CasClient";
30+
UrlResolverImpl resolver = new UrlResolverImpl();
31+
32+
assertEquals(url, resolver.compute(url, pac4jContext));
33+
assertEquals(callbackUrl, resolver.compute(callbackUrl, pac4jContext));
34+
35+
verifyNoInteractions(pac4jContext, joobyContext);
36+
}
37+
38+
@Test
39+
void shouldResolveRelativeUrlUsingContext() {
40+
when(pac4jContext.getContext()).thenReturn(joobyContext);
41+
when(joobyContext.getRequestURL("/callback"))
42+
.thenReturn("https://example.org/callback?ignored=true");
43+
44+
assertEquals(
45+
"https://example.org/callback",
46+
new UrlResolverImpl().compute("/callback", pac4jContext));
47+
}
48+
}

0 commit comments

Comments
 (0)