/*
* Copyright 2017 Graz University of Technology EAAF-Core Components has been developed in a
* cooperation between EGIZ, A-SIT Plus, A-SIT, and Graz University of Technology.
*
* Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European
* Commission - subsequent versions of the EUPL (the "Licence"); You may not use this work except in
* compliance with the Licence. You may obtain a copy of the Licence at:
* https://joinup.ec.europa.eu/news/understanding-eupl-v12
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence
* is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the Licence for the specific language governing permissions and limitations under
* the Licence.
*
* This product combines work with different licenses. See the "NOTICE" text file for details on the
* various modules and licenses. The "NOTICE" text file is part of the distribution. Any derivative
* works that you distribute must include a readable copy of the "NOTICE" text file.
*/
package at.gv.egiz.eaaf.core.api.idp.auth.services;
import java.io.IOException;
import javax.annotation.Nonnull;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import at.gv.egiz.eaaf.core.api.IRequest;
import at.gv.egiz.eaaf.core.api.logging.IStatisticLogger;
import at.gv.egiz.eaaf.core.exceptions.EaafException;
import at.gv.egiz.eaaf.core.exceptions.GuiBuildException;
import at.gv.egiz.eaaf.core.impl.data.Pair;
public interface IProtocolAuthenticationService {
String PARAM_GUI_ERROMSG = "errorMsg";
String PARAM_GUI_ERRORCODE = "errorCode";
String PARAM_GUI_EXTERNAL_ERRORCODE = "extErrorCode";
String PARAM_GUI_ERRORCODEPARAMS = "errorParams";
String PARAM_GUI_ERRORSTACKTRACE = "stacktrace";
String PARAM_GUI_TICKET = "supportTicket";
String PARAM_GUI_REDIRECT = "redirectLink";
/**
* Initialize an authentication process for this protocol request.
*
* @param httpReq HttpServletRequest
* @param httpResp HttpServletResponse
* @param pendingReq Authentication request which is actually in process
* @throws IOException In case of a communication error
* @throws EaafException In case of an application error
*/
void performAuthentication(@Nonnull HttpServletRequest httpReq, @Nonnull HttpServletResponse httpResp,
@Nonnull IRequest pendingReq) throws IOException, EaafException;
/**
* Finalize the requested protocol operation.
*
* @param httpReq HttpServletRequest
* @param httpResp HttpServletResponse
* @param pendingReq Authentication request which is actually in process
* @throws IOException If response can not be written into
* {@link HttpServletResponse}
* @throws EaafException If an internal error occur
*/
void finalizeAuthentication(@Nonnull HttpServletRequest httpReq, @Nonnull HttpServletResponse httpResp,
@Nonnull IRequest pendingReq) throws EaafException, IOException;
/**
* Build protocol-specific error message.
*
* @param throwable Exception that should be handled
* @param req Current open http request as {@link HttpServletRequest}
* @param resp Current open http response as {@link HttpServletResponse}
* @param pendingReq Authentication request which is actually in process
* @throws IOException If response can not be written into
* {@link HttpServletResponse}
* @throws EaafException If an internal error occur
*/
void buildProtocolSpecificErrorResponse(@Nonnull Throwable throwable, @Nonnull HttpServletRequest req,
@Nonnull HttpServletResponse resp, @Nonnull IRequest pendingReq) throws IOException, EaafException;
/**
* Handles all exceptions with no pending request. Therefore, the error is
* written to the users browser
*
* @param throwable Exception that should be handled
* @param req Current open http request as
* {@link HttpServletRequest}
* @param resp Current open http response as
* {@link HttpServletResponse}
* @param writeExceptionToStatisticLog if true
, the exception get
* logged into {@link IStatisticLogger}
* @throws IOException If response can not be written into
* {@link HttpServletResponse}
* @throws EaafException If an internal error occure
*/
void handleErrorNoRedirect(@Nonnull Throwable throwable, @Nonnull HttpServletRequest req,
@Nonnull HttpServletResponse resp, boolean writeExceptionToStatisticLog) throws IOException, EaafException;
/**
* Forward the process to error-handler in case of an error.
*
* @param errorToHandle Error to handle
* @param errorKey ErrorId for error-handler
* @param req HTTP response
* @param resp HTTP response
* @throws GuiBuildException In case of an GUI generation error
*/
void forwardToErrorHandler(@Nonnull Pair errorToHandle, @Nonnull String errorKey,
@Nonnull HttpServletRequest req, @Nonnull HttpServletResponse resp) throws GuiBuildException;
}