Skip to content

Commit 81a0a7e

Browse files
authored
Merge pull request #45800 from michalvavrik/feature/ws-next-http-upgrade-authz-events
WebSockets Next: fire authorization sucesss and failure events for HTTP upgrade security checks
2 parents 8b6a34f + 7521bf2 commit 81a0a7e

File tree

5 files changed

+526
-12
lines changed

5 files changed

+526
-12
lines changed

extensions/websockets-next/deployment/src/main/java/io/quarkus/websockets/next/deployment/WebSocketProcessor.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.quarkus.websockets.next.deployment;
22

3+
import static io.quarkus.arc.processor.DotNames.EVENT;
34
import static io.quarkus.deployment.annotations.ExecutionTime.RUNTIME_INIT;
45

56
import java.util.ArrayList;
@@ -95,6 +96,8 @@
9596
import io.quarkus.security.spi.ClassSecurityCheckStorageBuildItem;
9697
import io.quarkus.security.spi.PermissionsAllowedMetaAnnotationBuildItem;
9798
import io.quarkus.security.spi.SecurityTransformerUtils;
99+
import io.quarkus.security.spi.runtime.AuthorizationFailureEvent;
100+
import io.quarkus.security.spi.runtime.AuthorizationSuccessEvent;
98101
import io.quarkus.security.spi.runtime.SecurityCheck;
99102
import io.quarkus.vertx.http.deployment.RouteBuildItem;
100103
import io.quarkus.vertx.http.runtime.HandlerType;
@@ -680,7 +683,10 @@ void createSecurityHttpUpgradeCheck(BuildProducer<SyntheticBeanBuildItem> produc
680683
.scope(BuiltinScope.SINGLETON.getInfo())
681684
.priority(SecurityHttpUpgradeCheck.BEAN_PRIORITY)
682685
.setRuntimeInit()
683-
.supplier(recorder.createSecurityHttpUpgradeCheck(endpointIdToSecurityCheck))
686+
.addInjectionPoint(ClassType.create(DotNames.BEAN_MANAGER))
687+
.addInjectionPoint(ParameterizedType.create(EVENT, ClassType.create(AuthorizationFailureEvent.class)))
688+
.addInjectionPoint(ParameterizedType.create(EVENT, ClassType.create(AuthorizationSuccessEvent.class)))
689+
.createWith(recorder.createSecurityHttpUpgradeCheck(endpointIdToSecurityCheck))
684690
.done());
685691
}
686692
}

extensions/websockets-next/deployment/src/test/java/io/quarkus/websockets/next/test/security/HttpUpgradeRolesAllowedAnnotationTest.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,20 @@
77

88
import java.net.URI;
99
import java.util.concurrent.CompletionException;
10+
import java.util.concurrent.atomic.AtomicInteger;
1011

1112
import jakarta.annotation.security.RolesAllowed;
13+
import jakarta.enterprise.event.Observes;
1214
import jakarta.inject.Inject;
1315

16+
import org.jboss.shrinkwrap.api.asset.StringAsset;
1417
import org.junit.jupiter.api.Test;
1518
import org.junit.jupiter.api.extension.RegisterExtension;
1619

1720
import io.quarkus.runtime.util.ExceptionUtil;
1821
import io.quarkus.security.ForbiddenException;
1922
import io.quarkus.security.identity.CurrentIdentityAssociation;
23+
import io.quarkus.security.spi.runtime.SecurityEvent;
2024
import io.quarkus.security.test.utils.TestIdentityController;
2125
import io.quarkus.security.test.utils.TestIdentityProvider;
2226
import io.quarkus.test.QuarkusUnitTest;
@@ -33,8 +37,11 @@ public class HttpUpgradeRolesAllowedAnnotationTest extends SecurityTestBase {
3337
@RegisterExtension
3438
static final QuarkusUnitTest config = new QuarkusUnitTest()
3539
.withApplicationRoot((jar) -> jar
40+
.addAsResource(new StringAsset("""
41+
quarkus.security.events.enabled=false
42+
"""), "application.properties")
3643
.addClasses(Endpoint.class, WSClient.class, TestIdentityProvider.class, TestIdentityController.class,
37-
AdminEndpoint.class));
44+
AdminEndpoint.class, SecurityEventObserver.class));
3845

3946
@TestHTTPResource("admin-end")
4047
URI adminEndpointUri;
@@ -56,6 +63,9 @@ public void testInsufficientRights() {
5663
client.waitForMessages(2);
5764
assertEquals("hello", client.getMessages().get(1).toString());
5865
}
66+
67+
// assert no security events when the events are disabled
68+
assertEquals(0, SecurityEventObserver.count.get());
5969
}
6070

6171
@RolesAllowed("admin")
@@ -101,4 +111,13 @@ String error(ForbiddenException t) {
101111
}
102112

103113
}
114+
115+
public static class SecurityEventObserver {
116+
117+
private static final AtomicInteger count = new AtomicInteger();
118+
119+
void observe(@Observes SecurityEvent securityEvent) {
120+
count.incrementAndGet();
121+
}
122+
}
104123
}

0 commit comments

Comments
 (0)