Skip to content

Commit 269de30

Browse files
committed
pac4j: don't wrap exception as runtime exception fix #3623
1 parent 4cd96a9 commit 269de30

File tree

4 files changed

+56
-33
lines changed

4 files changed

+56
-33
lines changed

modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/CallbackFilterImpl.java

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import edu.umd.cs.findbugs.annotations.NonNull;
1111
import io.jooby.Context;
1212
import io.jooby.Route;
13+
import io.jooby.SneakyThrows;
1314
import io.jooby.pac4j.Pac4jFrameworkParameters;
1415
import io.jooby.pac4j.Pac4jOptions;
1516

@@ -26,16 +27,23 @@ public CallbackFilterImpl(Config config, Pac4jOptions options) {
2627

2728
@NonNull @Override
2829
public Object apply(@NonNull Context ctx) throws Exception {
29-
var result =
30-
config
31-
.getCallbackLogic()
32-
.perform(
33-
config,
34-
options.getDefaultUrl(),
35-
options.getRenewSession(),
36-
options.getDefaultClient(),
37-
Pac4jFrameworkParameters.create(ctx));
38-
39-
return result == null ? ctx : result;
30+
try {
31+
var result =
32+
config
33+
.getCallbackLogic()
34+
.perform(
35+
config,
36+
options.getDefaultUrl(),
37+
options.getRenewSession(),
38+
options.getDefaultClient(),
39+
Pac4jFrameworkParameters.create(ctx));
40+
41+
return result == null ? ctx : result;
42+
} catch (RuntimeException re) {
43+
if (re.getCause() != null) {
44+
throw SneakyThrows.propagate(re.getCause());
45+
}
46+
throw re;
47+
}
4048
}
4149
}

modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/LogoutImpl.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import edu.umd.cs.findbugs.annotations.NonNull;
1111
import io.jooby.Context;
1212
import io.jooby.Route;
13+
import io.jooby.SneakyThrows;
1314
import io.jooby.pac4j.Pac4jFrameworkParameters;
1415
import io.jooby.pac4j.Pac4jOptions;
1516

@@ -26,20 +27,27 @@ public LogoutImpl(Config config, Pac4jOptions options) {
2627

2728
@NonNull @Override
2829
public Object apply(@NonNull Context ctx) throws Exception {
29-
var redirectTo = (String) ctx.getAttributes().get("pac4j.logout.redirectTo");
30-
if (redirectTo == null || redirectTo.isEmpty()) {
31-
redirectTo = options.getDefaultUrl();
30+
try {
31+
var redirectTo = (String) ctx.getAttributes().get("pac4j.logout.redirectTo");
32+
if (redirectTo == null || redirectTo.isEmpty()) {
33+
redirectTo = options.getDefaultUrl();
34+
}
35+
redirectTo = ctx.getRequestURL(redirectTo);
36+
return config
37+
.getLogoutLogic()
38+
.perform(
39+
config,
40+
redirectTo,
41+
options.getLogoutUrlPattern(),
42+
options.isLocalLogout(),
43+
options.isDestroySession(),
44+
options.isCentralLogout(),
45+
Pac4jFrameworkParameters.create(ctx));
46+
} catch (RuntimeException re) {
47+
if (re.getCause() != null) {
48+
throw SneakyThrows.propagate(re.getCause());
49+
}
50+
throw re;
3251
}
33-
redirectTo = ctx.getRequestURL(redirectTo);
34-
return config
35-
.getLogoutLogic()
36-
.perform(
37-
config,
38-
redirectTo,
39-
options.getLogoutUrlPattern(),
40-
options.isLocalLogout(),
41-
options.isDestroySession(),
42-
options.isCentralLogout(),
43-
Pac4jFrameworkParameters.create(ctx));
4452
}
4553
}

modules/jooby-pac4j/src/main/java/io/jooby/internal/pac4j/SecurityFilterImpl.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import edu.umd.cs.findbugs.annotations.NonNull;
2121
import io.jooby.Context;
2222
import io.jooby.Route;
23+
import io.jooby.SneakyThrows;
2324
import io.jooby.pac4j.Pac4jFrameworkParameters;
2425
import io.jooby.pac4j.Pac4jOptions;
2526

@@ -76,12 +77,19 @@ public Object apply(@NonNull Context ctx) throws Exception {
7677
return perform(ctx, new GrantAccessAdapterImpl(ctx, options));
7778
}
7879

79-
private Object perform(Context ctx, GrantAccessAdapterImpl accessAdapter) throws Exception {
80-
var securityLogic = config.getSecurityLogic();
81-
var clients = ctx.lookup(clientName(securityLogic)).value(this.clients.get());
82-
var authorizers = ofNullable(this.authorizers).orElse(NoopAuthorizer.NAME);
83-
return securityLogic.perform(
84-
config, accessAdapter, clients, authorizers, null, Pac4jFrameworkParameters.create(ctx));
80+
private Object perform(Context ctx, GrantAccessAdapterImpl accessAdapter) {
81+
try {
82+
var securityLogic = config.getSecurityLogic();
83+
var clients = ctx.lookup(clientName(securityLogic)).value(this.clients.get());
84+
var authorizers = ofNullable(this.authorizers).orElse(NoopAuthorizer.NAME);
85+
return securityLogic.perform(
86+
config, accessAdapter, clients, authorizers, null, Pac4jFrameworkParameters.create(ctx));
87+
} catch (RuntimeException re) {
88+
if (re.getCause() != null) {
89+
throw SneakyThrows.propagate(re.getCause());
90+
}
91+
throw re;
92+
}
8593
}
8694

8795
private String clientName(SecurityLogic securityLogic) {

modules/jooby-pac4j/src/main/java/io/jooby/pac4j/Pac4jModule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,9 @@ private static class ProtectedPath {
8686

8787
private final List<Object> clients = new ArrayList<>();
8888

89-
public ProtectedPath add(String authorizer, Object client) {
89+
public void add(String authorizer, Object client) {
9090
this.authorizers.add(authorizer);
9191
this.clients.add(client);
92-
return this;
9392
}
9493
}
9594

0 commit comments

Comments
 (0)