From a4ec697c3ebadd5cb09b7f811057d2ab38960dd0 Mon Sep 17 00:00:00 2001 From: "Edward M. Kagan" Date: Fri, 15 May 2020 01:26:05 +0300 Subject: [PATCH] Updated extensions to Quarkus 1.4.2 --- .gitignore | 4 + .../security/JanitorAuthMechanism.java | 25 +--- .../security/JanitorIdentityProvider.java | 128 +++++++++--------- pom.xml | 4 +- 4 files changed, 77 insertions(+), 84 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f0fe85e --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/janitor/runtime/target/ +/janitor/deployment/target/ +/cayenne/deployment/target/ +/cayenne/runtime/target/ \ No newline at end of file diff --git a/janitor/runtime/src/main/java/org/pagan/janitor/security/JanitorAuthMechanism.java b/janitor/runtime/src/main/java/org/pagan/janitor/security/JanitorAuthMechanism.java index 120cd16..69a9465 100644 --- a/janitor/runtime/src/main/java/org/pagan/janitor/security/JanitorAuthMechanism.java +++ b/janitor/runtime/src/main/java/org/pagan/janitor/security/JanitorAuthMechanism.java @@ -7,15 +7,14 @@ import io.quarkus.security.identity.request.AuthenticationRequest; import io.quarkus.vertx.http.runtime.security.ChallengeData; import io.quarkus.vertx.http.runtime.security.HttpAuthenticationMechanism; import io.quarkus.vertx.http.runtime.security.HttpCredentialTransport; +import io.smallrye.mutiny.Uni; +import io.vertx.core.http.Cookie; import io.vertx.core.http.HttpMethod; import io.vertx.core.http.HttpServerRequest; import io.vertx.core.http.HttpServerResponse; -import io.vertx.core.http.Cookie; import io.vertx.ext.web.RoutingContext; import java.util.Collections; import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; import javax.enterprise.context.ApplicationScoped; import org.pagan.janitor.JanitorConfig; @@ -33,7 +32,7 @@ public class JanitorAuthMechanism implements HttpAuthenticationMechanism { } @Override - public CompletionStage authenticate(RoutingContext context, IdentityProviderManager janitorIdentityProvider) { + public Uni authenticate(RoutingContext context, IdentityProviderManager janitorIdentityProvider) { Cookie cookie = context.getCookie(config.cookieName); if (cookie != null) { final HttpServerRequest request = context.request(); @@ -59,26 +58,14 @@ public class JanitorAuthMechanism implements HttpAuthenticationMechanism { } @Override - public CompletionStage getChallenge(RoutingContext rc) { - System.out.println("getChallenge"); - return CompletableFuture.completedFuture( + public Uni getChallenge(RoutingContext rc) { + return Uni.createFrom().item( new ChallengeData( HttpResponseStatus.UNAUTHORIZED.code(), "", "" ) ); } - @Override - public CompletionStage sendChallenge(RoutingContext context) { - System.out.println("sendChallenge"); - Cookie cookie = context.getCookie(config.cookieName); - if (cookie != null) { - cookie.setMaxAge(0); - } - context.response().setStatusCode(HttpResponseStatus.UNAUTHORIZED.code()); - return CompletableFuture.completedFuture(false); - } - @Override public Set> getCredentialTypes() { System.out.println("getCredentialTypes"); @@ -87,7 +74,7 @@ public class JanitorAuthMechanism implements HttpAuthenticationMechanism { @Override public HttpCredentialTransport getCredentialTransport() { - System.out.println("getCredentialTransport"); + System.out.println("getCredentialTypes"); return new HttpCredentialTransport(HttpCredentialTransport.Type.COOKIE, config.cookieName); } diff --git a/janitor/runtime/src/main/java/org/pagan/janitor/security/JanitorIdentityProvider.java b/janitor/runtime/src/main/java/org/pagan/janitor/security/JanitorIdentityProvider.java index bf9d32d..693ccd2 100644 --- a/janitor/runtime/src/main/java/org/pagan/janitor/security/JanitorIdentityProvider.java +++ b/janitor/runtime/src/main/java/org/pagan/janitor/security/JanitorIdentityProvider.java @@ -5,16 +5,16 @@ import io.quarkus.security.identity.AuthenticationRequestContext; import io.quarkus.security.identity.IdentityProvider; import io.quarkus.security.identity.SecurityIdentity; import io.quarkus.security.runtime.QuarkusSecurityIdentity; +import io.smallrye.mutiny.Uni; +import io.smallrye.mutiny.subscription.UniEmitter; import io.vertx.core.http.HttpMethod; import io.vertx.core.logging.Logger; import io.vertx.core.logging.LoggerFactory; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.CompletionStage; +import java.util.function.Consumer; import javax.enterprise.context.ApplicationScoped; import javax.inject.Inject; import org.pagan.janitor.cache.SessionCache; import org.pagan.janitor.cache.SessionInfo; -//import org.pagan.janitor.security.JanitorPrincipalProducer.NullSessionToken; /** * @author Edward M. Kagan @@ -34,79 +34,81 @@ public class JanitorIdentityProvider implements IdentityProvider authenticate( - JanitorAuthenticationRequest request, + public Uni authenticate(JanitorAuthenticationRequest request, AuthenticationRequestContext context) { - if (request.getMethod() == null) { - return anonymous(); - } - - final HttpMethod method = request.getMethod(); - final String sessionId = request.getSessionId(); - final String csrfToken = request.getCsrfToken(); - final String path = request.getPath(); - - if (request.getOrigin() != null && request.getOrigin().length() > 0) - { -// request.putHeader("Access-Control-Allow-Origin", request.getOrigin()); -// request.putHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE, PATCH, HEAD"); -// request.putHeader("Access-Control-Allow-Credentials", "true"); -// request.putHeader("Access-Control-Max-Age", "1209600"); -// request.putHeader("Access-Control-Expose-Headers", "X-CSRF-TOKEN, X-CSRF-ERROR"); -// request.putHeader("Access-Control-Allow-Headers", "origin, accept, authorization, content-type, x-requested-with, x-csrf-token, x-csrf-error"); - } - - if (method == HttpMethod.OPTIONS) { - LOG.debug("method = OPTIONS"); - return anonymous(); - } - - if (sessionId == null) { - LOG.debug("sessionId = null"); - return anonymous(); - } - - SessionInfo sessionInfo = sessionCache.get(sessionId); - LOG.debug("sessionInfo = " + sessionInfo); - - if (sessionInfo == null) { - LOG.debug("session info not found in session storage"); - return anonymous(); - } - - if (method != HttpMethod.GET && method != HttpMethod.HEAD) { - LOG.debug("path = " + path); - if (!path.equals("/api/auth/") && !path.equals("/api/auth") ) { - if (csrfToken == null) { - LOG.warn("csrfToken is null"); - return failed(); + + return Uni.createFrom().emitter(new Consumer>() { + @Override + public void accept(UniEmitter uniEmitter) { + if (request.getMethod() == null) { + anonymous(uniEmitter); } - if (!sessionInfo.csrfToken().equals(csrfToken)) { - LOG.error("bad csrfToken"); - return failed(); + + final HttpMethod method = request.getMethod(); + final String sessionId = request.getSessionId(); + final String csrfToken = request.getCsrfToken(); + final String path = request.getPath(); + + if (request.getOrigin() != null && request.getOrigin().length() > 0) { + // request.putHeader("Access-Control-Allow-Origin", request.getOrigin()); + // request.putHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE, PATCH, HEAD"); + // request.putHeader("Access-Control-Allow-Credentials", "true"); + // request.putHeader("Access-Control-Max-Age", "1209600"); + // request.putHeader("Access-Control-Expose-Headers", "X-CSRF-TOKEN, X-CSRF-ERROR"); + // request.putHeader("Access-Control-Allow-Headers", "origin, accept, authorization, content-type, x-requested-with, x-csrf-token, x-csrf-error"); + } + + if (method == HttpMethod.OPTIONS) { + LOG.debug("method = OPTIONS"); + anonymous(uniEmitter); + } + + if (sessionId == null) { + LOG.debug("sessionId = null"); + anonymous(uniEmitter); + } + + SessionInfo sessionInfo = sessionCache.get(sessionId); + LOG.debug("sessionInfo = " + sessionInfo); + + if (sessionInfo == null) { + LOG.debug("session info not found in session storage"); + anonymous(uniEmitter); } - } - } - return principal(sessionInfo); + if (method != HttpMethod.GET && method != HttpMethod.HEAD) { + LOG.debug("path = " + path); + if (!path.equals("/api/auth/") && !path.equals("/api/auth")) { + if (csrfToken == null) { + LOG.warn("csrfToken is null"); + failed(uniEmitter); + } + if (!sessionInfo.csrfToken().equals(csrfToken)) { + LOG.error("bad csrfToken"); + failed(uniEmitter); + } + } + } + principal(uniEmitter, sessionInfo); + } + }); } - private CompletionStage anonymous() { - return principal(SessionInfo.ANONYMOUS); + private void anonymous(UniEmitter uniEmitter) { + principal(uniEmitter, SessionInfo.ANONYMOUS); } - private CompletionStage principal(SessionInfo sessionInfo) { - return CompletableFuture.completedFuture( - QuarkusSecurityIdentity.builder().setPrincipal(sessionInfo) + private void principal(UniEmitter uniEmitter, SessionInfo sessionInfo) { + uniEmitter.complete( + QuarkusSecurityIdentity.builder() + .setPrincipal(sessionInfo) .addRole(sessionInfo.role()) .build() ); } - private CompletionStage failed() { - CompletableFuture cf = new CompletableFuture(); - cf.completeExceptionally(new AuthenticationFailedException()); - return cf; + private void failed(UniEmitter uniEmitter) { + uniEmitter.fail(new AuthenticationFailedException()); } } diff --git a/pom.xml b/pom.xml index 8196076..c80b4f8 100644 --- a/pom.xml +++ b/pom.xml @@ -36,10 +36,10 @@ 1.8 UTF-8 UTF-8 - 1.3.1.Final + 1.4.2.Final quarkus-universe-bom io.quarkus - 1.3.1.Final + 1.4.2.Final 2.22.1 4.1.RC2 3.2.0