/* * Copyright 2014 Federal Chancellery Austria * MOA-ID has been developed in a cooperation between BRZ, the Federal * Chancellery Austria - ICT staff unit, and Graz University of Technology. * * Licensed under the EUPL, Version 1.1 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: * http://www.osor.eu/eupl/ * * 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.egovernment.moa.id.auth.data; import java.security.cert.CertificateEncodingException; import java.security.cert.CertificateException; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import at.gv.egovernment.moa.id.commons.api.data.AuthProzessDataConstants; import at.gv.egovernment.moa.id.commons.api.data.ExtendedSAMLAttribute; import at.gv.egovernment.moa.id.commons.api.data.IAuthenticationSession; import at.gv.egovernment.moa.id.commons.api.data.IIdentityLink; import at.gv.egovernment.moa.id.commons.api.data.IMISMandate; import at.gv.egovernment.moa.id.commons.api.data.IVerifiyXMLSignatureResponse; import at.gv.egovernment.moa.id.commons.api.exceptions.SessionDataStorageException; import at.gv.egovernment.moa.logging.Logger; import at.gv.egovernment.moa.util.MiscUtil; import iaik.x509.X509Certificate; /** * @author tlenz * */ public class AuthenticationSessionWrapper implements IAuthenticationSession, AuthProzessDataConstants { private Map sessionData; /** * @param genericDataStorage */ public AuthenticationSessionWrapper(Map genericDataStorage) { this.sessionData = genericDataStorage; } private T wrapStringObject(String key, Object defaultValue, Class clazz) { if (MiscUtil.isNotEmpty(key)) { Object obj = sessionData.get(key); if (obj != null && clazz.isInstance(obj)) return (T) obj; } if (defaultValue == null) return null; else if (clazz.isInstance(defaultValue)) return (T)defaultValue; else { Logger.error("DefaultValue: " + defaultValue.getClass().getName() + " is not of Type:" + clazz.getName()); throw new IllegalStateException("DefaultValue: " + defaultValue.getClass().getName() + " is not of Type:" + clazz.getName()); } } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#isAuthenticated() */ @Override public boolean isAuthenticated() { return wrapStringObject(FLAG_IS_AUTHENTICATED, false, Boolean.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setAuthenticated(boolean) */ @Override public void setAuthenticated(boolean authenticated) { sessionData.put(FLAG_IS_AUTHENTICATED, authenticated); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getSignerCertificate() */ @Override public X509Certificate getSignerCertificate() { byte[] encCert = getEncodedSignerCertificate(); if (encCert != null) { try { return new X509Certificate(encCert); } catch (CertificateException e) { Logger.warn("Signer certificate can not be loaded from session database!", e); } } return null; } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getEncodedSignerCertificate() */ @Override public byte[] getEncodedSignerCertificate() { return wrapStringObject(VALUE_SIGNER_CERT, null, byte[].class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setSignerCertificate(iaik.x509.X509Certificate) */ @Override public void setSignerCertificate(X509Certificate signerCertificate) { try { sessionData.put(VALUE_SIGNER_CERT, signerCertificate.getEncoded()); }catch (CertificateEncodingException e) { Logger.warn("Signer certificate can not be stored to session database!", e); } } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getIdentityLink() */ @Override public IIdentityLink getIdentityLink() { return wrapStringObject(VALUE_IDENTITYLINK, null, IIdentityLink.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getSessionID() */ @Override public String getSessionID() { return wrapStringObject(VALUE_SESSIONID, null, String.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setIdentityLink(at.gv.egovernment.moa.id.auth.data.IdentityLink) */ @Override public void setIdentityLink(IIdentityLink identityLink) { sessionData.put(VALUE_IDENTITYLINK, identityLink); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setSessionID(java.lang.String) */ @Override public void setSessionID(String sessionId) { sessionData.put(VALUE_SESSIONID, sessionId); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getBkuURL() */ @Override public String getBkuURL() { return wrapStringObject(VALUE_BKUURL, null, String.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setBkuURL(java.lang.String) */ @Override public void setBkuURL(String bkuURL) { sessionData.put(VALUE_BKUURL, bkuURL); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getAuthBlock() */ @Override public String getAuthBlock() { return wrapStringObject(VALUE_AUTHBLOCK, null, String.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setAuthBlock(java.lang.String) */ @Override public void setAuthBlock(String authBlock) { sessionData.put(VALUE_AUTHBLOCK, authBlock); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getExtendedSAMLAttributesAUTH() */ @Override public List getExtendedSAMLAttributesAUTH() { return wrapStringObject(VALUE_EXTENTEDSAMLATTRAUTH, new ArrayList(), List.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setExtendedSAMLAttributesAUTH(java.util.List) */ @Override public void setExtendedSAMLAttributesAUTH(List extendedSAMLAttributesAUTH) { sessionData.put(VALUE_EXTENTEDSAMLATTRAUTH, extendedSAMLAttributesAUTH); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getExtendedSAMLAttributesOA() */ @Override public List getExtendedSAMLAttributesOA() { return wrapStringObject(VALUE_EXTENTEDSAMLATTROA, null, List.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setExtendedSAMLAttributesOA(java.util.List) */ @Override public void setExtendedSAMLAttributesOA(List extendedSAMLAttributesOA) { sessionData.put(VALUE_EXTENTEDSAMLATTROA, extendedSAMLAttributesOA); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getSAMLAttributeGebeORwbpk() */ @Override public boolean getSAMLAttributeGebeORwbpk() { return wrapStringObject(FLAG_SAMLATTRIBUTEGEBEORWBPK, false, Boolean.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setSAMLAttributeGebeORwbpk(boolean) */ @Override public void setSAMLAttributeGebeORwbpk(boolean samlAttributeGebeORwbpk) { sessionData.put(FLAG_SAMLATTRIBUTEGEBEORWBPK, samlAttributeGebeORwbpk); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getIssueInstant() */ @Override public String getIssueInstant() { return wrapStringObject(VALUE_ISSUEINSTANT, null, String.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setIssueInstant(java.lang.String) */ @Override public void setIssueInstant(String issueInstant) { sessionData.put(VALUE_ISSUEINSTANT, issueInstant); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setUseMandate(java.lang.String) */ @Override public void setUseMandate(String useMandate) { if (useMandate.compareToIgnoreCase("true") == 0) setUseMandates(true); else setUseMandates(false); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setUseMandates(boolean) */ @Override public void setUseMandates(boolean useMandates) { sessionData.put(FLAG_USE_MANDATE, useMandates); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#isMandateUsed() */ @Override public boolean isMandateUsed() { return wrapStringObject(FLAG_USE_MANDATE, false, Boolean.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setMISSessionID(java.lang.String) */ @Override public void setMISSessionID(String misSessionID) { sessionData.put(VALUE_MISSESSIONID, misSessionID); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getMISSessionID() */ @Override public String getMISSessionID() { return wrapStringObject(VALUE_MISSESSIONID, null, String.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getMandateReferenceValue() */ @Override public String getMandateReferenceValue() { return wrapStringObject(VALUE_MISREFVALUE, null, String.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setMandateReferenceValue(java.lang.String) */ @Override public void setMandateReferenceValue(String mandateReferenceValue) { sessionData.put(VALUE_MISREFVALUE, mandateReferenceValue); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#isForeigner() */ @Override public boolean isForeigner() { return wrapStringObject(FLAG_IS_FOREIGNER, false, Boolean.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setForeigner(boolean) */ @Override public void setForeigner(boolean isForeigner) { sessionData.put(FLAG_IS_FOREIGNER, isForeigner); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getXMLVerifySignatureResponse() */ @Override public IVerifiyXMLSignatureResponse getXMLVerifySignatureResponse() { return wrapStringObject(VALUE_VERIFYSIGRESP, null, IVerifiyXMLSignatureResponse.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setXMLVerifySignatureResponse(at.gv.egovernment.moa.id.auth.data.VerifyXMLSignatureResponse) */ @Override public void setXMLVerifySignatureResponse(IVerifiyXMLSignatureResponse xMLVerifySignatureResponse) { sessionData.put(VALUE_VERIFYSIGRESP, xMLVerifySignatureResponse); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getMISMandate() */ @Override public IMISMandate getMISMandate() { return wrapStringObject(VALUE_MISMANDATE, null, IMISMandate.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setMISMandate(at.gv.egovernment.moa.id.data.MISMandate) */ @Override public void setMISMandate(IMISMandate mandate) { sessionData.put(VALUE_MISMANDATE, mandate); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#isOW() */ @Override public boolean isOW() { return wrapStringObject(FLAG_IS_ORGANWALTER, false, Boolean.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setOW(boolean) */ @Override public void setOW(boolean isOW) { sessionData.put(FLAG_IS_ORGANWALTER, isOW); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getAuthBlockTokken() */ @Override public String getAuthBlockTokken() { return wrapStringObject(VALUE_AUTNBLOCKTOKKEN, null, String.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setAuthBlockTokken(java.lang.String) */ @Override public void setAuthBlockTokken(String authBlockTokken) { sessionData.put(VALUE_AUTNBLOCKTOKKEN, authBlockTokken); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getQAALevel() */ @Override public String getQAALevel() { return wrapStringObject(VALUE_QAALEVEL, null, String.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setQAALevel(java.lang.String) */ @Override public void setQAALevel(String qAALevel) { sessionData.put(VALUE_QAALEVEL, qAALevel); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getSessionCreated() */ @Override public Date getSessionCreated() { return wrapStringObject(VALUE_CREATED, null, Date.class); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getGenericSessionDataStorage() */ @Override public Map getGenericSessionDataStorage() { Map result = new HashMap(); for (String el : sessionData.keySet()) { if (el.startsWith(GENERIC_PREFIX)) result.put(el.substring(GENERIC_PREFIX.length()), sessionData.get(el)); } return result; } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getGenericDataFromSession(java.lang.String) */ @Override public Object getGenericDataFromSession(String key) { return sessionData.get(GENERIC_PREFIX + key); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getGenericDataFromSession(java.lang.String, java.lang.Class) */ @Override public T getGenericDataFromSession(String key, Class clazz) { return wrapStringObject(GENERIC_PREFIX + key, null, clazz); } /* (non-Javadoc) * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setGenericDataToSession(java.lang.String, java.lang.Object) */ @Override public void setGenericDataToSession(String key, Object object) throws SessionDataStorageException { sessionData.put(GENERIC_PREFIX + key, object); } }