From 860109229359067fcd86a8cac21e5021d79ed89d Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Sun, 21 Sep 2014 14:04:33 +0200
Subject: [PATCH] Junit data creation test based on second persistence unit

---
 Sda2/P/forum_1/pom.xml                        |  9 ++-
 .../mi/sda2/forum/tools/HashProvider.java     | 59 ++++++++++---------
 .../main/resources/META-INF/persistence.xml   | 27 ++++-----
 3 files changed, 53 insertions(+), 42 deletions(-)

diff --git a/Sda2/P/forum_1/pom.xml b/Sda2/P/forum_1/pom.xml
index 83e4b4717..28eec3923 100644
--- a/Sda2/P/forum_1/pom.xml
+++ b/Sda2/P/forum_1/pom.xml
@@ -107,10 +107,17 @@
 			<groupId>org.hibernate</groupId>
 			<artifactId>hibernate-validator</artifactId>
 			<!-- <version>4.3.2.Final</version> -->
-
 			<version>4.2.0.Final</version>
 		</dependency>
 
+		<!-- Testing -->
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
 		<!-- Encryption / Hash / Base64 -->
 		<dependency>
 			<groupId>commons-codec</groupId>
diff --git a/Sda2/P/forum_1/src/main/java/de/hdm_stuttgart/mi/sda2/forum/tools/HashProvider.java b/Sda2/P/forum_1/src/main/java/de/hdm_stuttgart/mi/sda2/forum/tools/HashProvider.java
index 2ae4a7755..4a0782b15 100644
--- a/Sda2/P/forum_1/src/main/java/de/hdm_stuttgart/mi/sda2/forum/tools/HashProvider.java
+++ b/Sda2/P/forum_1/src/main/java/de/hdm_stuttgart/mi/sda2/forum/tools/HashProvider.java
@@ -26,6 +26,21 @@ public class HashProvider {
     private static final int iterations = 10*1024;
     private static final int saltLen = 32;
     private static final int desiredKeyLen = 256;
+    
+	private static SecretKeyFactory secretKeyFactory;
+	private static SecureRandom secureRandom;
+	private static byte[] salt;
+
+    
+	static {
+		try {
+			secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
+			secureRandom = SecureRandom.getInstance("SHA1PRNG");
+		} catch (NoSuchAlgorithmException e) {
+			e.printStackTrace();
+		}
+		salt = secureRandom.generateSeed(saltLen);
+	}
 
     /** . */
     /**
@@ -36,16 +51,8 @@ public class HashProvider {
      * @return the generated hash  separated from salt by "$"
      */
     public static String getSaltedHash(char [] password) {
-        byte[] salt;
-      try {
-         salt = SecureRandom.getInstance("SHA1PRNG").generateSeed(saltLen);
-         // store the salt with the password
-         return Base64.encodeBase64String(salt) + "$" + hash(password, salt);
-      } catch (NoSuchAlgorithmException e) {
-         e.printStackTrace();
-      }
-      System.exit(1);
-      return null;
+		secureRandom.nextBytes(salt);
+		return Base64.encodeBase64String(salt) + "$" + hash(password, salt);
     }
 
     /**
@@ -57,28 +64,26 @@ public class HashProvider {
      */
     public static boolean check(char[] password, String stored){
         String[] saltAndPass = stored.split("\\$");
-        if (saltAndPass.length != 2)
+        if (saltAndPass.length != 2) {
             return false;
-        String hashOfInput = hash(password, Base64.decodeBase64(saltAndPass[0]));
-        return hashOfInput.equals(saltAndPass[1]);
+        } else {
+            String hashOfInput = hash(password, Base64.decodeBase64(saltAndPass[0]));
+            return hashOfInput.equals(saltAndPass[1]);
+        }
     }
 
     // using PBKDF2 from Sun, an alternative is https://github.com/wg/scrypt
     // cf. http://www.unlimitednovelty.com/2012/03/dont-use-bcrypt.html
     private static String hash(char [] password, byte[] salt) {
-        SecretKeyFactory f;
-      try {
-         f = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
-         SecretKey key = f.generateSecret(new PBEKeySpec(
-               password, salt, iterations, desiredKeyLen)
-           );
-         return Base64.encodeBase64String(key.getEncoded());
-      } catch (NoSuchAlgorithmException e) {
-         e.printStackTrace();
-      } catch (InvalidKeySpecException e) {
-         e.printStackTrace();
-      }
-      System.exit(1);
-      return null;
+         SecretKey key;
+		try {
+			key = secretKeyFactory.generateSecret(new PBEKeySpec(
+			       password, salt, iterations, desiredKeyLen)
+			   );
+	         return Base64.encodeBase64String(key.getEncoded());
+		} catch (InvalidKeySpecException e) {
+			e.printStackTrace();
+			return null;
+		}
     }
 }
\ No newline at end of file
diff --git a/Sda2/P/forum_1/src/main/resources/META-INF/persistence.xml b/Sda2/P/forum_1/src/main/resources/META-INF/persistence.xml
index 72644f8d9..930396714 100644
--- a/Sda2/P/forum_1/src/main/resources/META-INF/persistence.xml
+++ b/Sda2/P/forum_1/src/main/resources/META-INF/persistence.xml
@@ -5,37 +5,36 @@
 	version="2.0">
 
 
-<!--
-	<persistence-unit name="de.hdm_stuttgart.mi.sda2.forum.web">
+	<persistence-unit name="de.hdm_stuttgart.mi.sda2.forum" >
 		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
 		<exclude-unlisted-classes>false</exclude-unlisted-classes>
 		<properties>
 			<property name="eclipselink.jdbc.platform"
-				value="org.eclipse.persistence.platform.database.H2Platform" />
-			<property name="eclipselink.jdbc.driver" value="org.h2.Driver" />
-			<property name="eclipselink.jdbc.url" value="jdbc:h2:˜/jpacontaienerexampledb" />
-			<property name="eclipselink.jdbc.user" value="sa" />
-			<property name="eclipselink.jdbc.password" value="sa" />
+				value="org.eclipse.persistence.platform.database.MySQLPlatform" />
+			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
+			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm" />
+			<property name="javax.persistence.jdbc.user" value="hdmuser" />
+			<property name="javax.persistence.jdbc.password" value="XYZ" />
 			<property name="eclipselink.logging.level" value="FINE" />
+			<property name="eclipselink.connection-pool.default.initial" value="5" />
 			<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
 			<property name="eclipselink.ddl-generation.output-mode"
 				value="database" />
 		</properties>
 	</persistence-unit>
-
-	-->
 	
-	<persistence-unit name="de.hdm_stuttgart.mi.sda2.forum">
+	<persistence-unit name="de.hdm_stuttgart.mi.sda2.forum.test" transaction-type="RESOURCE_LOCAL">
 		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
 		<exclude-unlisted-classes>false</exclude-unlisted-classes>
 		<properties>
 			<property name="eclipselink.jdbc.platform"
 				value="org.eclipse.persistence.platform.database.MySQLPlatform" />
-			<property name="eclipselink.jdbc.driver" value="com.mysql.jdbc.Driver" />
-			<property name="eclipselink.jdbc.url" value="jdbc:mysql://localhost:3306/hdm" />
-			<property name="eclipselink.jdbc.user" value="hdmuser" />
-			<property name="eclipselink.jdbc.password" value="XYZ" />
+			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
+			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/hdm" />
+			<property name="javax.persistence.jdbc.user" value="hdmuser" />
+			<property name="javax.persistence.jdbc.password" value="XYZ" />
 			<property name="eclipselink.logging.level" value="FINE" />
+			<property name="eclipselink.connection-pool.default.initial" value="5" />
 			<property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
 			<property name="eclipselink.ddl-generation.output-mode"
 				value="database" />
-- 
GitLab