package com.airlock.iam.saml2.infrastructure.service;

import com.airlock.iam.base.api.domain.model.exception.FailureException;
import com.airlock.iam.saml2.domain.model.session.FlowFederationSession;
import com.airlock.iam.saml2.infrastructure.request.Saml2Request;
import com.airlock.iam.saml2.infrastructure.request.Saml2Response;
import com.sun.identity.plugin.session.SessionException;
import com.sun.identity.plugin.session.SessionManager;
import jakarta.inject.Inject;
import jakarta.inject.Provider;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class Saml2SessionProviderImpl implements Saml2SessionProvider {
   private final Provider<Saml2Request> request;
   private final Provider<Saml2Response> response;

   @Inject
   public Saml2SessionProviderImpl(Provider<Saml2Request> request, Provider<Saml2Response> response) {
      this.request = request;
      this.response = response;
   }

   @Override
   public void invalidateSession(FlowFederationSession session) {
      try {
         SessionManager.getProvider().invalidateSession(session, (HttpServletRequest)this.request.get(), (HttpServletResponse)this.response.get());
      } catch (SessionException e) {
         throw new FailureException(e);
      }
   }
}
