diff options
| author | Thomas Lenz <tlenz@iaik.tugraz.at> | 2016-02-18 12:22:57 +0100 | 
|---|---|---|
| committer | Thomas Lenz <tlenz@iaik.tugraz.at> | 2016-02-18 12:22:57 +0100 | 
| commit | 3cec20ee2161cb1a8c8c4516e47a8402d950957e (patch) | |
| tree | 292855dfb3debbb85c594ca6a4917cd47ae4d992 /id | |
| parent | c9370266c7553db65e9d18f7fe2a0230ab94d912 (diff) | |
| download | moa-id-spss-3cec20ee2161cb1a8c8c4516e47a8402d950957e.tar.gz moa-id-spss-3cec20ee2161cb1a8c8c4516e47a8402d950957e.tar.bz2 moa-id-spss-3cec20ee2161cb1a8c8c4516e47a8402d950957e.zip | |
fix problem with pending-requests and protocol specific error messages
Diffstat (limited to 'id')
30 files changed, 230 insertions, 194 deletions
| diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/TaskExecutionException.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/TaskExecutionException.java index 3e9f4cf14..932019d2c 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/TaskExecutionException.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/TaskExecutionException.java @@ -22,7 +22,9 @@   */  package at.gv.egovernment.moa.id.auth.modules; +import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.ProcessExecutionException; +import at.gv.egovernment.moa.util.MiscUtil;  /**   * @author tlenz @@ -32,14 +34,18 @@ public class TaskExecutionException extends ProcessExecutionException {  	private static final long serialVersionUID = 1L;  	Throwable originalException = null; +	String pendingRequestID = null;  	/**  	 * @param message  	 * @param cause  	 */ -	public TaskExecutionException(String message, Throwable cause) { +	public TaskExecutionException(IRequest pendingReq, String message, Throwable cause) {  		super(message, cause); -		originalException = cause; +		this.originalException = cause; +		 +		if (MiscUtil.isNotEmpty(pendingReq.getRequestID())) +			this.pendingRequestID = pendingReq.getRequestID();  	} @@ -50,7 +56,19 @@ public class TaskExecutionException extends ProcessExecutionException {  	 */  	public Throwable getOriginalException() {  		return originalException; +		  	} + +	/** +	 * Get the pending-request ID of that request, which was processed when the exception occurs  +	 *  +	 * @return the pendingRequestID +	 */ +	public String getPendingRequestID() { +		return pendingRequestID; +	} +	 +	 diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateInterfedeartionRequestTask.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateInterfedeartionRequestTask.java index 053f5d7ff..d0c12a6f3 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateInterfedeartionRequestTask.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateInterfedeartionRequestTask.java @@ -93,7 +93,7 @@ public class CreateInterfedeartionRequestTask extends AbstractAuthServletTask {  		if (MiscUtil.isEmpty(idpEntityID)) {  			Logger.info("Interfederation not possible -> not inderfederation IDP EntityID found!"); -			throw new TaskExecutionException("Interfederation not possible", new MOAIDException("No inderfederation-IDP EntityID found.", null)); +			throw new TaskExecutionException(pendingReq, "Interfederation not possible", new MOAIDException("No inderfederation-IDP EntityID found.", null));  		} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/EvaluateBKUSelectionTask.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/EvaluateBKUSelectionTask.java index 9db5baeab..3b18959a5 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/EvaluateBKUSelectionTask.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/EvaluateBKUSelectionTask.java @@ -31,12 +31,10 @@ import org.apache.commons.lang.StringEscapeUtils;  import org.springframework.stereotype.Service;  import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.exception.MOAIDException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask;  import at.gv.egovernment.moa.id.auth.modules.TaskExecutionException;  import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.api.ExecutionContext;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil; @@ -58,7 +56,7 @@ public class EvaluateBKUSelectionTask extends AbstractAuthServletTask {  			//load pending request  			String pendingReqID = request.getParameter(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID);	    		      			pendingReqID = StringEscapeUtils.escapeHtml(pendingReqID);						 -			IRequest pendingReq = requestStoreage.getPendingRequest(pendingReqID); +			pendingReq = requestStoreage.getPendingRequest(pendingReqID);  			if (pendingReq == null) {  				Logger.info("No PendingRequest with Id: " + executionContext.get("pendingRequestID") + " Maybe, a transaction timeout occure."); @@ -70,12 +68,11 @@ public class EvaluateBKUSelectionTask extends AbstractAuthServletTask {  			String newPendingRequestID = requestStoreage.changePendingRequestID(pendingReq);  			executionContext.put(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID, newPendingRequestID); -	    	AuthenticationSession moaSession = null;  	    	String moaSessionID = pendingReq.getMOASessionIdentifier();  	    	try { -	    	    moaSession = authenticatedSessionStorage.getSession(moaSessionID); +	    	    moasession = authenticatedSessionStorage.getSession(moaSessionID); -	    	    if (moaSession == null) { +	    	    if (moasession == null) {  					Logger.info("MOASession with SessionID="+ moaSessionID + " is not found in Database");  					throw new MOAIDException("init.04", new Object[] {  							moaSessionID}); @@ -108,11 +105,11 @@ public class EvaluateBKUSelectionTask extends AbstractAuthServletTask {  		} catch (MOAIDException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("EvaluateBKUSelectionTask has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		}  	} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/FinalizeAuthenticationTask.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/FinalizeAuthenticationTask.java index ed309d85a..4fd43b6ba 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/FinalizeAuthenticationTask.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/FinalizeAuthenticationTask.java @@ -29,15 +29,13 @@ import org.springframework.stereotype.Service;  import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants;  import at.gv.egovernment.moa.id.auth.builder.DataURLBuilder; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.exception.MOAIDException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask;  import at.gv.egovernment.moa.id.auth.modules.TaskExecutionException;  import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.moduls.RequestImpl;  import at.gv.egovernment.moa.id.process.api.ExecutionContext; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil; @@ -57,7 +55,7 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			throws TaskExecutionException {  		try { -			IRequest pendingReq = requestStoreage.getPendingRequest( +			pendingReq = requestStoreage.getPendingRequest(  					(String) executionContext.get(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID));	  			if (pendingReq == null) { @@ -67,16 +65,15 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			}  			//get Session from context -			String moasessionid = pendingReq.getMOASessionIdentifier(); -			AuthenticationSession session = null;				 +			String moasessionid = pendingReq.getMOASessionIdentifier();			  			if (MiscUtil.isEmpty(moasessionid)) {  				Logger.warn("MOASessionID is empty.");  				throw new MOAIDException("auth.18", new Object[] {});  			}  			try {			 -				session = authenticatedSessionStorage.getSession(moasessionid); -				if (session == null) { +				moasession = authenticatedSessionStorage.getSession(moasessionid); +				if (moasession == null) {  					Logger.info("MOASession with SessionID=" + moasessionid + " is not found in Database");  					throw new MOAIDException("init.04", new Object[] { moasessionid }); @@ -98,8 +95,8 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			//set MOASession to authenticated and store MOASession -			session.setAuthenticated(true); -			String newMOASessionID = authenticatedSessionStorage.changeSessionID(session); +			moasession.setAuthenticated(true); +			String newMOASessionID = authenticatedSessionStorage.changeSessionID(moasession);  			//set pendingRequest to authenticated and set new MOASessionID			  			((RequestImpl)pendingReq).setMOASessionIdentifier(newMOASessionID); @@ -109,7 +106,7 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			Logger.info("AuthProcess finished. Redirect to Protocol Dispatcher.");  			String redirectURL = new DataURLBuilder().buildDataURL(pendingReq.getAuthURL(),  -					AbstractProtocolModulController.FINALIZEPROTOCOL_ENDPOINT, pendingReq.getRequestID()); +					AbstractAuthProtocolModulController.FINALIZEPROTOCOL_ENDPOINT, pendingReq.getRequestID());  			response.setContentType("text/html");  			response.setStatus(302); @@ -117,11 +114,11 @@ public class FinalizeAuthenticationTask extends AbstractAuthServletTask {  			Logger.debug("REDIRECT TO: " + redirectURL);  		} catch (MOAIDException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("FinalizeAuthenticationTask has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GenerateBKUSelectionFrameTask.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GenerateBKUSelectionFrameTask.java index cb0b63276..47b68bc51 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GenerateBKUSelectionFrameTask.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GenerateBKUSelectionFrameTask.java @@ -37,7 +37,6 @@ import at.gv.egovernment.moa.id.auth.exception.MOAIDException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask;  import at.gv.egovernment.moa.id.auth.modules.TaskExecutionException;  import at.gv.egovernment.moa.id.config.auth.IOAAuthParameters; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.api.ExecutionContext;  import at.gv.egovernment.moa.logging.Logger; @@ -55,7 +54,7 @@ public class GenerateBKUSelectionFrameTask extends AbstractAuthServletTask {  	public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)  			throws TaskExecutionException {  		try { -			IRequest pendingReq = requestStoreage.getPendingRequest( +			pendingReq = requestStoreage.getPendingRequest(  					(String) executionContext.get(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID));  			if (pendingReq == null) { @@ -89,11 +88,11 @@ public class GenerateBKUSelectionFrameTask extends AbstractAuthServletTask {  		} catch (MOAIDException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("FinalizeAuthenticationTask has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/RestartAuthProzessManagement.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/RestartAuthProzessManagement.java index d8b558846..d7859dd8b 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/RestartAuthProzessManagement.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/RestartAuthProzessManagement.java @@ -57,8 +57,9 @@ public class RestartAuthProzessManagement  extends AbstractAuthServletTask {  	@Override  	public void execute(ExecutionContext executionContext, HttpServletRequest request, HttpServletResponse response)  			throws TaskExecutionException { +		IRequest pendingReq = null;  		try { -			IRequest pendingReq = requestStoreage.getPendingRequest( +			pendingReq = requestStoreage.getPendingRequest(  					(String) executionContext.get(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID));  			if (pendingReq == null) { @@ -110,11 +111,11 @@ public class RestartAuthProzessManagement  extends AbstractAuthServletTask {  		} catch (MOAIDException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("RestartAuthProzessManagement has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		}			 diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractController.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractController.java index 887692477..acff2e40e 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractController.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractController.java @@ -52,7 +52,7 @@ import at.gv.egovernment.moa.id.config.ConfigurationException;  import at.gv.egovernment.moa.id.config.auth.AuthConfiguration;  import at.gv.egovernment.moa.id.moduls.IRequestStorage;  import at.gv.egovernment.moa.id.process.ProcessExecutionException; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.id.protocols.pvp2x.exceptions.AuthnRequestValidatorException;  import at.gv.egovernment.moa.id.storage.ITransactionStorage;  import at.gv.egovernment.moa.id.util.ErrorResponseUtils; @@ -78,35 +78,65 @@ public abstract class AbstractController extends MOAIDAuthConstants {  	@Autowired protected ITransactionStorage transactionStorage;  	@Autowired protected MOAReversionLogger revisionsLogger;  	@Autowired protected AuthConfiguration authConfig; -		 -	protected void handleError(String errorMessage, Throwable exceptionThrown, -			HttpServletRequest req, HttpServletResponse resp, String pendingRequestID) throws IOException { -		Throwable loggedException = extractOriginalExceptionFromProcessException(exceptionThrown); +	@ExceptionHandler({MOAIDException.class}) +	public void MOAIDExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) throws IOException {				 +		Logger.error(e.getMessage() , e); +		internalMOAIDExceptionHandler(req, resp, e, true); -		if (!(loggedException instanceof MOAIDException)) { -			Logger.error("Receive an internal error: Message=" + loggedException.getMessage(), loggedException); +	} -		} else { -			if (Logger.isDebugEnabled() || Logger.isTraceEnabled()) { -				Logger.error(loggedException.getMessage(), loggedException); +	@ExceptionHandler({Exception.class}) +	public void GenericExceptionHandler(HttpServletResponse resp, Exception exception) throws IOException { +		Logger.error("Internel Server Error." , exception); +		resp.setContentType("text/html;charset=UTF-8"); +		resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error!" + +				"(Errorcode=9199" +				+" | Description="+ exception.getMessage() + ")"); +		return; +		 +	} -			} else { -				Logger.error(loggedException.getMessage()); +	@ExceptionHandler({IOException.class}) +	public void IOExceptionHandler(HttpServletResponse resp, IOException exception) { +		Logger.error("Internel Server Error." , exception); +		resp.setContentType("text/html;charset=UTF-8"); +		resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); +		return; +		 +	} -			}			 -		} +	protected void handleError(String errorMessage, Throwable exceptionThrown, +			HttpServletRequest req, HttpServletResponse resp, String pendingRequestID) throws IOException { -		//store error into transaction store -		try { -			String key = Random.nextRandom();			 -			transactionStorage.put(key, loggedException); +		Throwable loggedException = null; +		Throwable extractedException = extractOriginalExceptionFromProcessException(exceptionThrown); +		 +		//extract pendingRequestID and originalException if it was a TaskExecutionException +		if (extractedException instanceof TaskExecutionException) { +			//set original exception +			loggedException = ((TaskExecutionException) extractedException).getOriginalException(); -			if (key != null && MiscUtil.isNotEmpty(pendingRequestID)) { +			//set pending-request ID if it is set +			String reqID = ((TaskExecutionException) extractedException).getPendingRequestID(); +			if (MiscUtil.isNotEmpty(reqID)) +				pendingRequestID = reqID;  +						 +		} else +			loggedException = exceptionThrown; +					 +		try {			 +			//switch to protocol-finalize method to generate a protocol-specific error message  +			if (MiscUtil.isNotEmpty(pendingRequestID)) {				 +				 +				//put exception into transaction store for redirect +				String key = Random.nextRandom();			 +				transactionStorage.put(key, loggedException); +				 +				//build up redirect URL  				String redirectURL = null; -  				redirectURL = ServletUtils.getBaseUrl(req);	 -				redirectURL += "/"+AbstractProtocolModulController.FINALIZEPROTOCOL_ENDPOINT  +				redirectURL += "/"+AbstractAuthProtocolModulController.FINALIZEPROTOCOL_ENDPOINT   						+ "?" + ERROR_CODE_PARAM + "=" + key   				+ "&" + MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID + "=" + pendingRequestID; @@ -119,7 +149,8 @@ public abstract class AbstractController extends MOAIDAuthConstants {  				return;  			} else {	 -				//Exception can not be stored in database +				//write exception into browser window, because protocol-specific error message +				// is not possible without pendingRequest  				handleErrorNoRedirect(loggedException, req, resp, true);  			} @@ -132,8 +163,7 @@ public abstract class AbstractController extends MOAIDAuthConstants {  	} -	 -	 +		  	/**  	 * Handles all exceptions with no pending request.  	 * Therefore, the error is written to the users browser @@ -151,71 +181,36 @@ public abstract class AbstractController extends MOAIDAuthConstants {  			statisticLogger.logErrorOperation(throwable);  		//write errror to console -		Logger.error(throwable.getMessage(), throwable); +		logExceptionToTechnicalLog(throwable);  		//return error to Web browser  		if (throwable instanceof MOAIDException || throwable instanceof ProcessExecutionException) -			MOAIDExceptionHandler(req, resp, (Exception)throwable); +			internalMOAIDExceptionHandler(req, resp, (Exception)throwable, false);  		else  			GenericExceptionHandler(resp, (Exception)throwable);  	} -	@ExceptionHandler({MOAIDException.class}) -	public void MOAIDExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e) throws IOException {				 -		if (e instanceof ProtocolNotActiveException) { -			resp.getWriter().write(e.getMessage()); -			resp.setContentType("text/html;charset=UTF-8"); -			resp.sendError(HttpServletResponse.SC_FORBIDDEN, e.getMessage()); -		 -		} else if (e instanceof AuthnRequestValidatorException) { -			AuthnRequestValidatorException ex = (AuthnRequestValidatorException)e; -			//log Error Message -			statisticLogger.logErrorOperation(ex, ex.getErrorRequest()); -			 -			//write error message -			writeBadRequestErrorResponse(req, resp, (MOAIDException) e);			 -		 -		} else if (e instanceof InvalidProtocolRequestException) {		 -			//send error response -			writeBadRequestErrorResponse(req, resp, (MOAIDException) e); -			 -		} else if (e instanceof ConfigurationException) { -			//send HTML formated error message -			writeHTMLErrorResponse(resp, (MOAIDException) e); -		 -		} else if (e instanceof MOAIDException) { -			//send HTML formated error message -			writeHTMLErrorResponse(resp, e); -					 -		} else if (e instanceof ProcessExecutionException) { -			//send HTML formated error message -			writeHTMLErrorResponse(resp, e); -					 -		} -		 -	} +	/** +	 * Write a Exception to the MOA-ID-Auth internal technical log +	 *  +	 * @param loggedException Exception to log +	 */	 +	protected void logExceptionToTechnicalLog(Throwable loggedException) { +		if (!(loggedException instanceof MOAIDException)) { +			Logger.error("Receive an internal error: Message=" + loggedException.getMessage(), loggedException); -	@ExceptionHandler({Exception.class}) -	public void GenericExceptionHandler(HttpServletResponse resp, Exception exception) throws IOException { -		Logger.error("Internel Server Error." , exception); -		resp.setContentType("text/html;charset=UTF-8"); -		resp.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error!" + -				"(Errorcode=9199" -				+" | Description="+ exception.getMessage() + ")"); -		return; -		 -	} +		} else { +			if (Logger.isDebugEnabled() || Logger.isTraceEnabled()) { +				Logger.error(loggedException.getMessage(), loggedException); -	@ExceptionHandler({IOException.class}) -	public void IOExceptionHandler(HttpServletResponse resp, IOException exception) { -		Logger.error("Internel Server Error." , exception); -		resp.setContentType("text/html;charset=UTF-8"); -		resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); -		return; -		 -	} +			} else { +				Logger.error(loggedException.getMessage()); +			}			 +		}		 +	} +		  	private void writeBadRequestErrorResponse(HttpServletRequest req, HttpServletResponse resp, MOAIDException e) throws IOException {  		ErrorResponseUtils utils = ErrorResponseUtils.getInstance();  		String code = utils.mapInternalErrorToExternalError( @@ -295,21 +290,68 @@ public abstract class AbstractController extends MOAIDAuthConstants {  	    return errors.toString();  	} -	 +		 +	/** +	 * Extracts a TaskExecutionException of a ProcessExecutionExeception Stacktrace. +	 *  +	 * @param exception  +	 * @return Return the latest TaskExecutionExecption if exists, otherwise the latest ProcessExecutionException +	 */  	private Throwable extractOriginalExceptionFromProcessException(Throwable exception) { -		Throwable returnexception = exception; +		Throwable exholder = exception; +		TaskExecutionException taskExc = null; -		while(returnexception != null  -				&& returnexception instanceof ProcessExecutionException) { -			ProcessExecutionException procExc = (ProcessExecutionException) returnexception; +		while(exholder != null  +				&& exholder instanceof ProcessExecutionException) { +			ProcessExecutionException procExc = (ProcessExecutionException) exholder;  			if (procExc.getCause() != null &&   					procExc.getCause() instanceof TaskExecutionException) { -				TaskExecutionException taskExc = (TaskExecutionException) procExc.getCause(); -				returnexception = taskExc.getOriginalException(); +				taskExc = (TaskExecutionException) procExc.getCause(); +				exholder = taskExc.getOriginalException();  			}  		} -		return returnexception; +		if (taskExc == null) +			return exholder; +		 +		else +			return taskExc; +	} +	 +	private void internalMOAIDExceptionHandler(HttpServletRequest req, HttpServletResponse resp, Exception e, boolean writeExceptionToStatisicLog) throws IOException {				 +		if (e instanceof ProtocolNotActiveException) { +			resp.getWriter().write(e.getMessage()); +			resp.setContentType("text/html;charset=UTF-8"); +			resp.sendError(HttpServletResponse.SC_FORBIDDEN, e.getMessage()); +		 +		} else if (e instanceof AuthnRequestValidatorException) { +			AuthnRequestValidatorException ex = (AuthnRequestValidatorException)e; +			//log Error Message +			if (writeExceptionToStatisicLog) +				statisticLogger.logErrorOperation(ex, ex.getErrorRequest()); +			 +			//write error message +			writeBadRequestErrorResponse(req, resp, (MOAIDException) e);			 +		 +		} else if (e instanceof InvalidProtocolRequestException) {		 +			//send error response +			writeBadRequestErrorResponse(req, resp, (MOAIDException) e); +			 +		} else if (e instanceof ConfigurationException) { +			//send HTML formated error message +			writeHTMLErrorResponse(resp, (MOAIDException) e); +		 +		} else if (e instanceof MOAIDException) { +			//send HTML formated error message +			writeHTMLErrorResponse(resp, e); +					 +		} else if (e instanceof ProcessExecutionException) { +			//send HTML formated error message +			writeHTMLErrorResponse(resp, e); +					 +		} +		  	} +	  } diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractProcessEngineSignalController.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractProcessEngineSignalController.java index 375afca4d..2abe1582d 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractProcessEngineSignalController.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/auth/servlet/AbstractProcessEngineSignalController.java @@ -52,6 +52,8 @@ public abstract class AbstractProcessEngineSignalController extends AbstractCont  			// wake up next task
  			processEngine.signal(pendingReq.getProcessInstanceId());
 +			//TODO:
 +			
  		} catch (Exception ex) {
  			handleError(null, ex, req, resp, pendingRequestID);
 diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/AbstractProtocolModulController.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/AbstractAuthProtocolModulController.java index de64ec98e..5341951d2 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/AbstractProtocolModulController.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/AbstractAuthProtocolModulController.java @@ -52,7 +52,7 @@ import at.gv.egovernment.moa.util.MiscUtil;   *   */ -public abstract class AbstractProtocolModulController extends AbstractController implements IModulInfo { +public abstract class AbstractAuthProtocolModulController extends AbstractController implements IModulInfo {  	public static final String FINALIZEPROTOCOL_ENDPOINT = "finalizeAuthProtocol";	 @@ -217,6 +217,9 @@ public abstract class AbstractProtocolModulController extends AbstractController  			if (handlingModule.generateErrorMessage(  					throwable, req, resp, protocolRequest)) { +				//log Error to technical log +				logExceptionToTechnicalLog(throwable); +				  				//log Error Message  				statisticLogger.logErrorOperation(throwable, protocolRequest); diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/ProtocolFinalizationController.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/ProtocolFinalizationController.java index 107212c38..8c3f2c946 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/ProtocolFinalizationController.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/ProtocolFinalizationController.java @@ -45,7 +45,7 @@ import at.gv.egovernment.moa.logging.Logger;   *   */  @Controller -public class ProtocolFinalizationController extends AbstractProtocolModulController { +public class ProtocolFinalizationController extends AbstractAuthProtocolModulController {  	@RequestMapping(value = "/finalizeAuthProtocol", method = {RequestMethod.GET})  	public void finalizeAuthProtocol(HttpServletRequest req, HttpServletResponse resp) throws MOAIDException, IOException { diff --git a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/PVP2XProtocol.java b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/PVP2XProtocol.java index fc4928366..6fb03a37d 100644 --- a/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/PVP2XProtocol.java +++ b/id/server/idserverlib/src/main/java/at/gv/egovernment/moa/id/protocols/pvp2x/PVP2XProtocol.java @@ -66,7 +66,7 @@ import at.gv.egovernment.moa.id.config.auth.AuthConfigurationProviderFactory;  import at.gv.egovernment.moa.id.config.auth.OAAuthParameter;  import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.moduls.NoPassivAuthenticationException; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.id.protocols.pvp2x.binding.IEncoder;  import at.gv.egovernment.moa.id.protocols.pvp2x.binding.PostBinding;  import at.gv.egovernment.moa.id.protocols.pvp2x.binding.RedirectBinding; @@ -97,7 +97,7 @@ import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil;  @Controller -public class PVP2XProtocol extends AbstractProtocolModulController  { +public class PVP2XProtocol extends AbstractAuthProtocolModulController  {  	public static final String NAME = PVP2XProtocol.class.getName();  	public static final String PATH = "id_pvp2x"; diff --git a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/CreateSAML1AssertionTask.java b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/CreateSAML1AssertionTask.java index 7490391f2..efec14f6b 100644 --- a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/CreateSAML1AssertionTask.java +++ b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/CreateSAML1AssertionTask.java @@ -53,7 +53,7 @@ public class CreateSAML1AssertionTask implements Task {  			executionContext.put("SAML1Assertion", IOUtils.toString(in, Charset.forName("UTF-8")));  		} catch (IOException e) { -			throw new TaskExecutionException("", e); +			throw new TaskExecutionException(null, "", e);  		}  	} diff --git a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/GetIdentityLinkTask.java b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/GetIdentityLinkTask.java index 90bd0a32f..30499d009 100644 --- a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/GetIdentityLinkTask.java +++ b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/GetIdentityLinkTask.java @@ -49,7 +49,7 @@ public class GetIdentityLinkTask implements Task {  			executionContext.put("IdentityLink", IOUtils.toString(in, Charset.forName("UTF-8")));  		} catch (IOException e) { -			throw new TaskExecutionException("", e); +			throw new TaskExecutionException(null, "", e);  		}  	} diff --git a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/SignAuthBlockTask.java b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/SignAuthBlockTask.java index 6d481dc01..feba11a64 100644 --- a/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/SignAuthBlockTask.java +++ b/id/server/idserverlib/src/test/java/at/gv/egovernment/moa/id/process/spring/test/task/SignAuthBlockTask.java @@ -51,7 +51,7 @@ public class SignAuthBlockTask implements Task {  		try (InputStream in = getClass().getResourceAsStream("SignedAuthBlock.xml")) {  			executionContext.put("SignedAuthBlock", IOUtils.toString(in, Charset.forName("UTF-8")));  		} catch (IOException e) { -			throw new TaskExecutionException("", e); +			throw new TaskExecutionException(null, "", e);  		}  	} diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CertificateReadRequestTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CertificateReadRequestTask.java index a2dc54a37..d6a4295a4 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CertificateReadRequestTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CertificateReadRequestTask.java @@ -117,13 +117,13 @@ public class CertificateReadRequestTask extends AbstractAuthServletTask {  					AuthenticationServer.REQ_PROCESS_VALIDATOR_INPUT, "VerifyIdentityLink", dataurl);  		} catch (MOAIDException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		} catch (IOException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (MOADatabaseException e1) { -			throw new TaskExecutionException(e1.getMessage(), e1); +			throw new TaskExecutionException(pendingReq, e1.getMessage(), e1);  		} finally { diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateIdentityLinkFormTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateIdentityLinkFormTask.java index 370236bf4..cfa226654 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateIdentityLinkFormTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/CreateIdentityLinkFormTask.java @@ -85,17 +85,17 @@ public class CreateIdentityLinkFormTask extends AbstractAuthServletTask {  			}  		} catch (WrongParametersException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		}  		catch (MOAIDException ex) {  			Logger.info("GetIdentityLink request generation FAILED. Reason:" + ex.getMessage()); -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		} catch (Exception e) {  			Logger.error("CreateIdentityLinkFormTask has an interal Error.", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GetForeignIDTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GetForeignIDTask.java index 50b71a660..2f90d134f 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GetForeignIDTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GetForeignIDTask.java @@ -82,7 +82,7 @@ public class GetForeignIDTask extends AbstractAuthServletTask {  		} catch (FileUploadException | IOException e) {  			Logger.error("Parsing mulitpart/form-data request parameters failed: " + e.getMessage()); -			throw new TaskExecutionException("Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage())); +			throw new TaskExecutionException(pendingReq, "Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage()));  		}  		try { @@ -158,11 +158,11 @@ public class GetForeignIDTask extends AbstractAuthServletTask {  			}  		} catch (MOAIDException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		} catch (Exception e) {  			Logger.error("GetForeignIDServlet has an interal Error.", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GetMISSessionIDTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GetMISSessionIDTask.java index 8f7f5fd80..68a7a9e66 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GetMISSessionIDTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/GetMISSessionIDTask.java @@ -120,23 +120,23 @@ public class GetMISSessionIDTask extends AbstractAuthServletTask {  		} catch (MOAIDException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		} catch (GeneralSecurityException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		} catch (PKIException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (SAXException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (ParserConfigurationException e) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  	    } catch (Exception e) {  	    	Logger.error("MISMandateValidation has an interal Error.", e); -	    	throw new TaskExecutionException(e.getMessage(), e); +	    	throw new TaskExecutionException(pendingReq, e.getMessage(), e);  	    }  	    finally { diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/InitializeBKUAuthenticationTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/InitializeBKUAuthenticationTask.java index ba2c9d108..705f4f200 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/InitializeBKUAuthenticationTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/InitializeBKUAuthenticationTask.java @@ -178,11 +178,11 @@ public class InitializeBKUAuthenticationTask extends AbstractAuthServletTask {  		} catch (MOADatabaseException | MOAIDException e) {  			Logger.info("Initialize BKUAuthentication FAILED. Reason:" + e.getMessage()); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} catch (Exception e) {  			Logger.warn("InitializeBKUAuthentication has an internal error", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareAuthBlockSignatureTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareAuthBlockSignatureTask.java index bd8377373..b80abd72f 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareAuthBlockSignatureTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareAuthBlockSignatureTask.java @@ -64,11 +64,11 @@ public class PrepareAuthBlockSignatureTask extends AbstractAuthServletTask {  					"VerifyIdentityLink");  		} catch (MOAIDException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		} catch (Exception e) {  			Logger.error("IdentityLinkValidation has an interal Error.", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		}  		finally { diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareGetMISMandateTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareGetMISMandateTask.java index 6c0fe3774..c422bc83f 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareGetMISMandateTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/PrepareGetMISMandateTask.java @@ -151,7 +151,7 @@ public class PrepareGetMISMandateTask extends AbstractAuthServletTask {  	    	Logger.debug("REDIRECT TO: " + redirectMISGUI);  		} catch (Exception e ) { -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		}   	} diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyAuthenticationBlockTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyAuthenticationBlockTask.java index e8f68c514..7716cd43a 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyAuthenticationBlockTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyAuthenticationBlockTask.java @@ -74,7 +74,7 @@ public class VerifyAuthenticationBlockTask extends AbstractAuthServletTask {  	    } catch (FileUploadException | IOException e) {  	      Logger.error("Parsing mulitpart/form-data request parameters failed: " + e.getMessage()); -	      throw new TaskExecutionException("Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage())); +	      throw new TaskExecutionException(pendingReq, "Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage()));  	    } @@ -100,11 +100,11 @@ public class VerifyAuthenticationBlockTask extends AbstractAuthServletTask {  		}  		catch (MOAIDException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  	    } catch (Exception e) {  	    	Logger.error("AuthBlockValidation has an interal Error.", e); -	    	throw new TaskExecutionException(e.getMessage(), e); +	    	throw new TaskExecutionException(pendingReq, e.getMessage(), e);  	    } diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyCertificateTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyCertificateTask.java index 6c220fd79..41726c1f4 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyCertificateTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyCertificateTask.java @@ -72,7 +72,7 @@ public class VerifyCertificateTask extends AbstractAuthServletTask {  	    } catch (FileUploadException | IOException e)   	    {  	      Logger.error("Parsing mulitpart/form-data request parameters failed: " + e.getMessage()); -	      throw new TaskExecutionException("Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage())); +	      throw new TaskExecutionException(pendingReq, "Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage()));  	     }  	    try { @@ -136,11 +136,11 @@ public class VerifyCertificateTask extends AbstractAuthServletTask {  	    	}	    		    	   	    }  	    catch (MOAIDException ex) { -	    	throw new TaskExecutionException(ex.getMessage(), ex); +	    	throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  	    } catch (Exception e) {  	    	Logger.error("CertificateValidation has an interal Error.", e); -	    	throw new TaskExecutionException(e.getMessage(), e); +	    	throw new TaskExecutionException(pendingReq, e.getMessage(), e);  	    } diff --git a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyIdentityLinkTask.java b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyIdentityLinkTask.java index 267d5ea0b..054439ff7 100644 --- a/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyIdentityLinkTask.java +++ b/id/server/modules/moa-id-modul-citizencard_authentication/src/main/java/at/gv/egovernment/moa/id/auth/modules/internal/tasks/VerifyIdentityLinkTask.java @@ -60,7 +60,7 @@ public class VerifyIdentityLinkTask extends AbstractAuthServletTask {  			parameters = getParameters(req);  		} catch (Exception e) {  			Logger.error("Parsing mulitpart/form-data request parameters failed: " + e.getMessage()); -			throw new TaskExecutionException("Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage())); +			throw new TaskExecutionException(pendingReq, "Parsing mulitpart/form-data request parameters failed", new IOException(e.getMessage()));  		}  		try { @@ -80,14 +80,14 @@ public class VerifyIdentityLinkTask extends AbstractAuthServletTask {  			executionContext.put("identityLinkAvailable", identityLinkAvailable);  		} catch (ParseException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		} catch (MOAIDException ex) { -			throw new TaskExecutionException(ex.getMessage(), ex); +			throw new TaskExecutionException(pendingReq, ex.getMessage(), ex);  		} catch (Exception e) {  			Logger.error("IdentityLinkValidation has an interal Error.", e); -			throw new TaskExecutionException(e.getMessage(), e); +			throw new TaskExecutionException(pendingReq, e.getMessage(), e);  		} diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/CreateIdentityLinkTask.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/CreateIdentityLinkTask.java index 22dcf0bf3..ed2de77ad 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/CreateIdentityLinkTask.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/CreateIdentityLinkTask.java @@ -42,7 +42,6 @@ import org.xml.sax.SAXException;  import at.gv.egovernment.moa.id.advancedlogging.MOAIDEventConstants;  import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.data.AuthenticationSessionStorageConstants;  import at.gv.egovernment.moa.id.auth.data.IdentityLink;  import at.gv.egovernment.moa.id.auth.exception.MOAIDException; @@ -53,7 +52,6 @@ import at.gv.egovernment.moa.id.auth.modules.eidas.exceptions.eIDASAttributeExce  import at.gv.egovernment.moa.id.auth.parser.IdentityLinkAssertionParser;  import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException;  import at.gv.egovernment.moa.id.config.auth.IOAAuthParameters; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.api.ExecutionContext;  import at.gv.egovernment.moa.id.util.IdentityLinkReSigner;  import at.gv.egovernment.moa.logging.Logger; @@ -87,7 +85,7 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {  				throw new MOAIDException("auth.10", new Object[]{"VerifyIdentityLink", "pendingRequestID"});  			} -			IRequest pendingReq = requestStoreage.getPendingRequest(pendingRequestID);	 +			pendingReq = requestStoreage.getPendingRequest(pendingRequestID);	  			if (pendingReq == null) {  				Logger.info("No PendingRequest with Id: " + pendingRequestID + " Maybe, a transaction timeout occure."); @@ -99,7 +97,6 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {  			String newPendingRequestID = requestStoreage.changePendingRequestID(pendingReq);  			executionContext.put(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID, newPendingRequestID); -			AuthenticationSession moasession = null;;  			try {			  				moasession  = authenticatedSessionStorage.getSession(pendingReq.getMOASessionIdentifier()); @@ -201,10 +198,10 @@ public class CreateIdentityLinkTask extends AbstractAuthServletTask {  			authenticatedSessionStorage.storeSession(moasession);  		} catch (ParseException | MOAIDException | MOADatabaseException | ParserConfigurationException | SAXException | IOException e) { -			throw new TaskExecutionException("IdentityLink generation for foreign person FAILED.", e); +			throw new TaskExecutionException(pendingReq, "IdentityLink generation for foreign person FAILED.", e);  		} catch (eIDASAttributeException e) { -			throw new TaskExecutionException("Minimum required eIDAS attributeset not found.", e); +			throw new TaskExecutionException(pendingReq, "Minimum required eIDAS attributeset not found.", e);  		}	 diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/GenerateAuthnRequestTask.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/GenerateAuthnRequestTask.java index 5af6a294b..2f7e4eb28 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/GenerateAuthnRequestTask.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/GenerateAuthnRequestTask.java @@ -41,7 +41,6 @@ import org.apache.velocity.app.VelocityEngine;  import org.springframework.stereotype.Service;  import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.exception.AuthenticationException;  import at.gv.egovernment.moa.id.auth.exception.MOAIDException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask; @@ -53,7 +52,6 @@ import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException;  import at.gv.egovernment.moa.id.config.auth.IOAAuthParameters;  import at.gv.egovernment.moa.id.config.stork.CPEPS;  import at.gv.egovernment.moa.id.config.stork.StorkAttribute; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.api.ExecutionContext;  import at.gv.egovernment.moa.id.util.VelocityProvider;  import at.gv.egovernment.moa.logging.Logger; @@ -95,7 +93,7 @@ public class GenerateAuthnRequestTask extends AbstractAuthServletTask {  				throw new MOAIDException("auth.10", new Object[]{"VerifyIdentityLink", "pendingRequestID"});  			} -			IRequest pendingReq = requestStoreage.getPendingRequest(pendingRequestID);	 +			pendingReq = requestStoreage.getPendingRequest(pendingRequestID);	  			if (pendingReq == null) {  				Logger.info("No PendingRequest with Id: " + pendingRequestID + " Maybe, a transaction timeout occure."); @@ -107,7 +105,6 @@ public class GenerateAuthnRequestTask extends AbstractAuthServletTask {  			String newPendingRequestID = requestStoreage.changePendingRequestID(pendingReq);  			executionContext.put(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID, newPendingRequestID); -			AuthenticationSession moasession = null;;  			try {			  				moasession  = authenticatedSessionStorage.getSession(pendingReq.getMOASessionIdentifier()); @@ -227,14 +224,13 @@ public class GenerateAuthnRequestTask extends AbstractAuthServletTask {  		}catch (EIDASSAMLEngineException e){  			Logger.error("eIDAS AuthnRequest generation FAILED.", e); -			throw new TaskExecutionException("eIDAS AuthnRequest generation FAILED.",  +			throw new TaskExecutionException(pendingReq, "eIDAS AuthnRequest generation FAILED.",   					new EIDASEngineException("Could not generate token for Saml Request", e)); -		} catch (EIDASEngineException | MOAIDException e) { -			throw new TaskExecutionException("eIDAS AuthnRequest generation FAILED.", e); +		} catch (EIDASEngineException | MOAIDException | MOADatabaseException e) { +			throw new TaskExecutionException(pendingReq, "eIDAS AuthnRequest generation FAILED.", e); -		}	 - +		}   	}  } diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/ReceiveAuthnResponseTask.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/ReceiveAuthnResponseTask.java index c8575c2da..5a7e77bc7 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/ReceiveAuthnResponseTask.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/auth/modules/eidas/tasks/ReceiveAuthnResponseTask.java @@ -10,7 +10,6 @@ import org.apache.commons.lang3.ObjectUtils;  import org.springframework.stereotype.Service;  import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants; -import at.gv.egovernment.moa.id.auth.data.AuthenticationSession;  import at.gv.egovernment.moa.id.auth.data.AuthenticationSessionStorageConstants;  import at.gv.egovernment.moa.id.auth.exception.MOAIDException;  import at.gv.egovernment.moa.id.auth.modules.AbstractAuthServletTask; @@ -20,9 +19,7 @@ import at.gv.egovernment.moa.id.auth.modules.eidas.exceptions.EIDASEngineExcepti  import at.gv.egovernment.moa.id.auth.modules.eidas.utils.MOAPersonalAttributeList;  import at.gv.egovernment.moa.id.auth.modules.eidas.utils.SAMLEngineUtils;  import at.gv.egovernment.moa.id.commons.db.ex.MOADatabaseException; -import at.gv.egovernment.moa.id.config.auth.AuthConfigurationProviderFactory;  import at.gv.egovernment.moa.id.config.auth.IOAAuthParameters; -import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.process.api.ExecutionContext;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil; @@ -48,7 +45,7 @@ public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {  				throw new MOAIDException("auth.10", new Object[]{"VerifyIdentityLink", "pendingRequestID"});  			} -			IRequest pendingReq = requestStoreage.getPendingRequest(pendingRequestID);	 +			pendingReq = requestStoreage.getPendingRequest(pendingRequestID);	  			if (pendingReq == null) {  				Logger.info("No PendingRequest with Id: " + pendingRequestID + " Maybe, a transaction timeout occure."); @@ -60,7 +57,6 @@ public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {  			String newPendingRequestID = requestStoreage.changePendingRequestID(pendingReq);  			executionContext.put(MOAIDAuthConstants.PARAM_TARGET_PENDINGREQUESTID, newPendingRequestID); -			AuthenticationSession moasession = null;;  			try {			  				moasession  = authenticatedSessionStorage.getSession(pendingReq.getMOASessionIdentifier()); @@ -110,7 +106,6 @@ public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {  			//update MOA-Session data with received information			  			Logger.debug("Store eIDAS response information into MOA-session.");  			moasession.setQAALevel(samlResp.getAssuranceLevel()); -			moasession.setCcc(samlResp.getCountry());  			moasession.setGenericDataToSession(  					AuthenticationSessionStorageConstants.eIDAS_ATTRIBUTELIST,  @@ -119,20 +114,17 @@ public class ReceiveAuthnResponseTask extends AbstractAuthServletTask {  			moasession.setGenericDataToSession(  					AuthenticationSessionStorageConstants.eIDAS_RESPONSE,   					decSamlToken); - -			//set general information to MOA-Session -			moasession.setAuthURL(AuthConfigurationProviderFactory.getInstance().getPublicURLPrefix() + "/");  			//store MOA-session to database  			authenticatedSessionStorage.storeSession(moasession);  		}catch (EIDASSAMLEngineException e) {  			Logger.error("eIDAS AuthnRequest generation FAILED.", e); -			throw new TaskExecutionException("eIDAS Response processing FAILED.",  +			throw new TaskExecutionException(pendingReq, "eIDAS Response processing FAILED.",   					new EIDASEngineException("Could not validate eIDAS response", e));  		} catch (EIDASEngineException | MOAIDException | MOADatabaseException e) { -			throw new TaskExecutionException("eIDAS Response processing FAILED.", e); +			throw new TaskExecutionException(pendingReq, "eIDAS Response processing FAILED.", e);  		}	 diff --git a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASProtocol.java b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASProtocol.java index 5c2ed4148..cf3960815 100644 --- a/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASProtocol.java +++ b/id/server/modules/moa-id-module-eIDAS/src/main/java/at/gv/egovernment/moa/id/protocols/eidas/EIDASProtocol.java @@ -23,7 +23,6 @@  package at.gv.egovernment.moa.id.protocols.eidas;  import java.io.IOException; -import java.util.HashMap;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse; @@ -32,22 +31,15 @@ import org.springframework.web.bind.annotation.RequestMapping;  import org.springframework.web.bind.annotation.RequestMethod;  import at.gv.egovernment.moa.id.advancedlogging.MOAIDEventConstants; -import at.gv.egovernment.moa.id.auth.MOAIDAuthConstants;  import at.gv.egovernment.moa.id.auth.exception.AuthenticationException;  import at.gv.egovernment.moa.id.auth.exception.MOAIDException; -import at.gv.egovernment.moa.id.auth.exception.ProtocolNotActiveException;  import at.gv.egovernment.moa.id.auth.modules.eidas.Constants;  import at.gv.egovernment.moa.id.auth.modules.eidas.utils.MOAPersonalAttributeList;  import at.gv.egovernment.moa.id.auth.modules.eidas.utils.SAMLEngineUtils;  import at.gv.egovernment.moa.id.config.auth.AuthConfigurationProviderFactory;  import at.gv.egovernment.moa.id.config.auth.OAAuthParameter; -import at.gv.egovernment.moa.id.moduls.IAction; -import at.gv.egovernment.moa.id.moduls.IModulInfo;  import at.gv.egovernment.moa.id.moduls.IRequest; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; -import at.gv.egovernment.moa.id.protocols.pvp2x.AuthenticationAction; -import at.gv.egovernment.moa.id.protocols.pvp2x.MetadataAction; -import at.gv.egovernment.moa.id.protocols.pvp2x.PVPTargetConfiguration; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil;  import eu.eidas.auth.commons.EIDASAuthnRequest; @@ -59,7 +51,7 @@ import eu.eidas.auth.engine.EIDASSAMLEngine;   *   * @author tlenz   */ -public class EIDASProtocol extends AbstractProtocolModulController { +public class EIDASProtocol extends AbstractAuthProtocolModulController {      public static final String NAME = EIDASProtocol.class.getName();      public static final String PATH = "eidas"; diff --git a/id/server/modules/moa-id-module-openID/src/main/java/at/gv/egovernment/moa/id/protocols/oauth20/protocol/OAuth20Protocol.java b/id/server/modules/moa-id-module-openID/src/main/java/at/gv/egovernment/moa/id/protocols/oauth20/protocol/OAuth20Protocol.java index 22ceda4f1..20fe71518 100644 --- a/id/server/modules/moa-id-module-openID/src/main/java/at/gv/egovernment/moa/id/protocols/oauth20/protocol/OAuth20Protocol.java +++ b/id/server/modules/moa-id-module-openID/src/main/java/at/gv/egovernment/moa/id/protocols/oauth20/protocol/OAuth20Protocol.java @@ -23,7 +23,7 @@ import at.gv.egovernment.moa.id.auth.exception.ProtocolNotActiveException;  import at.gv.egovernment.moa.id.moduls.IAction;  import at.gv.egovernment.moa.id.moduls.IRequest;  import at.gv.egovernment.moa.id.moduls.RequestImpl; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.id.protocols.oauth20.OAuth20Constants;  import at.gv.egovernment.moa.id.protocols.oauth20.OAuth20Util;  import at.gv.egovernment.moa.id.protocols.oauth20.exceptions.OAuth20Exception; @@ -32,7 +32,7 @@ import at.gv.egovernment.moa.id.util.ErrorResponseUtils;  import at.gv.egovernment.moa.logging.Logger;  import at.gv.egovernment.moa.util.MiscUtil; -public class OAuth20Protocol extends AbstractProtocolModulController { +public class OAuth20Protocol extends AbstractAuthProtocolModulController {  	public static final String NAME = OAuth20Protocol.class.getName();  	public static final String PATH = "id_oauth20"; diff --git a/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1Protocol.java b/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1Protocol.java index 3facdb50f..eeddb92e1 100644 --- a/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1Protocol.java +++ b/id/server/modules/moa-id-modules-saml1/src/main/java/at/gv/egovernment/moa/id/protocols/saml1/SAML1Protocol.java @@ -45,7 +45,7 @@ import at.gv.egovernment.moa.id.config.auth.AuthConfigurationProviderFactory;  import at.gv.egovernment.moa.id.config.auth.OAAuthParameter;  import at.gv.egovernment.moa.id.config.auth.data.SAML1ConfigurationParameters;  import at.gv.egovernment.moa.id.moduls.IRequest; -import at.gv.egovernment.moa.id.protocols.AbstractProtocolModulController; +import at.gv.egovernment.moa.id.protocols.AbstractAuthProtocolModulController;  import at.gv.egovernment.moa.id.protocols.pvp2x.AuthenticationAction;  import at.gv.egovernment.moa.id.protocols.pvp2x.PVPConstants;  import at.gv.egovernment.moa.id.util.ParamValidatorUtils; @@ -54,7 +54,7 @@ import at.gv.egovernment.moa.util.MiscUtil;  import at.gv.egovernment.moa.util.URLEncoder;  @Controller -public class SAML1Protocol extends AbstractProtocolModulController { +public class SAML1Protocol extends AbstractAuthProtocolModulController {  	@Autowired private SAML1AuthenticationServer saml1AuthServer; | 
