36 lines
1.2 KiB
Java
36 lines
1.2 KiB
Java
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();
|
|
}
|
|
}
|