diff options
Diffstat (limited to 'eaaf_modules')
2 files changed, 77 insertions, 54 deletions
| diff --git a/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/tasks/AbstractCreateQualEidRequestTask.java b/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/tasks/AbstractCreateQualEidRequestTask.java index 6c11fa63..032ac8ee 100644 --- a/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/tasks/AbstractCreateQualEidRequestTask.java +++ b/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/tasks/AbstractCreateQualEidRequestTask.java @@ -4,26 +4,12 @@ import java.io.Serializable;  import java.security.cert.CertificateEncodingException;  import java.util.ArrayList;  import java.util.List; +import java.util.Locale;  import java.util.Map;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse; -import org.apache.commons.lang3.StringUtils; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.client.entity.UrlEncodedFormEntity; -import org.apache.http.client.methods.HttpPost; -import org.apache.http.client.utils.URIBuilder; -import org.apache.http.message.BasicNameValuePair; -import org.jose4j.base64url.Base64Url; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -  import at.gv.egiz.eaaf.core.api.idp.IConfigurationWithSP;  import at.gv.egiz.eaaf.core.api.idp.ISpConfiguration;  import at.gv.egiz.eaaf.core.api.idp.process.ExecutionContext; @@ -45,6 +31,23 @@ import at.gv.egiz.eaaf.modules.auth.sl20.utils.SL20HttpBindingUtils;  import at.gv.egiz.eaaf.modules.auth.sl20.utils.SL20JsonBuilderUtils;  import at.gv.egiz.eaaf.modules.auth.sl20.utils.SL20JsonExtractorUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpResponse; +import org.apache.http.NameValuePair; +import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.utils.URIBuilder; +import org.apache.http.message.BasicNameValuePair; +import org.jose4j.base64url.Base64Url; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.web.servlet.support.RequestContextUtils; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +  public abstract class AbstractCreateQualEidRequestTask extends AbstractAuthServletTask {    private static final Logger log = LoggerFactory.getLogger(AbstractCreateQualEidRequestTask.class); @@ -97,27 +100,10 @@ public abstract class AbstractCreateQualEidRequestTask extends AbstractAuthServl        final List<NameValuePair> parameters = new ArrayList<>();        parameters.add(new BasicNameValuePair(SL20Constants.PARAM_SL20_REQ_COMMAND_PARAM,            Base64Url.encode(sl20Req.toString().getBytes("UTF-8")))); -       -      //set specific authentication method if it was selection by process step before -      VdaAuthMethod authMethod = getVdaAuthMethodFromContext(executionContext); -      if (authMethod != null) { -        log.debug("Request VDA with authType: {}", authMethod); -        parameters.add(new BasicNameValuePair(SL20Constants.PARAM_SL20_REQ_AUTH_METHOD_PARAM, -            authMethod.getAuthMethod())); -      } -      //set VDA sessionId if it was available on context -      String vdaSessionId = getVdaSessionIdFromContext(executionContext); -      if (vdaSessionId != null) { -        log.trace("Request VDA with sessionId: {}", vdaSessionId); -        parameters.add(new BasicNameValuePair( -            SL20Constants.PARAM_SL20_REQ_AUTH_VDA_SESSIONID, -            vdaSessionId)); -         -      } -       -       -       +      //inject additional request parameters +      injectAdditionalSL20RequestParams(parameters, executionContext, request); +        httpReq.setEntity(new UrlEncodedFormEntity(parameters));        // build http GET request @@ -213,9 +199,45 @@ public abstract class AbstractCreateQualEidRequestTask extends AbstractAuthServl    } +  protected void injectAdditionalSL20RequestParams(List<NameValuePair> parameters, +      ExecutionContext executionContext, HttpServletRequest request) { +    //set specific authentication method if it was selection by process step before +    final VdaAuthMethod authMethod = getVdaAuthMethodFromContext(executionContext); +    if (authMethod != null) { +      log.debug("Request VDA with authType: {}", authMethod); +      parameters.add(new BasicNameValuePair(SL20Constants.PARAM_SL20_REQ_AUTH_METHOD_PARAM, +          authMethod.getAuthMethod())); +    } + +    //set VDA sessionId if it was available on context +    final String vdaSessionId = getVdaSessionIdFromContext(executionContext); +    if (vdaSessionId != null) { +      log.trace("Request VDA with sessionId: {}", vdaSessionId); +      parameters.add(new BasicNameValuePair( +          SL20Constants.PARAM_SL20_REQ_AUTH_VDA_SESSIONID, +          vdaSessionId)); + +    } + +    //set i18n language into VDA request +    final Locale locale = LocaleContextHolder.getLocale(); +        RequestContextUtils.getLocaleResolver(request); +    final String language = locale.getLanguage(); +    if (StringUtils.isNotEmpty(language)) { +      log.trace("Find i18n context. Inject locale: {} into VDA request", locale.getLanguage()); +      parameters.add(new BasicNameValuePair( +          SL20Constants.PARAM_SL20_REQ_AUTH_VDA_LOCALE, +          language.toUpperCase(locale))); + +    } else { +      log.info("Find i18n context, but Language is UNKNOWN. It will be ignored"); + +    } +  } +    /** -   * Get ExecutionContext parameter-key for VDA AuthMethod information.  -   *  +   * Get ExecutionContext parameter-key for VDA AuthMethod information. +   *     * @return Key to get AuthMethod from {@link ExecutionContext}     */    protected abstract String getAuthMethodContextParamKey(); @@ -231,34 +253,34 @@ public abstract class AbstractCreateQualEidRequestTask extends AbstractAuthServl     */    protected abstract String buildSignedQualifiedEidCommand() throws CertificateEncodingException, SL20Exception; -   +    private VdaAuthMethod getVdaAuthMethodFromContext(ExecutionContext executionContext) { -    Serializable authMethodRaw = executionContext.get(getAuthMethodContextParamKey()); +    final Serializable authMethodRaw = executionContext.get(getAuthMethodContextParamKey());      if (authMethodRaw instanceof String) {        log.trace("Find authMethod parameter: {} on context", authMethodRaw);        return VdaAuthMethod.fromString((String) authMethodRaw); -       +      } -     +      return null;    } -   +    private String getVdaSessionIdFromContext(ExecutionContext executionContext) { -    Serializable vdaSessionId = executionContext.get( +    final Serializable vdaSessionId = executionContext.get(          SL20Constants.SL20_COMMAND_PARAM_GENERAL_RESPONSE_ERROR_VDASESSIONID); -    if (vdaSessionId instanceof String  +    if (vdaSessionId instanceof String          && StringUtils.isNotEmpty((CharSequence) vdaSessionId)) {        executionContext.remove(            SL20Constants.SL20_COMMAND_PARAM_GENERAL_RESPONSE_ERROR_VDASESSIONID); -       +        log.trace("Find vdaSessionId parameter: {} on context", vdaSessionId);        return (String) vdaSessionId; -       +      } -     +      return null;    } -   +    private String extractVdaUrlForSpecificOa(final ISpConfiguration oaConfig, final ExecutionContext executionContext) {      // load SP specific config for development and testing purposes diff --git a/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20Constants.java b/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20Constants.java index edf70cc8..f0557619 100644 --- a/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20Constants.java +++ b/eaaf_modules/eaaf_module_auth_sl20/src/main/java/at/gv/egiz/eaaf/modules/auth/sl20/utils/SL20Constants.java @@ -13,14 +13,15 @@ import org.jose4j.jws.AlgorithmIdentifiers;  public class SL20Constants {    public static final int CURRENT_SL20_VERSION = 10; -   +    // http binding parameters    public static final String PARAM_SL20_REQ_COMMAND_PARAM = "slcommand";    public static final String PARAM_SL20_REQ_COMMAND_PARAM_OLD = "sl2command";    public static final String PARAM_SL20_REQ_AUTH_METHOD_PARAM = "authtype";    public static final String PARAM_SL20_REQ_AUTH_VDA_SESSIONID = "session"; -   +  public static final String PARAM_SL20_REQ_AUTH_VDA_LOCALE = "locale"; +    public enum VdaAuthMethod {      ANY("any"), MOBILEPHONE("handy"), CARD("card"), SMARTPHONE("smartphone"); @@ -51,7 +52,7 @@ public class SL20Constants {        } catch (IllegalArgumentException | NullPointerException e) {          return VdaAuthMethod.ANY; -         +        }      } @@ -59,9 +60,9 @@ public class SL20Constants {      public String toString() {        return getAuthMethod(); -    }  +    }    } -   +    public static final String PARAM_SL20_REQ_ICP_RETURN_URL_PARAM = "slIPCReturnUrl";    public static final String PARAM_SL20_REQ_TRANSACTIONID = "slTransactionID"; @@ -177,7 +178,7 @@ public class SL20Constants {    // error command    public static final String SL20_COMMAND_PARAM_GENERAL_RESPONSE_ERRORCODE = "errorCode";    public static final String SL20_COMMAND_PARAM_GENERAL_RESPONSE_ERRORMESSAGE = "errorMessage"; -  public static final String SL20_COMMAND_PARAM_GENERAL_RESPONSE_ERROR_VDASESSIONID  +  public static final String SL20_COMMAND_PARAM_GENERAL_RESPONSE_ERROR_VDASESSIONID        = "handySignaturSession";    // qualified eID command | 
