backend/src/main/java/dev/dinauer/maven/CustomAuthenticationMechanism.java
2026-04-19 17:18:36 +02:00

54 lines
2.3 KiB
Java

package dev.dinauer.maven;
import io.quarkus.oidc.AccessTokenCredential;
import io.quarkus.security.credential.PasswordCredential;
import io.quarkus.security.credential.TokenCredential;
import io.quarkus.security.identity.IdentityProviderManager;
import io.quarkus.security.identity.SecurityIdentity;
import io.quarkus.security.identity.request.TokenAuthenticationRequest;
import io.quarkus.security.identity.request.UsernamePasswordAuthenticationRequest;
import io.quarkus.security.runtime.QuarkusSecurityIdentity;
import io.quarkus.vertx.http.runtime.security.ChallengeData;
import io.quarkus.vertx.http.runtime.security.HttpAuthenticationMechanism;
import io.quarkus.vertx.http.runtime.security.HttpSecurityUtils;
import io.smallrye.mutiny.Uni;
import io.vertx.core.MultiMap;
import io.vertx.core.http.Cookie;
import io.vertx.ext.web.RoutingContext;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import net.bytebuddy.implementation.bind.MethodDelegationBinder;
import org.apache.commons.lang3.Strings;
import org.jboss.logging.Logger;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
@ApplicationScoped
public class CustomAuthenticationMechanism implements HttpAuthenticationMechanism
{
@Override
public Uni<SecurityIdentity> authenticate(RoutingContext context, IdentityProviderManager identityProviderManager)
{
context.put(CustomAuthenticationMechanism.class.getName(), this);
String authHeader = context.request().getHeader("Authorization");
if (authHeader != null && authHeader.startsWith("Basic "))
{
String[] sections = new String(Base64.getDecoder().decode(Strings.CI.removeStart(authHeader, "Basic "))).split(":");
if (sections.length == 2)
{
UsernamePasswordAuthenticationRequest request = new UsernamePasswordAuthenticationRequest(sections[0], new PasswordCredential(sections[1].toCharArray()));
HttpSecurityUtils.setRoutingContextAttribute(request, context);
return identityProviderManager.authenticate(request);
}
}
return Uni.createFrom().nullItem();
}
@Override
public Uni<ChallengeData> getChallenge(RoutingContext context)
{
return Uni.createFrom().item(new ChallengeData(401, "WWW-Authenticate", "Basic"));
}
}