aboutsummaryrefslogtreecommitdiff
path: root/pdf-as-lib/src/main/java/at/gv/egiz/sl20/SL20Connector.java
diff options
context:
space:
mode:
authorThomas Lenz <thomas.lenz@egiz.gv.at>2018-07-09 10:11:25 +0200
committerThomas Lenz <thomas.lenz@egiz.gv.at>2018-07-09 10:11:25 +0200
commit9acf3c2e8aca9016daf76785747d838cdc5b0330 (patch)
treef97d392a8eff4906c961128e231926a76829a4c8 /pdf-as-lib/src/main/java/at/gv/egiz/sl20/SL20Connector.java
parent797634c687c6f44d314e4baa3fed220d142eed73 (diff)
downloadpdf-as-4-9acf3c2e8aca9016daf76785747d838cdc5b0330.tar.gz
pdf-as-4-9acf3c2e8aca9016daf76785747d838cdc5b0330.tar.bz2
pdf-as-4-9acf3c2e8aca9016daf76785747d838cdc5b0330.zip
add SL20 connecter-backend in a first beta version (getCertificate looks good, create signature is untested)
Diffstat (limited to 'pdf-as-lib/src/main/java/at/gv/egiz/sl20/SL20Connector.java')
-rw-r--r--pdf-as-lib/src/main/java/at/gv/egiz/sl20/SL20Connector.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/pdf-as-lib/src/main/java/at/gv/egiz/sl20/SL20Connector.java b/pdf-as-lib/src/main/java/at/gv/egiz/sl20/SL20Connector.java
new file mode 100644
index 00000000..a82771bd
--- /dev/null
+++ b/pdf-as-lib/src/main/java/at/gv/egiz/sl20/SL20Connector.java
@@ -0,0 +1,98 @@
+package at.gv.egiz.sl20;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.codec.binary.Base64;
+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.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.message.BasicNameValuePair;
+import org.jose4j.base64url.Base64Url;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.gson.JsonObject;
+
+import at.gv.egiz.pdfas.common.exceptions.PdfAsException;
+import at.gv.egiz.pdfas.lib.api.Configuration;
+import at.gv.egiz.pdfas.lib.api.sign.SignParameter;
+import at.gv.egiz.sl.schema.CreateCMSSignatureResponseType;
+import at.gv.egiz.sl.schema.InfoboxReadRequestType;
+import at.gv.egiz.sl.schema.InfoboxReadResponseType;
+import at.gv.egiz.sl.util.BaseSLConnector;
+import at.gv.egiz.sl.util.RequestPackage;
+import at.gv.egiz.sl20.exceptions.SLCommandoParserException;
+import at.gv.egiz.sl20.utils.SL20Constants;
+import at.gv.egiz.sl20.utils.SL20JSONExtractorUtils;
+
+public class SL20Connector extends BaseSLConnector {
+ private static final Logger log = LoggerFactory.getLogger(SL20Connector.class);
+
+ private String bkuUrl;
+
+ public SL20Connector(Configuration config) {
+ this.bkuUrl = config.getValue(CONFIG_BKU_URL);
+
+ }
+
+ public JsonObject sendSL20Request(JsonObject sl20Req, SignParameter parameter, String vdaURL) {
+ try {
+ log.trace("Request VDA via SL20 with: " + org.bouncycastle.util.encoders.Base64.toBase64String(sl20Req.toString().getBytes()));
+ //build http client
+ CloseableHttpClient httpClient = buildHttpClient();
+
+ //build http POST request
+ HttpPost httpReq = new HttpPost(new URIBuilder(vdaURL).build());
+ List<NameValuePair> parameters = new ArrayList<NameValuePair>();;
+ parameters.add(new BasicNameValuePair(SL20Constants.PARAM_SL20_REQ_COMMAND_PARAM, Base64Url.encode(sl20Req.toString().getBytes())));
+ httpReq.setEntity(new UrlEncodedFormEntity(parameters ));
+
+ //set native client header
+ httpReq.addHeader(SL20Constants.HTTP_HEADER_SL20_CLIENT_TYPE, SL20Constants.HTTP_HEADER_VALUE_NATIVE);
+
+ //request VDA
+ log.trace("Requesting VDA ... ");
+ HttpResponse httpResp = httpClient.execute(httpReq);
+ log.debug("Response from VDA received ");
+
+ return SL20JSONExtractorUtils.getSL20ContainerFromResponse(httpResp);
+
+ } catch (URISyntaxException | IOException e) {
+ log.warn("Can NOT build SL20 http requst. Reason:" + e.getMessage(), e);
+ return null;
+
+ } catch (SLCommandoParserException e) {
+ log.warn("Can NOT parse SL20 response from VDA: Reason: " + e.getMessage(), e);
+ return null;
+
+ }
+
+ }
+
+ @Override
+ public InfoboxReadResponseType sendInfoboxReadRequest(InfoboxReadRequestType request, SignParameter parameter)
+ throws PdfAsException {
+ log.error("'sendInfoboxReadRequest' is NOT supported by " + SL20Connector.class.getName());
+ return null;
+ }
+
+ @Override
+ public CreateCMSSignatureResponseType sendCMSRequest(RequestPackage pack, SignParameter parameter)
+ throws PdfAsException {
+ log.error("'sendCMSReques' is NOT supported by " + SL20Connector.class.getName());
+ return null;
+ }
+
+ private CloseableHttpClient buildHttpClient() {
+ HttpClientBuilder builder = HttpClientBuilder.create();
+ return builder.build();
+ }
+
+}