package dev.dinauer.oidcproxy.callback; import dev.dinauer.oidcproxy.callback.model.TokenResponse; import io.vertx.core.http.Cookie; import io.vertx.core.http.HttpServerRequest; import io.vertx.core.http.HttpServerResponse; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import org.eclipse.microprofile.config.inject.ConfigProperty; import java.time.ZonedDateTime; @ApplicationScoped public class CallbackService { @Inject OidcClient client; @Inject SessionRepository sessionRepository; @ConfigProperty(name = "oidc.proxy.client.redirect") String redirectURI; public void get(HttpServerResponse response, HttpServerRequest request) { String code = request.params().get("code"); TokenResponse token = client.exchangeAuthorizationCode(code); String sessionId = sessionRepository.add(token.accessToken()); response.addCookie(Cookie.cookie("session", sessionId).setHttpOnly(true).setSecure(true).setPath("/").setMaxAge((int) (token.expiresAt() - ZonedDateTime.now().toEpochSecond()))); response.setStatusCode(302); response.putHeader("Location", redirectURI); response.send(); } }