/* * 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.impl.idp.auth.data; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.TimeZone; import javax.annotation.Nullable; import at.gv.egiz.eaaf.core.api.data.EaafConstants; import at.gv.egiz.eaaf.core.api.idp.EaafAuthProcessDataConstants; import at.gv.egiz.eaaf.core.api.idp.auth.data.IAuthProcessDataContainer; import at.gv.egiz.eaaf.core.api.idp.auth.data.IIdentityLink; import at.gv.egiz.eaaf.core.exceptions.EaafStorageException; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class AuthProcessDataWrapper implements IAuthProcessDataContainer, EaafAuthProcessDataConstants { private static final Logger log = LoggerFactory.getLogger(AuthProcessDataWrapper.class); public final static String PATTERN_ISSUE_INSTANT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; protected Map authProcessData; public AuthProcessDataWrapper(final Map authProcessData) { this.authProcessData = authProcessData; } @Override public Date getIssueInstant() { return wrapStoredObject(VALUE_ISSUEINSTANT, null, Date.class); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getIssueInstant() */ @Override public String getIssueInstantString() { return buildDateTimeUtcString( wrapStoredObject(VALUE_ISSUEINSTANT, null, Date.class)); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setIssueInstant( * java.lang.String) */ @Override public void setIssueInstant(final String issueInstant) { authProcessData.put(VALUE_ISSUEINSTANT, buildDateTimeUtcDate(issueInstant)); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setIssueInstant( * java.lang.String) */ @Override public void setIssueInstant(final Date issueInstant) { authProcessData.put(VALUE_ISSUEINSTANT, issueInstant); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#isAuthenticated() */ @Override public boolean isAuthenticated() { return wrapStoredObject(FLAG_IS_AUTHENTICATED, false, Boolean.class); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setAuthenticated( * boolean) */ @Override public void setAuthenticated(final boolean authenticated) { authProcessData.put(FLAG_IS_AUTHENTICATED, authenticated); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getIdentityLink() */ @Override public IIdentityLink getIdentityLink() { return wrapStoredObject(VALUE_IDENTITYLINK, null, IIdentityLink.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(final IIdentityLink identityLink) { authProcessData.put(VALUE_IDENTITYLINK, identityLink); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#isMandateUsed() */ @Override public boolean isMandateUsed() { return wrapStoredObject(FLAG_USE_MANDATE, false, Boolean.class); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setUseMandates( * boolean) */ @Override public void setUseMandates(final boolean useMandates) { authProcessData.put(FLAG_USE_MANDATE, useMandates); } /* * (non-Javadoc) * * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getQAALevel() */ @Override public String getQaaLevel() { return wrapStoredObject(VALUE_QAALEVEL, null, String.class); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setQAALevel(java. * lang.String) */ @Override public void setQaaLevel(final String qaaLevel) { authProcessData.put(VALUE_QAALEVEL, qaaLevel); } /* * (non-Javadoc) * * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#isForeigner() */ @Override public boolean isForeigner() { return wrapStoredObject(FLAG_IS_FOREIGNER, false, Boolean.class); } /* * (non-Javadoc) * * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setForeigner( * boolean) */ @Override public void setForeigner(final boolean isForeigner) { authProcessData.put(FLAG_IS_FOREIGNER, isForeigner); } /* * (non-Javadoc) * * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#isOW() */ @Override public boolean isOW() { return wrapStoredObject(FLAG_IS_ORGANWALTER, false, Boolean.class); } /* * (non-Javadoc) * * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#setOW(boolean) */ @Override public void setOW(final boolean isOW) { authProcessData.put(FLAG_IS_ORGANWALTER, isOW); } @Override public boolean isEidProcess() { return wrapStoredObject(FLAG_IS_NEW_EID_PROCESS, false, Boolean.class); } @Override public void setEidProcess(final boolean value) { authProcessData.put(FLAG_IS_NEW_EID_PROCESS, value); } /* * (non-Javadoc) * * @see * at.gv.egovernment.moa.id.auth.data.IAuthenticationSession#getSessionCreated() */ @Override public Date getSessionCreated() { return wrapStoredObject(EaafConstants.AUTH_DATA_CREATED, null, Date.class); } /* * (non-Javadoc) * * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession# * getGenericSessionDataStorage() */ @Override public Map getGenericSessionDataStorage() { final Map result = new HashMap<>(); for (final Map.Entry el : authProcessData.entrySet()) { if (el.getKey().startsWith(GENERIC_PREFIX)) { result.put(el.getKey().substring(GENERIC_PREFIX.length()), el.getValue()); } } return result; } /* * (non-Javadoc) * * @see at.gv.egovernment.moa.id.auth.data.IAuthenticationSession# * getGenericDataFromSession(java.lang. String) */ @Override public Object getGenericDataFromSession(final String key) { return authProcessData.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(final String key, final Class clazz) { return wrapStoredObject(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(final String key, final Object object) throws EaafStorageException { authProcessData.put(GENERIC_PREFIX + key, object); } protected T wrapStoredObject(final String key, final Object defaultValue, final Class clazz) { if (StringUtils.isNotEmpty(key)) { final Object obj = authProcessData.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 { log.error("DefaultValue: " + defaultValue.getClass().getName() + " is not of Type:" + clazz.getName()); throw new IllegalStateException("DefaultValue: " + defaultValue.getClass().getName() + " is not of Type:" + clazz.getName()); } } /** * Builds a {@link String} dateTime value in UTC from a {@link Date} value. * * @param date the {@link Date} that should be transformed * @return The {@link String} representation of the date in * yyyy-MM-dd'T'HH:mm:ss'Z', or null if {@link Date} was null */ @Nullable public static String buildDateTimeUtcString(@Nullable final Date date) { if (date == null) { return null; } final SimpleDateFormat f = new SimpleDateFormat(PATTERN_ISSUE_INSTANT); f.setTimeZone(TimeZone.getTimeZone("UTC")); return f.format(date.getTime()); } /** * Builds a {@link String} dateTime value in UTC from a {@link Date} value. * * @param date the {@link String} in yyyy-MM-dd'T'HH:mm:ss'Z' * format that should be transformed * @return The {@link Date} representation of the date, otherwise null * if input parameter was null or invalid */ @Nullable public static Date buildDateTimeUtcDate(@Nullable final String date) { final SimpleDateFormat f = new SimpleDateFormat(PATTERN_ISSUE_INSTANT); try { if (date != null) { return f.parse(date); } } catch (final ParseException e) { log.error("Can NOT parse Date from String: {}", date, null, e); } return null; } }