/*
* Copyright 2003 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.proxy;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import at.gv.egovernment.moa.id.config.proxy.OAConfiguration;
import at.gv.egovernment.moa.id.data.AuthenticationData;
import at.gv.egovernment.moa.util.Base64Utils;
import at.gv.egovernment.moa.util.URLEncoder;
/**
* Implementation of interface LoginParameterResolver
* @author Paul Ivancsics
* @version $Id$
*/
public class DefaultLoginParameterResolver implements LoginParameterResolver {
/**
* Configuration mehtod (not used)
*/
public void configure(String configuration, Boolean businessService) throws LoginParameterResolverException {
}
/**
* @see at.gv.egovernment.moa.id.proxy.LoginParameterResolver#getAuthenticationHeaders(OAConfiguration, AuthenticationData, String, boolean, String)
*/
public Map getAuthenticationHeaders(
OAConfiguration oaConf,
AuthenticationData authData,
String clientIPAddress,
boolean businessService,
String publicURLPrefix) {
Map result = new HashMap();
if (oaConf.getAuthType().equals(OAConfiguration.BASIC_AUTH)) {
String useridPredicate = oaConf.getBasicAuthUserIDMapping();
String userid = resolveValue(useridPredicate, authData, clientIPAddress);
String passwordPredicate = oaConf.getBasicAuthPasswordMapping();
String password = resolveValue(passwordPredicate, authData, clientIPAddress);
try {
String userIDPassword = userid + ":" + password;
String credentials = Base64Utils.encode(userIDPassword.getBytes());
result.put("Authorization", "Basic " + credentials);
}
catch (IOException ignore) {
}
}
else if (oaConf.getAuthType().equals(OAConfiguration.HEADER_AUTH)) {
for (Iterator iter = oaConf.getHeaderAuthMapping().keySet().iterator(); iter.hasNext();) {
String key = (String) iter.next();
String predicate = (String) oaConf.getHeaderAuthMapping().get(key);
String resolvedValue = resolveValue(predicate, authData, clientIPAddress);
result.put(key, resolvedValue);
}
}
return result;
}
/**
* @see at.gv.egovernment.moa.id.proxy.LoginParameterResolver#getAuthenticationParameters(OAConfiguration, AuthenticationData, String, boolean, String)
*/
public Map getAuthenticationParameters(
OAConfiguration oaConf,
AuthenticationData authData,
String clientIPAddress,
boolean businessService,
String publicURLPrefix) {
Map result = new HashMap();
if (oaConf.getAuthType().equals(OAConfiguration.PARAM_AUTH)) {
for (Iterator iter = oaConf.getParamAuthMapping().keySet().iterator(); iter.hasNext();) {
String key = (String) iter.next();
String predicate = (String) oaConf.getParamAuthMapping().get(key);
String resolvedValue;
try {
resolvedValue =
URLEncoder.encode(resolveValue(predicate, authData, clientIPAddress), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
//ISO-8859-1 is supported
resolvedValue = null;
}
result.put(key, resolvedValue);
}
}
return result;
}
/**
* Resolves a login header or parameter value.
* @param predicate header or parameter predicate name from online application configuration
* @param authData authentication data for current login
* @param clientIPAddress client IP address
* @return header or parameter value resolved; null
if unknown name is given
*/
private static String resolveValue(String predicate, AuthenticationData authData, String clientIPAddress) {
if (predicate.equals(MOAGivenName))
return authData.getGivenName();
if (predicate.equals(MOAFamilyName))
return authData.getFamilyName();
if (predicate.equals(MOADateOfBirth))
return authData.getDateOfBirth();
if (predicate.equals(MOABPK))
return authData.getBPK();
//AuthData holdes the correct BPK/WBPK
if (predicate.equals(MOAWBPK))
return authData.getBPK();
if (predicate.equals(MOAPublicAuthority))
if (authData.isPublicAuthority())
return "true";
else
return "false";
if (predicate.equals(MOABKZ))
return authData.getPublicAuthorityCode();
if (predicate.equals(MOAQualifiedCertificate))
if (authData.isQualifiedCertificate())
return "true";
else
return "false";
if (predicate.equals(MOAStammzahl))
return authData.getIdentificationValue();
if (predicate.equals(MOAIdentificationValueType))
return authData.getIdentificationType();
if (predicate.equals(MOAIPAddress))
return clientIPAddress;
else return null;
}
}