{
- T apply(int statusCode, InputStream responseBody, ResponseHeaders responseHeaders);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Pkcs12KeyStore.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Pkcs12KeyStore.java
deleted file mode 100644
index ed31b9496..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Pkcs12KeyStore.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package de.adorsys.multibanking.ing.http;
-
-import javax.net.ssl.KeyManager;
-import javax.net.ssl.KeyManagerFactory;
-import javax.net.ssl.SSLContext;
-import java.io.IOException;
-import java.net.URL;
-import java.security.*;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-/**
- * A PKCS #12 {@code java.security.KeyStore} that holds certificates and keys
- * used for signing http messages (QSEAL) and client tls authentication (QWAC).
- * By default a key store is expected to have two bags named "default_qwac" and
- * "default_qseal" and an empty password.
- *
- * A key store file may be created using {@code openssl} and {@code keytool}
- * command line tools. First create a p12 file for each certificate/key pair
- * with a specific alias.
- *
- * openssl pkcs12 -export -out <p12_file> -in <cert_file> -inkey <key_file> -name <alias>
- *
- * And then combine all p12 files into one.
- *
- * keytool -importkeystore -srckeystore <src_p12> -destkeystore <dest_p12> -srcstorepass ''
- * -deststorepass ''
- *
- */
-public class Pkcs12KeyStore {
- private static final String KEY_STORE_TYPE = "PKCS12";
-
- private static final String DEFAULT_QWAC_ALIAS = "default_qwac";
- private static final String DEFAULT_QSEAL_ALIAS = "default_qseal";
-
- private final KeyStore keyStore;
- private final char[] password;
- private final String defaultQwacAlias;
- private final String defaultQsealAlias;
-
- public Pkcs12KeyStore(URL url, char[] password)
- throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException {
-
- this(url, password, DEFAULT_QWAC_ALIAS, DEFAULT_QSEAL_ALIAS);
- }
-
- public Pkcs12KeyStore(URL url, char[] password, String defaultQwacAlias, String defaultQsealAlias)
- throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException {
-
- this.keyStore = KeyStore.getInstance(KEY_STORE_TYPE);
- this.password = password;
- this.defaultQwacAlias = defaultQwacAlias;
- this.defaultQsealAlias = defaultQsealAlias;
- keyStore.load(url.openStream(), password);
- }
-
- public SSLContext getSslContext()
- throws NoSuchAlgorithmException, KeyStoreException, UnrecoverableEntryException, KeyManagementException,
- IOException, CertificateException {
-
- return getSslContext(null);
- }
-
- public SSLContext getSslContext(String qwacAlias)
- throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException,
- UnrecoverableEntryException, KeyManagementException {
-
- if (qwacAlias == null) {
- qwacAlias = defaultQwacAlias;
- }
-
- KeyStore qwacKeyStore = KeyStore.getInstance(KEY_STORE_TYPE);
- qwacKeyStore.load(null, password);
- KeyStore.Entry entry = keyStore.getEntry(qwacAlias, new KeyStore.PasswordProtection(password));
- qwacKeyStore.setEntry("", entry, new KeyStore.PasswordProtection(password));
-
- SSLContext sslContext = SSLContext.getInstance("TLS");
- KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
- keyManagerFactory.init(qwacKeyStore, password);
- KeyManager[] keyManagers = keyManagerFactory.getKeyManagers();
- sslContext.init(keyManagers, null, null);
- return sslContext;
- }
-
- public X509Certificate getQsealCertificate() throws KeyStoreException {
- return getQsealCertificate(null);
- }
-
- public X509Certificate getQsealCertificate(String qsealAlias) throws KeyStoreException {
- if (qsealAlias == null) {
- qsealAlias = defaultQsealAlias;
- }
- return (X509Certificate) keyStore.getCertificate(qsealAlias);
- }
-
- public PrivateKey getQsealPrivateKey()
- throws UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException {
-
- return getQsealPrivateKey(null);
- }
-
- public PrivateKey getQsealPrivateKey(String qsealAlias)
- throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException {
-
- if (qsealAlias == null) {
- qsealAlias = defaultQsealAlias;
- }
-
- return (PrivateKey) keyStore.getKey(qsealAlias, password);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Psd2DateTimeDeserializer.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Psd2DateTimeDeserializer.java
deleted file mode 100644
index 504d793ca..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Psd2DateTimeDeserializer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package de.adorsys.multibanking.ing.http;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-
-import java.io.IOException;
-import java.time.OffsetDateTime;
-import java.time.format.DateTimeFormatter;
-import java.time.format.DateTimeFormatterBuilder;
-
-public class Psd2DateTimeDeserializer extends JsonDeserializer {
-
- private DateTimeFormatter psd2Formatter = new DateTimeFormatterBuilder()
- // date/time
- .append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
- // offset (hh:mm - "+00:00" when it's zero)
- .optionalStart().appendOffset("+HH:MM", "+00:00").optionalEnd()
- // offset (hhmm - "+0000" when it's zero)
- .optionalStart().appendOffset("+HHMM", "+0000").optionalEnd()
- // offset (hh - "Z" when it's zero)
- .optionalStart().appendOffset("+HH", "Z").optionalEnd()
- // create formatter
- .toFormatter();
-
- @Override
- public OffsetDateTime deserialize(JsonParser parser, DeserializationContext context) throws IOException {
- String text = parser.getText();
-
- if (text == null || text.isEmpty()) {
- return null;
- }
-
- return OffsetDateTime.parse(text, psd2Formatter);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Request.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Request.java
deleted file mode 100644
index 7b3f871a0..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/Request.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package de.adorsys.multibanking.ing.http;
-
-import de.adorsys.multibanking.ing.http.HttpClient;
-import de.adorsys.multibanking.ing.model.Response;
-
-import java.util.Map;
-import java.util.function.UnaryOperator;
-
-public interface Request {
-
- interface Builder {
-
- String method();
-
- String uri();
-
- Builder jsonBody(String body);
-
- String jsonBody();
-
- Builder emptyBody(boolean empty);
-
- boolean emptyBody();
-
- Builder urlEncodedBody(Map formData);
-
- Map urlEncodedBody();
-
- Builder headers(Map headers);
-
- Map headers();
-
- Builder header(String name, String value);
-
- Response send(Interceptor interceptor, HttpClient.ResponseHandler responseHandler);
-
- default Response send(HttpClient.ResponseHandler responseHandler) {
- return send(x -> x, responseHandler);
- }
-
- String content();
-
- @FunctionalInterface
- interface Interceptor extends UnaryOperator {
- }
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/RequestBuilderImpl.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/RequestBuilderImpl.java
deleted file mode 100644
index 29a725e2c..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/RequestBuilderImpl.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package de.adorsys.multibanking.ing.http;
-
-import de.adorsys.multibanking.ing.model.Response;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-public class RequestBuilderImpl implements Request.Builder {
- private final HttpClient httpClient;
- private String method;
- private String uri;
- private Map headers = new LinkedHashMap<>();
- private String body;
- private boolean emptyBody;
- private Map formData;
-
- RequestBuilderImpl(HttpClient httpClient, String method, String uri) {
- this.httpClient = httpClient;
- this.method = method;
- this.uri = uri;
- }
-
- @Override
- public String method() {
- return method;
- }
-
- @Override
- public String uri() {
- return uri;
- }
-
- @Override
- public Request.Builder headers(Map headers) {
- this.headers = headers;
- return this;
- }
-
- @Override
- public Map headers() {
- return headers;
- }
-
- @Override
- public Request.Builder header(String name, String value) {
- headers.put(name, value);
- return this;
- }
-
- @Override
- public Request.Builder jsonBody(String body) {
- this.body = body;
- return this;
- }
-
- @Override
- public String jsonBody() {
- return body;
- }
-
- @Override
- public Request.Builder emptyBody(boolean emptyBody) {
- this.emptyBody = emptyBody;
- return this;
- }
-
- @Override
- public boolean emptyBody() {
- return emptyBody;
- }
-
- @Override
- public Request.Builder urlEncodedBody(Map formData) {
- this.formData = formData;
- return this;
- }
-
- @Override
- public Map urlEncodedBody() {
- return formData;
- }
-
- @Override
- public Response send(Interceptor interceptor, HttpClient.ResponseHandler responseHandler) {
- return httpClient.send(interceptor != null ? interceptor.apply(this) : this, responseHandler);
- }
-
- @Override
- public String content() {
- return httpClient.content(this);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/RequestHeaders.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/RequestHeaders.java
deleted file mode 100644
index ba04a268a..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/RequestHeaders.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package de.adorsys.multibanking.ing.http;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Optional;
-
-public class RequestHeaders {
- public static final String X_REQUEST_ID = "X-Request-ID";
- public static final String CONSENT_ID = "Consent-ID";
- public static final String DIGEST = "Digest";
- public static final String PSU_ID = "PSU-ID";
- public static final String PSU_CORPORATE_ID = "PSU-Corporate-ID";
- public static final String TPP_REDIRECT_URI = "TPP-Redirect-URI";
- public static final String DATE = "Date";
- public static final String SIGNATURE = "Signature";
- public static final String TPP_SIGNATURE_CERTIFICATE = "TPP-Signature-Certificate";
- public static final String PSU_IP_ADDRESS = "PSU-IP-Address";
- public static final String PSU_ID_TYPE = "PSU-ID-Type";
- public static final String PSU_CORPORATE_ID_TYPE = "PSU-Corporate-ID-Type";
- public static final String TPP_REDIRECT_PREFERRED = "TPP-Redirect-Preferred";
- public static final String TPP_NOK_REDIRECT_URI = "TPP-Nok-Redirect-URI";
- public static final String TPP_EXPLICIT_AUTHORISATION_PREFERRED = "TPP-Explicit-Authorisation-Preferred";
- public static final String PSU_IP_PORT = "PSU-IP-Port";
- public static final String PSU_ACCEPT = "PSU-Accept";
- public static final String PSU_ACCEPT_CHARSET = "PSU-Accept-Charset";
- public static final String PSU_ACCEPT_ENCODING = "PSU-Accept-Encoding";
- public static final String PSU_ACCEPT_LANGUAGE = "PSU-Accept-Language";
- public static final String PSU_USER_AGENT = "PSU-User-Agent";
- public static final String PSU_HTTP_METHOD = "PSU-Http-Method";
- public static final String PSU_DEVICE_ID = "PSU-Device-ID";
- public static final String PSU_GEO_LOCATION = "PSU-Geo-Location";
- // technical
- public static final String ACCEPT = "Accept";
- public static final String CONTENT_TYPE = "Content-Type";
- public static final String AUTHORIZATION = "Authorization";
- public static final String CORRELATION_ID = "Correlation-ID";
- // gateway
- public static final String X_GTW_ASPSP_ID = "X-GTW-ASPSP-ID";
- public static final String X_GTW_BANK_CODE = "X-GTW-Bank-Code";
-
- private static Map headerNamesLowerCased = new HashMap<>();
-
- static {
- headerNamesLowerCased.put(X_GTW_ASPSP_ID.toLowerCase(), X_GTW_ASPSP_ID);
- headerNamesLowerCased.put(X_GTW_BANK_CODE.toLowerCase(), X_GTW_BANK_CODE);
- headerNamesLowerCased.put(X_REQUEST_ID.toLowerCase(), X_REQUEST_ID);
- headerNamesLowerCased.put(PSU_IP_ADDRESS.toLowerCase(), PSU_IP_ADDRESS);
- headerNamesLowerCased.put(DIGEST.toLowerCase(), DIGEST);
- headerNamesLowerCased.put(SIGNATURE.toLowerCase(), SIGNATURE);
- headerNamesLowerCased.put(TPP_SIGNATURE_CERTIFICATE.toLowerCase(), TPP_SIGNATURE_CERTIFICATE);
- headerNamesLowerCased.put(PSU_ID.toLowerCase(), PSU_ID);
- headerNamesLowerCased.put(PSU_ID_TYPE.toLowerCase(), PSU_ID_TYPE);
- headerNamesLowerCased.put(PSU_CORPORATE_ID.toLowerCase(), PSU_CORPORATE_ID);
- headerNamesLowerCased.put(PSU_CORPORATE_ID_TYPE.toLowerCase(), PSU_CORPORATE_ID_TYPE);
- headerNamesLowerCased.put(CONSENT_ID.toLowerCase(), CONSENT_ID);
- headerNamesLowerCased.put(TPP_REDIRECT_PREFERRED.toLowerCase(), TPP_REDIRECT_PREFERRED);
- headerNamesLowerCased.put(TPP_REDIRECT_URI.toLowerCase(), TPP_REDIRECT_URI);
- headerNamesLowerCased.put(TPP_NOK_REDIRECT_URI.toLowerCase(), TPP_NOK_REDIRECT_URI);
- headerNamesLowerCased.put(TPP_EXPLICIT_AUTHORISATION_PREFERRED.toLowerCase(), TPP_EXPLICIT_AUTHORISATION_PREFERRED);
- headerNamesLowerCased.put(PSU_IP_PORT.toLowerCase(), PSU_IP_PORT);
- headerNamesLowerCased.put(PSU_ACCEPT.toLowerCase(), PSU_ACCEPT);
- headerNamesLowerCased.put(PSU_ACCEPT_CHARSET.toLowerCase(), PSU_ACCEPT_CHARSET);
- headerNamesLowerCased.put(PSU_ACCEPT_ENCODING.toLowerCase(), PSU_ACCEPT_ENCODING);
- headerNamesLowerCased.put(PSU_ACCEPT_LANGUAGE.toLowerCase(), PSU_ACCEPT_LANGUAGE);
- headerNamesLowerCased.put(PSU_USER_AGENT.toLowerCase(), PSU_USER_AGENT);
- headerNamesLowerCased.put(PSU_HTTP_METHOD.toLowerCase(), PSU_HTTP_METHOD);
- headerNamesLowerCased.put(PSU_DEVICE_ID.toLowerCase(), PSU_DEVICE_ID);
- headerNamesLowerCased.put(PSU_GEO_LOCATION.toLowerCase(), PSU_GEO_LOCATION);
- headerNamesLowerCased.put(ACCEPT.toLowerCase(), ACCEPT);
- headerNamesLowerCased.put(AUTHORIZATION.toLowerCase(), AUTHORIZATION);
- headerNamesLowerCased.put(CORRELATION_ID.toLowerCase(), CORRELATION_ID);
- }
-
- private Map headers;
-
- private RequestHeaders(Map headers) {
- this.headers = headers;
- }
-
- public static RequestHeaders fromMap(Map headersMap) {
- Map headers = new HashMap<>();
- headersMap.forEach((name, value) -> {
- String headerNameInLowerCase = name.toLowerCase();
- if (headerNamesLowerCased.keySet().contains(headerNameInLowerCase)) {
- headers.put(headerNamesLowerCased.get(headerNameInLowerCase), value);
- }
- });
- return new RequestHeaders(headers);
- }
-
- public Map toMap() {
- return new HashMap<>(headers);
- }
-
- public boolean isAcceptJson() {
- return Optional.ofNullable(headers.get(ACCEPT))
- .map(a -> a.toLowerCase().startsWith("application/json"))
- .orElse(false);
- }
-
- public Optional get(String headerName) {
- return Optional.ofNullable(headers.get(headerNamesLowerCased.get(headerName.toLowerCase())));
- }
-
- public Optional getAspspId() {
- return get(X_GTW_ASPSP_ID);
- }
-
- public Optional getBankCode() {
- return get(X_GTW_BANK_CODE);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/ResponseHandlers.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/ResponseHandlers.java
deleted file mode 100644
index dd1741774..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/ResponseHandlers.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package de.adorsys.multibanking.ing.http;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
-import com.fasterxml.jackson.databind.module.SimpleModule;
-import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
-import de.adorsys.multibanking.domain.exception.MultibankingException;
-
-import java.io.*;
-import java.nio.charset.StandardCharsets;
-import java.time.OffsetDateTime;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import static de.adorsys.multibanking.domain.exception.MultibankingError.INTERNAL_ERROR;
-
-public class ResponseHandlers {
-
- private static final String APPLICATION_JSON = "application/json";
- private static final Pattern CHARSET_PATTERN = Pattern.compile("charset=([^;]+)");
-
- private static final JsonMapper jsonMapper = new JsonMapper();
-
- private ResponseHandlers() {
- }
-
- public static HttpClient.ResponseHandler jsonResponseHandler(Class klass) {
- return (statusCode, responseBody, responseHeaders) -> {
- if (statusCode == 204) {
- return null;
- }
-
- String contentType = responseHeaders.getHeader(RequestHeaders.CONTENT_TYPE);
-
- if (contentType != null && !contentType.startsWith(APPLICATION_JSON)) {
- throw new MultibankingException(INTERNAL_ERROR, String.format(
- "Content type %s is not acceptable, has to start with %s", contentType, APPLICATION_JSON));
- }
-
- if (statusCode == 200 || statusCode == 201) {
- return jsonMapper.readValue(responseBody, klass);
- }
-
- throw responseException(statusCode, new PushbackInputStream(responseBody), responseHeaders);
- };
- }
-
- private static MultibankingException responseException(int statusCode,
- PushbackInputStream responseBody,
- ResponseHeaders responseHeaders) {
- if (isEmpty(responseBody)) {
- return new MultibankingException(INTERNAL_ERROR, statusCode, "empty response");
- }
- String originalResponse = toString(responseBody, responseHeaders);
- return new MultibankingException(INTERNAL_ERROR, statusCode, originalResponse);
- }
-
- private static boolean isEmpty(PushbackInputStream responseBody) {
- try {
- int nextByte = responseBody.read();
- if (nextByte == -1) {
- return true;
- }
- responseBody.unread(nextByte);
- return false;
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
-
- public static HttpClient.ResponseHandler stringResponseHandler() {
- return (statusCode, responseBody, responseHeaders) -> {
- if (statusCode == 200) {
- return toString(responseBody, responseHeaders);
- }
-
- throw responseException(statusCode, new PushbackInputStream(responseBody), responseHeaders);
- };
- }
-
- private static String toString(InputStream responseBody, ResponseHeaders responseHeaders) {
- try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
- byte[] buffer = new byte[1024];
- int length;
- while ((length = responseBody.read(buffer)) != -1) {
- baos.write(buffer, 0, length);
- }
-
- String charset = StandardCharsets.UTF_8.name();
- String contentType = responseHeaders.getHeader(RequestHeaders.CONTENT_TYPE);
- if (contentType != null) {
- Matcher matcher = CHARSET_PATTERN.matcher(contentType);
- if (matcher.find()) {
- charset = matcher.group(1);
- }
- }
-
- return baos.toString(charset);
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
-
- public static class JsonMapper {
- private final ObjectMapper objectMapper;
-
- JsonMapper() {
- objectMapper = new ObjectMapper();
- objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
- objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- objectMapper.registerModule(new JavaTimeModule());
- objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
- objectMapper.registerModule(buildPsd2DateTimeDeserializerModule());
- }
-
- public String writeValueAsString(Object value) {
- try {
- return objectMapper.writeValueAsString(value);
- } catch (JsonProcessingException e) {
- throw new UncheckedIOException(e);
- }
- }
-
- public T readValue(InputStream inputStream, Class klass) {
- try {
- return objectMapper.readValue(inputStream, klass);
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
-
- public T readValue(String s, Class klass) {
- try {
- return objectMapper.readValue(s, klass);
- } catch (IOException e) {
- throw new UncheckedIOException(e);
- }
- }
-
- public T convertValue(Object value, Class klass) {
- return objectMapper.convertValue(value, klass);
- }
-
- private SimpleModule buildPsd2DateTimeDeserializerModule() {
- SimpleModule dateTimeModule = new SimpleModule();
- dateTimeModule.addDeserializer(OffsetDateTime.class, new Psd2DateTimeDeserializer());
- return dateTimeModule;
- }
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/ResponseHeaders.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/ResponseHeaders.java
deleted file mode 100644
index bd58247f0..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/ResponseHeaders.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package de.adorsys.multibanking.ing.http;
-
-import java.util.*;
-
-public class ResponseHeaders {
- private static final String LOCATION = "Location";
- private static final String X_REQUEST_ID = "X-Request-ID";
- public static final String ASPSP_SCA_APPROACH = "ASPSP-SCA-Approach";
- private static final String CONTENT_TYPE = "Content-Type";
-
- private static Map headerNamesLowerCased = new HashMap<>();
- static {
- headerNamesLowerCased.put(LOCATION.toLowerCase(), LOCATION);
- headerNamesLowerCased.put(X_REQUEST_ID.toLowerCase(), X_REQUEST_ID);
- headerNamesLowerCased.put(ASPSP_SCA_APPROACH.toLowerCase(), ASPSP_SCA_APPROACH);
- headerNamesLowerCased.put(CONTENT_TYPE.toLowerCase(), CONTENT_TYPE);
- }
-
- private Map headers;
-
- private ResponseHeaders(Map headers) {
- this.headers = headers;
- }
-
- public static ResponseHeaders fromMap(Map headersMap) {
- if (Objects.isNull(headersMap) || headersMap.isEmpty()) {
- return emptyResponseHeaders();
- }
-
- Map headers = new HashMap<>();
-
- Set headerNamesLowerCased = ResponseHeaders.headerNamesLowerCased.keySet();
-
- headersMap.forEach((name, value) -> {
- String headerNameInLowerCase = name.toLowerCase();
- if (isHeaderExistInBGSpecification(headerNamesLowerCased, headerNameInLowerCase)) {
- headers.put(ResponseHeaders.headerNamesLowerCased.get(headerNameInLowerCase), value);
- }
- });
- return new ResponseHeaders(headers);
- }
-
- public static ResponseHeaders emptyResponseHeaders() {
- return new ResponseHeaders(Collections.emptyMap());
- }
-
- private static boolean isHeaderExistInBGSpecification(Set headerNames, String headerName) {
- return headerNames.contains(headerName);
- }
-
- public Map getHeadersMap() {
- return new HashMap<>(headers);
- }
-
- public String getHeader(String headerName) {
- return headers.get(headerName);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/StringUri.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/StringUri.java
deleted file mode 100644
index 4036c88f8..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/http/StringUri.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package de.adorsys.multibanking.ing.http;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-public class StringUri {
- private static final String SPACE = " ";
- private static final String ENCODED_SPACE = "%20";
-
- public static String fromElements(String... elements) {
- return Arrays.stream(elements)
- .map(StringUri::trimUri)
- .map(StringUri::formatUri)
- .collect(Collectors.joining("/"));
- }
-
- private static String trimUri(String str) {
- if (str == null || str.isEmpty()) {
- return "";
- }
- str = str.startsWith("/") ? str.substring(1) : str;
- return str.endsWith("/") ? str.substring(0, str.length() - 1) : str;
- }
-
- public static String withQuery(String uri, Map requestParams) {
- if (requestParams.isEmpty()) {
- return uri;
- }
-
- String requestParamsString = requestParams.entrySet().stream()
- .filter(entry -> entry.getKey() != null && entry.getValue() != null)
- .map(entry -> entry.getKey() + "=" + entry.getValue())
- .collect(Collectors.joining("&"));
-
- if (requestParamsString.isEmpty()) {
- return uri;
- }
- return uri + "?" + requestParamsString;
- }
-
- public static String withQuery(String uri, String paramName, String paramValue) {
- if (paramName == null || paramName.isEmpty()
- || paramValue == null || paramValue.isEmpty()) {
- return uri;
- }
-
- return uri + "?" + paramName + "=" + paramValue;
- }
-
- public static Map getQueryParamsFromUri(String uri) {
- Map queryParams = new HashMap<>();
-
- if (!uri.contains("?")) {
- return queryParams;
- }
-
- String paramsString = uri.split("\\?")[1];
- String[] paramsWithValues = paramsString.split("&");
-
- for (String paramWithValueString : paramsWithValues) {
- String[] paramAndValue = paramWithValueString.split("=");
- queryParams.put(paramAndValue[0], paramAndValue[1]);
- }
-
- return queryParams;
- }
-
- private static String formatUri(String uri) {
- return uri.replace(SPACE, ENCODED_SPACE);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/ErrorResponse.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/ErrorResponse.java
deleted file mode 100644
index 309525bf0..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/ErrorResponse.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package de.adorsys.multibanking.ing.model;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import de.adorsys.multibanking.ing.model.Links;
-import de.adorsys.multibanking.ing.model.TppMessage;
-
-import java.util.List;
-
-// verified that structure is compatible with
-// Error400_NG_PIS
-// Error401_NG_PIS
-// Error403_NG_PIS
-// Error404_NG_PIS
-// Error405_NG_PIS
-// Error400_NG_AIS
-// Error401_NG_AIS
-// Error403_NG_AIS
-// Error404_NG_AIS
-// Error405_NG_AIS
-// Error406_NG_AIS
-// Error409_NG_AIS
-// Error429_NG_AIS
-public class ErrorResponse {
- private List tppMessages;
- @JsonProperty("_links")
- private Links links;
-
- public List getTppMessages() {
- return tppMessages;
- }
-
- public void setTppMessages(List tppMessages) {
- this.tppMessages = tppMessages;
- }
-
- public Links getLinks() {
- return links;
- }
-
- public void setLinks(Links links) {
- this.links = links;
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Link.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Link.java
deleted file mode 100644
index 80754ef2d..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Link.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package de.adorsys.multibanking.ing.model;
-
-public class Link {
- private String href;
-
- public Link() {
- }
-
- public Link(String href) {
- this.href = href;
- }
-
- public String getHref() {
- return href;
- }
-
- public void setHref(String href) {
- this.href = href;
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Links.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Links.java
deleted file mode 100644
index 09784d0a8..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Links.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2018-2018 adorsys GmbH & Co KG
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package de.adorsys.multibanking.ing.model;
-
-public class Links {
- private Link scaRedirect;
- private Link scaOAuth;
- private Link updatePsuIdentification;
- private Link updateProprietaryData;
- private Link updatePsuAuthentication;
- private Link selectAuthenticationMethod;
- private Link self;
- private Link status;
- private Link account;
- private Link viewBalances;
- private Link viewTransactions;
- private Link first;
- private Link next;
- private Link previous;
- private Link last;
- private Link download;
- private Link startAuthorisation;
- private Link startAuthorisationWithPsuIdentification;
- private Link startAuthorisationWithPsuAuthentication;
- private Link startAuthorisationWithAuthenticationMethodSelection;
- private Link startAuthorisationWithTransactionAuthorisation;
- private Link scaStatus;
- private Link authoriseTransaction;
-
- public Link getScaRedirect() {
- return scaRedirect;
- }
-
- public void setScaRedirect(Link scaRedirect) {
- this.scaRedirect = scaRedirect;
- }
-
- public Link getScaOAuth() {
- return scaOAuth;
- }
-
- public void setScaOAuth(Link scaOAuth) {
- this.scaOAuth = scaOAuth;
- }
-
- public Link getUpdatePsuIdentification() {
- return updatePsuIdentification;
- }
-
- public void setUpdatePsuIdentification(Link updatePsuIdentification) {
- this.updatePsuIdentification = updatePsuIdentification;
- }
-
- public Link getUpdateProprietaryData() {
- return updateProprietaryData;
- }
-
- public void setUpdateProprietaryData(Link updateProprietaryData) {
- this.updateProprietaryData = updateProprietaryData;
- }
-
- public Link getUpdatePsuAuthentication() {
- return updatePsuAuthentication;
- }
-
- public void setUpdatePsuAuthentication(Link updatePsuAuthentication) {
- this.updatePsuAuthentication = updatePsuAuthentication;
- }
-
- public Link getSelectAuthenticationMethod() {
- return selectAuthenticationMethod;
- }
-
- public void setSelectAuthenticationMethod(Link selectAuthenticationMethod) {
- this.selectAuthenticationMethod = selectAuthenticationMethod;
- }
-
- public Link getSelf() {
- return self;
- }
-
- public void setSelf(Link self) {
- this.self = self;
- }
-
- public Link getStatus() {
- return status;
- }
-
- public void setStatus(Link status) {
- this.status = status;
- }
-
- public Link getAccount() {
- return account;
- }
-
- public void setAccount(Link account) {
- this.account = account;
- }
-
- public Link getViewBalances() {
- return viewBalances;
- }
-
- public void setViewBalances(Link viewBalances) {
- this.viewBalances = viewBalances;
- }
-
- public Link getViewTransactions() {
- return viewTransactions;
- }
-
- public void setViewTransactions(Link viewTransactions) {
- this.viewTransactions = viewTransactions;
- }
-
- public Link getFirst() {
- return first;
- }
-
- public void setFirst(Link first) {
- this.first = first;
- }
-
- public Link getNext() {
- return next;
- }
-
- public void setNext(Link next) {
- this.next = next;
- }
-
- public Link getPrevious() {
- return previous;
- }
-
- public void setPrevious(Link previous) {
- this.previous = previous;
- }
-
- public Link getLast() {
- return last;
- }
-
- public void setLast(Link last) {
- this.last = last;
- }
-
- public Link getDownload() {
- return download;
- }
-
- public void setDownload(Link download) {
- this.download = download;
- }
-
- public Link getStartAuthorisation() {
- return startAuthorisation;
- }
-
- public void setStartAuthorisation(Link startAuthorisation) {
- this.startAuthorisation = startAuthorisation;
- }
-
- public Link getStartAuthorisationWithPsuIdentification() {
- return startAuthorisationWithPsuIdentification;
- }
-
- public void setStartAuthorisationWithPsuIdentification(Link startAuthorisationWithPsuIdentification) {
- this.startAuthorisationWithPsuIdentification = startAuthorisationWithPsuIdentification;
- }
-
- public Link getStartAuthorisationWithPsuAuthentication() {
- return startAuthorisationWithPsuAuthentication;
- }
-
- public void setStartAuthorisationWithPsuAuthentication(Link startAuthorisationWithPsuAuthentication) {
- this.startAuthorisationWithPsuAuthentication = startAuthorisationWithPsuAuthentication;
- }
-
- public Link getStartAuthorisationWithAuthenticationMethodSelection() {
- return startAuthorisationWithAuthenticationMethodSelection;
- }
-
- public void setStartAuthorisationWithAuthenticationMethodSelection(Link startAuthorisationWithAuthenticationMethodSelection) {
- this.startAuthorisationWithAuthenticationMethodSelection = startAuthorisationWithAuthenticationMethodSelection;
- }
-
- public Link getStartAuthorisationWithTransactionAuthorisation() {
- return startAuthorisationWithTransactionAuthorisation;
- }
-
- public void setStartAuthorisationWithTransactionAuthorisation(Link startAuthorisationWithTransactionAuthorisation) {
- this.startAuthorisationWithTransactionAuthorisation = startAuthorisationWithTransactionAuthorisation;
- }
-
- public Link getScaStatus() {
- return scaStatus;
- }
-
- public void setScaStatus(Link scaStatus) {
- this.scaStatus = scaStatus;
- }
-
- public Link getAuthoriseTransaction() {
- return authoriseTransaction;
- }
-
- public void setAuthoriseTransaction(Link authoriseTransaction) {
- this.authoriseTransaction = authoriseTransaction;
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Response.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Response.java
deleted file mode 100644
index 4af24eff9..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/Response.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package de.adorsys.multibanking.ing.model;
-
-import de.adorsys.multibanking.ing.http.ResponseHeaders;
-
-import java.util.function.Function;
-
-public class Response {
- private final int statusCode;
- private final T body;
- private final ResponseHeaders headers;
-
- public Response(int statusCode, T body, ResponseHeaders headers) {
- this.statusCode = statusCode;
- this.body = body;
- this.headers = headers;
- }
-
- public int getStatusCode() {
- return statusCode;
- }
-
- public T getBody() {
- return body;
- }
-
- public ResponseHeaders getHeaders() {
- return headers;
- }
-
- public Response map(Function super T, ? extends U> bodyMapper) {
- return new Response<>(statusCode, bodyMapper.apply(body), headers);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/TppMessage.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/TppMessage.java
deleted file mode 100644
index c1a22b27b..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/model/TppMessage.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package de.adorsys.multibanking.ing.model;
-
-public class TppMessage {
- // required
- private String category;
- private String code;
- // optional
- private String path;
- private String text;
-
- public String getCategory() {
- return category;
- }
-
- public void setCategory(String category) {
- this.category = category;
- }
-
- public String getCode() {
- return code;
- }
-
- public void setCode(String code) {
- this.code = code;
- }
-
- public String getPath() {
- return path;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- public String getText() {
- return text;
- }
-
- public void setText(String text) {
- this.text = text;
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/ClientAuthentication.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/ClientAuthentication.java
deleted file mode 100644
index 4f322117b..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/ClientAuthentication.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package de.adorsys.multibanking.ing.oauth;
-
-import de.adorsys.multibanking.ing.http.Request;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.security.MessageDigest;
-import java.security.Signature;
-import java.security.SignatureException;
-import java.time.Instant;
-import java.time.ZoneOffset;
-import java.time.format.DateTimeFormatter;
-import java.util.Base64;
-import java.util.Locale;
-
-public class ClientAuthentication implements Request.Builder.Interceptor {
-
- // java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME doesn't pad single digit day-of-month with a zero
- private static final DateTimeFormatter RFC_1123_DATE_TIME_FORMATTER =
- DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss O", Locale.US)
- .withZone(ZoneOffset.UTC);
-
- private final Signature signature;
- private final MessageDigest digest;
- private final String tppSignatureCertificate;
- private String keyId;
- private String accessToken;
-
- ClientAuthentication(Signature signature, MessageDigest digest, String tppSignatureCertificate,
- String keyId, String accessToken) {
- this.signature = signature;
- this.digest = digest;
- this.tppSignatureCertificate = tppSignatureCertificate;
- this.keyId = keyId;
- this.accessToken = accessToken;
- }
-
- @Override
- public Request.Builder apply(Request.Builder requestBuilder) {
- String date = RFC_1123_DATE_TIME_FORMATTER.format(Instant.now());
- String digest = "SHA-256=" + base64(digest(requestBuilder.content()));
- String signingString = "(request-target): " + requestTarget(requestBuilder) + "\n"
- + "date: " + date + "\n"
- + "digest: " + digest;
- String signature = "keyId=\"" + keyId
- + "\",algorithm=\"rsa-sha256\",headers=\"(request-target) date digest\"," +
- "signature=\"" + base64(sign(signingString)) + "\"";
-
- if (accessToken == null) {
- requestBuilder.header("Authorization", "Signature " + signature);
- } else {
- requestBuilder
- .header("Signature", signature)
- .header("Authorization", "Bearer " + accessToken);
- }
-
- requestBuilder
- .header("Date", date)
- .header("Digest", digest)
- .header("TPP-Signature-Certificate", tppSignatureCertificate);
-
- return requestBuilder;
- }
-
- private String base64(byte[] data) {
- return Base64.getEncoder().encodeToString(data);
- }
-
- private byte[] digest(String content) {
- digest.update(content.getBytes());
- return digest.digest();
- }
-
- private String requestTarget(Request.Builder requestBuilder) {
- try {
- return requestBuilder.method().toLowerCase() + " " + new URL(requestBuilder.uri()).getFile();
- } catch (MalformedURLException e) {
- throw new IllegalArgumentException(e);
- }
- }
-
- private byte[] sign(String signingString) {
- try {
- signature.update(signingString.getBytes());
- return signature.sign();
- } catch (SignatureException e) {
- throw new IllegalStateException(e);
- }
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/ClientAuthenticationFactory.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/ClientAuthenticationFactory.java
deleted file mode 100644
index d77ca4a63..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/ClientAuthenticationFactory.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package de.adorsys.multibanking.ing.oauth;
-
-import de.adorsys.multibanking.ing.api.TokenResponse;
-
-import javax.security.auth.x500.X500Principal;
-import java.security.*;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509Certificate;
-import java.util.Base64;
-
-public class ClientAuthenticationFactory {
- private final Signature signature;
- private final MessageDigest digest;
- private final String tppSignatureCertificate;
- private final String keyId;
-
- public ClientAuthenticationFactory(X509Certificate certificate, PrivateKey privateKey) throws NoSuchAlgorithmException, InvalidKeyException, CertificateEncodingException {
- signature = Signature.getInstance("SHA256withRSA");
- signature.initSign(privateKey);
- digest = MessageDigest.getInstance("SHA-256");
- tppSignatureCertificate = base64(certificate.getEncoded());
- keyId = keyId(certificate);
- }
-
- private String keyId(X509Certificate certificate) {
- return "SN=" + certificate.getSerialNumber().toString(16)
- + ",CA=" + issuerNameRfc2253(certificate);
- }
-
- private String issuerNameRfc2253(X509Certificate qSealCertificate) {
- X500Principal issuerX500Principal = qSealCertificate.getIssuerX500Principal();
- return issuerX500Principal.getName(X500Principal.RFC2253);
- }
-
- private String base64(byte[] data) {
- return Base64.getEncoder().encodeToString(data);
- }
-
- ClientAuthentication newClientAuthenticationForApplicationToken() {
- return newClientAuthentication(keyId, null);
- }
-
- ClientAuthentication newClientAuthentication(TokenResponse applicationToken) {
- return newClientAuthentication(applicationToken.getClientId(), applicationToken.getAccessToken());
- }
-
- ClientAuthentication newClientAuthentication(String clientId, String accessToken) {
- return new ClientAuthentication(signature, digest, tppSignatureCertificate, clientId, accessToken);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/IngOauth2Service.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/IngOauth2Service.java
deleted file mode 100644
index ae46f41b6..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/IngOauth2Service.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package de.adorsys.multibanking.ing.oauth;
-
-import de.adorsys.multibanking.ing.api.AuthorizationURLResponse;
-import de.adorsys.multibanking.ing.api.TokenResponse;
-import de.adorsys.multibanking.ing.http.StringUri;
-
-import java.net.URI;
-import java.time.LocalDateTime;
-
-public class IngOauth2Service {
-
- private final Oauth2Api oauth2Api;
- private final ClientAuthenticationFactory clientAuthenticationFactory;
-
- private TokenResponse applicationToken;
- private LocalDateTime applicationTokenExpirationTime;
-
- public IngOauth2Service(Oauth2Api oauth2Api, ClientAuthenticationFactory clientAuthenticationFactory) {
- this.oauth2Api = oauth2Api;
- this.clientAuthenticationFactory = clientAuthenticationFactory;
- }
-
- public URI getAuthorizationRequestUri(Oauth2Service.Parameters parameters) {
- ClientAuthentication clientAuthentication =
- clientAuthenticationFactory.newClientAuthentication(getApplicationToken());
- AuthorizationURLResponse authorizationUrlResponse = oauth2Api.getAuthorizationUrl(clientAuthentication,
- parameters.getRedirectUri())
- .getBody();
-
- return URI.create(StringUri.withQuery(authorizationUrlResponse.getLocation(), parameters.asMap()));
- }
-
- private TokenResponse getApplicationToken() {
- if (applicationToken != null && LocalDateTime.now().isBefore(applicationTokenExpirationTime)) {
- return applicationToken;
- }
-
- ClientAuthentication clientAuthentication =
- clientAuthenticationFactory.newClientAuthenticationForApplicationToken();
- applicationToken = oauth2Api.getApplicationToken(clientAuthentication).getBody();
- applicationTokenExpirationTime = LocalDateTime.now().plusSeconds(applicationToken.getExpiresInSeconds());
- return applicationToken;
- }
-
- private String getClientId() {
- return getApplicationToken().getClientId();
- }
-
- public TokenResponse getToken(Oauth2Service.Parameters parameters) {
- ClientAuthentication clientAuthentication =
- clientAuthenticationFactory.newClientAuthentication(getApplicationToken());
- return oauth2Api.getCustomerToken(parameters, clientAuthentication)
- .getBody();
- }
-
- public ClientAuthentication getClientAuthentication(String accessToken) {
- return clientAuthenticationFactory.newClientAuthentication(getClientId(), accessToken);
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/Oauth2Api.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/Oauth2Api.java
deleted file mode 100644
index 59e939b83..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/Oauth2Api.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package de.adorsys.multibanking.ing.oauth;
-
-import de.adorsys.multibanking.ing.api.AuthorizationURLResponse;
-import de.adorsys.multibanking.ing.api.TokenResponse;
-import de.adorsys.multibanking.ing.http.HttpClient;
-import de.adorsys.multibanking.ing.http.Request;
-import de.adorsys.multibanking.ing.http.StringUri;
-import de.adorsys.multibanking.ing.model.Response;
-
-import static de.adorsys.multibanking.ing.http.ResponseHandlers.jsonResponseHandler;
-import static java.util.Collections.singletonMap;
-
-public class Oauth2Api {
- private static final String TOKEN_ENDPOINT = "/oauth2/token";
- private static final String AUTHORIZATION_ENDPOINT = "/oauth2/authorization-server-url";
-
- private final String baseUri;
- private final HttpClient httpClient;
-
- public Oauth2Api(String baseUri, HttpClient httpClient) {
- this.baseUri = baseUri;
- this.httpClient = httpClient;
- }
-
- Response getApplicationToken(Request.Builder.Interceptor clientAuthentication) {
- // When using eIDAS certificates supporting PSD2 the scope parameter is not required.
- // The scopes will be derived automatically from the PSD2 roles in the certificate.
- // When using eIDAS certificates supporting PSD2, the response will contain the client ID of your application,
- // this client ID has to be used in the rest of the session when the client ID or key ID is required.
- return httpClient.post(baseUri + TOKEN_ENDPOINT)
- .urlEncodedBody(singletonMap("grant_type", "client_credentials"))
- .send(clientAuthentication, jsonResponseHandler(TokenResponse.class));
- }
-
- Response getCustomerToken(Oauth2Service.Parameters parameters,
- Request.Builder.Interceptor clientAuthentication) {
-
- return httpClient.post(baseUri + TOKEN_ENDPOINT)
- .urlEncodedBody(parameters.asMap())
- .send(clientAuthentication, jsonResponseHandler(TokenResponse.class));
- }
-
- Response getAuthorizationUrl(Request.Builder.Interceptor clientAuthentication,
- String redirectUri) {
- return httpClient.get(StringUri.withQuery(baseUri + AUTHORIZATION_ENDPOINT, "redirect_uri", redirectUri))
- .send(clientAuthentication, jsonResponseHandler(AuthorizationURLResponse.class));
- }
-}
diff --git a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/Oauth2Service.java b/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/Oauth2Service.java
deleted file mode 100644
index dfe6ffeca..000000000
--- a/onlinebanking-ing/src/main/java/de/adorsys/multibanking/ing/oauth/Oauth2Service.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package de.adorsys.multibanking.ing.oauth;
-
-import de.adorsys.multibanking.ing.api.TokenResponse;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.Map;
-
-public interface Oauth2Service {
- // https://tools.ietf.org/html/rfc6749#section-4.1.1
- URI getAuthorizationRequestUri(Map headers, Parameters parameters) throws IOException;
-
- TokenResponse getToken(Map headers, Parameters parameters) throws IOException;
-
- class Parameters {
-
- private final Map parameters;
-
- public Parameters(Map parameters) {
- this.parameters = parameters;
- }
-
- public Map asMap() {
- return parameters;
- }
-
- public String get(String key) {
- return parameters.get(key);
- }
-
- public void set(String key, String value) {
- parameters.put(key, value);
- }
-
- public String getAuthorizationCode() {
- return get("code");
- }
-
- public void setAuthorizationCode(String value) {
- set("code", value);
- }
-
- public String getRedirectUri() {
- return get("redirect_uri");
- }
-
- public void setRedirectUri(String value) {
- set("redirect_uri", value);
- }
-
- public String getClientId() {
- return get("client_id");
- }
-
- public void setClientId(String value) {
- set("client_id", value);
- }
-
- public String getGrantType() {
- return get("grant_type");
- }
-
- public void setGrantType(String value) {
- set("grant_type", value);
- }
-
- public String getCodeVerifier() {
- return get("code_verifier");
- }
-
- public void setCodeVerifier(String value) {
- set("code_verifier", value);
- }
-
- public String getState() {
- return get("state");
- }
-
- public void setState(String value) {
- set("state", value);
- }
- }
-}
diff --git a/onlinebanking-ing/src/test/java/de/adorsys/multibanking/ing/IngAdapterIT.java b/onlinebanking-ing/src/test/java/de/adorsys/multibanking/ing/IngAdapterIT.java
deleted file mode 100644
index a1a2e2bac..000000000
--- a/onlinebanking-ing/src/test/java/de/adorsys/multibanking/ing/IngAdapterIT.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package de.adorsys.multibanking.ing;
-
-import de.adorsys.multibanking.domain.request.TransactionRequest;
-import de.adorsys.multibanking.domain.request.TransactionRequestFactory;
-import de.adorsys.multibanking.domain.transaction.LoadAccounts;
-import de.adorsys.multibanking.ing.http.ApacheHttpClient;
-import de.adorsys.multibanking.ing.http.Pkcs12KeyStore;
-import de.adorsys.multibanking.ing.oauth.ClientAuthenticationFactory;
-import de.adorsys.multibanking.ing.oauth.IngOauth2Service;
-import de.adorsys.multibanking.ing.oauth.Oauth2Api;
-import de.adorsys.multibanking.ing.oauth.Oauth2Service;
-import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.junit.BeforeClass;
-import org.junit.Ignore;
-import org.junit.Test;
-
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-import java.net.URI;
-import java.net.URL;
-import java.security.*;
-import java.security.cert.CertificateEncodingException;
-import java.security.cert.X509Certificate;
-import java.util.HashMap;
-
-@Ignore
-public class IngAdapterIT {
-
- private static final String BASE_URL = "https://api.sandbox.ing.com";
- private static final String KEYSTORE_FILENAME = "example_eidas.p12";
- private static final String QWAC_ALIAS = "example_eidas_client_tls";
- private static final String QSEAL_ALIAS = "example_eidas_client_signing";
- private static final String AUTHORISATION_CODE = "8b6cd77a-aa44-4527-ab08-a58d70cca286";
-
- private static IngAdapter ingAdapter;
-
- @BeforeClass
- public static void prepareAdapter() throws Exception {
- URL keyStoreUrl = IngAdapterIT.class.getClassLoader().getResource(KEYSTORE_FILENAME).toURI().toURL();
- ingAdapter = new IngAdapter(BASE_URL, keyStoreUrl.toString(), "", QWAC_ALIAS,
- QSEAL_ALIAS);
- }
-
- @Test
- public void testAis() throws Exception {
- URL keyStoreUrl = IngAdapterIT.class.getClassLoader().getResource(KEYSTORE_FILENAME).toURI().toURL();
- Pkcs12KeyStore keyStore = new Pkcs12KeyStore(keyStoreUrl, "".toCharArray());
- Oauth2Api oauth2Api = new Oauth2Api(BASE_URL, createHttpClient(keyStore));
- ClientAuthenticationFactory clientAuthenticationFactory = clientAuthenticationFactory(keyStore);
- IngOauth2Service oauth2Service = new IngOauth2Service(oauth2Api, clientAuthenticationFactory);
-
- URI authorizationRequestUri =
- oauth2Service.getAuthorizationRequestUri(new Oauth2Service.Parameters(new HashMap<>()));
-
- assert authorizationRequestUri.toString().startsWith("https://developer.ing.com/openbanking/get-started");
-
- TransactionRequest loadAccountsRequest =
- TransactionRequestFactory.create(new LoadAccounts(), null, null, null, null);
- loadAccountsRequest.setAuthorisationCode(AUTHORISATION_CODE);
-
- ingAdapter.loadBankAccounts(loadAccountsRequest);
- }
-
- private ClientAuthenticationFactory clientAuthenticationFactory(Pkcs12KeyStore keyStore) throws KeyStoreException,
- NoSuchAlgorithmException, UnrecoverableKeyException, InvalidKeyException, CertificateEncodingException {
- X509Certificate qsealCertificate = keyStore.getQsealCertificate(QSEAL_ALIAS);
- PrivateKey qsealPrivateKey = keyStore.getQsealPrivateKey(QSEAL_ALIAS);
- return new ClientAuthenticationFactory(qsealCertificate, qsealPrivateKey);
- }
-
- private ApacheHttpClient createHttpClient(Pkcs12KeyStore keyStore) throws Exception {
- SSLContext sslContext = keyStore.getSslContext(QWAC_ALIAS);
- SSLSocketFactory socketFactory = sslContext.getSocketFactory();
- SSLConnectionSocketFactory sslSocketFactory =
- new SSLConnectionSocketFactory(socketFactory, null, null, (HostnameVerifier) null);
-
- HttpClientBuilder httpClientBuilder = HttpClientBuilder.create().disableDefaultUserAgent();
- httpClientBuilder.setSSLSocketFactory(sslSocketFactory);
- return new ApacheHttpClient(httpClientBuilder.build());
- }
-
-}
diff --git a/onlinebanking-ing/src/test/java/de/adorsys/multibanking/ing/KeyStoreUtil.java b/onlinebanking-ing/src/test/java/de/adorsys/multibanking/ing/KeyStoreUtil.java
deleted file mode 100644
index c83f92359..000000000
--- a/onlinebanking-ing/src/test/java/de/adorsys/multibanking/ing/KeyStoreUtil.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package de.adorsys.multibanking.ing;
-
-import org.bouncycastle.asn1.pkcs.PrivateKeyInfo;
-import org.bouncycastle.jce.provider.BouncyCastleProvider;
-import org.bouncycastle.openssl.PEMKeyPair;
-import org.bouncycastle.openssl.PEMParser;
-import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
-
-import java.io.*;
-import java.security.*;
-import java.security.cert.Certificate;
-import java.security.cert.CertificateException;
-import java.security.cert.CertificateFactory;
-import java.security.cert.X509Certificate;
-import java.util.Collection;
-
-/**
- * Utility class for building up a keystore which can be used in
- * SSL communication.
- */
-public class KeyStoreUtil {
-
- static {
- if (Security.getProvider(BouncyCastleProvider.PROVIDER_NAME) == null) {
- Security.addProvider(new BouncyCastleProvider());
- }
- }
-
- static PrivateKey loadPrivateKey(String keyPath) throws IOException, GeneralSecurityException {
- try (Reader reader = new FileReader(keyPath);
- PEMParser parser = new PEMParser(reader)) {
- Object readObject;
- while ((readObject = parser.readObject()) != null) {
- if (readObject instanceof PEMKeyPair) {
- PEMKeyPair keyPair = (PEMKeyPair) readObject;
- return generatePrivateKey(keyPair.getPrivateKeyInfo());
- } else if (readObject instanceof PrivateKeyInfo) {
- return generatePrivateKey((PrivateKeyInfo) readObject);
- }
- }
- }
- throw new GeneralSecurityException("Cannot generate private key from file: " + keyPath);
- }
-
- private static PrivateKey generatePrivateKey(PrivateKeyInfo keyInfo) throws IOException {
- return new JcaPEMKeyConverter().getPrivateKey(keyInfo);
- }
-
- private static void addCA(KeyStore keyStore, String caPath) throws IOException, KeyStoreException,
- CertificateException {
- for (Certificate cert : loadCertificates(caPath)) {
- X509Certificate crt = (X509Certificate) cert;
- String alias = crt.getSubjectX500Principal().getName();
- keyStore.setCertificateEntry(alias, crt);
- }
- }
-
- private static Certificate[] loadCertificates(String certPath) throws IOException, CertificateException {
- try (InputStream is = new FileInputStream(certPath)) {
- CertificateFactory certificateFactory = CertificateFactory.getInstance("X509");
- Collection extends Certificate> certs = certificateFactory.generateCertificates(is);
- return certs.toArray(new Certificate[certs.size()]);
- }
- }
-}
diff --git a/onlinebanking-ing/src/test/resources/example_eidas.p12 b/onlinebanking-ing/src/test/resources/example_eidas.p12
deleted file mode 100644
index 33299f6ef..000000000
Binary files a/onlinebanking-ing/src/test/resources/example_eidas.p12 and /dev/null differ
diff --git a/pom.xml b/pom.xml
index e953d439d..7f14aa4c3 100755
--- a/pom.xml
+++ b/pom.xml
@@ -65,9 +65,7 @@
multibanking-persistence-jpa
onlinebanking-facade
onlinebanking-mapper
- onlinebanking-figo
onlinebanking-hbci4java
- onlinebanking-ing
onlinebanking-bankinggateway
multibanking-pers-spi