summaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/util/client/mis/usp_v2/VDDSRoleGenerationStrategy.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/util/client/mis/usp_v2/VDDSRoleGenerationStrategy.java')
-rw-r--r--src/main/java/at/gv/util/client/mis/usp_v2/VDDSRoleGenerationStrategy.java83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/main/java/at/gv/util/client/mis/usp_v2/VDDSRoleGenerationStrategy.java b/src/main/java/at/gv/util/client/mis/usp_v2/VDDSRoleGenerationStrategy.java
new file mode 100644
index 0000000..c5573d3
--- /dev/null
+++ b/src/main/java/at/gv/util/client/mis/usp_v2/VDDSRoleGenerationStrategy.java
@@ -0,0 +1,83 @@
+package at.gv.util.client.mis.usp_v2;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.text.SimpleDateFormat;
+import java.util.Base64;
+import java.util.Date;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import at.gv.util.MiscUtil;
+import at.gv.util.client.szr.IRoleGenerationStrategy;
+import at.gv.util.ex.EgovUtilException;
+
+public class VDDSRoleGenerationStrategy implements IRoleGenerationStrategy {
+ private static final Logger log = LoggerFactory.getLogger(VDDSRoleGenerationStrategy.class);
+
+ public static final String ROLE_CONSTANT_PARTNERNAME = "partner-name=";
+ public static final String ROLE_CONSTANT_SECRET = "secret=";
+ public static final String ROLE_CONSTANT_CREATIONTS = "creation-ts=";
+
+ public static final String TS_PATTERN = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
+ private static final SimpleDateFormat tsFormat = new SimpleDateFormat(TS_PATTERN);
+
+ private String participant;
+ private String authData;
+
+ public VDDSRoleGenerationStrategy(String participant, String authData) throws EgovUtilException {
+ if (MiscUtil.isEmpty(authData)) {
+ log.error("Secret to generate VDDS role is 'null or 'empty''");
+ throw new EgovUtilException("Secret to generate VDDS role is 'null or 'empty'");
+
+ }
+ this.authData = authData;
+
+ if (MiscUtil.isEmpty(participant)) {
+ log.error("Participant to generate VDDS role is 'null or 'empty''");
+ throw new EgovUtilException("Secret to generate VDDS role is 'null or 'empty'");
+
+ }
+ this.participant = participant;
+
+ log.trace("VDDSRoleGenerationStrategy uses participant: " + this.participant + " and secret: " + this.authData);
+
+ }
+
+ @Override
+ public String generateRoleString(String roleString) throws EgovUtilException {
+
+ try {
+ String currentTS = tsFormat.format(new Date());
+ log.trace("Generate VDDS role at: " + currentTS);
+ MessageDigest md = MessageDigest.getInstance("SHA-1");
+ byte[] digistInput = (currentTS + authData).getBytes("UTF-8");
+ log.trace("DigistInput: " + new String(digistInput, "UTF-8"));
+ byte[] digistOutput = md.digest(digistInput);
+ String secret = Base64.getEncoder().encodeToString(digistOutput);
+
+ StringBuilder sBuilder = new StringBuilder(roleString);
+ sBuilder.append("(");
+ sBuilder.append(ROLE_CONSTANT_PARTNERNAME);
+ sBuilder.append(participant);
+ sBuilder.append(",");
+ sBuilder.append(ROLE_CONSTANT_SECRET);
+ sBuilder.append(secret);
+ sBuilder.append(",");
+ sBuilder.append(ROLE_CONSTANT_CREATIONTS);
+ sBuilder.append(currentTS);
+ sBuilder.append(")");
+
+ log.trace("Finale VDDS Role: " + sBuilder.toString());
+ return sBuilder.toString();
+
+ } catch(NoSuchAlgorithmException | UnsupportedEncodingException e) {
+ log.error("VDDSRoleGeneration FAILED with error: " + e.getMessage(), e);
+ throw new EgovUtilException("VDDSRoleGeneration FAILED", e);
+
+ }
+ }
+
+}