From 9ce5298cc83e8ee42ca8e3e74a77acd3d3286222 Mon Sep 17 00:00:00 2001
From: ys037 <ys037@hdm-stuttgart.de>
Date: Wed, 20 Dec 2023 11:43:00 +0100
Subject: [PATCH] Feature: Added decrypting of logindata for our current
 ORacleDB database and our old AzureDB database Add: CryptoUtils.java (for
 decrypting loginfiles) Add: CryptoException.java (to catch multiple
 Exceptions from CryptoUtils.java Class) Update: OracleDB.java,
 DBalt.java(added lines for decrypting and a method to get the decrypted
 logindata stored into variables) Add: AzureDB_logindetails,
 document.encrypted and OracleDB_logindetails as a alternative to
 document.encrypted (These files contain the decrypted logindata for our
 database) #60

---
 .../Persistance/Classes/CryptoException.java  |   7 +++
 .../Persistance/Classes/CryptoUtils.java      |  59 ++++++++++++++++++
 .../Persistance/Classes/DBalt.java            |  23 ++++++-
 .../Persistance/Classes/ISQLDataBase.java     |   2 +-
 .../Persistance/Classes/OracleDB.java         |  26 ++++++--
 .../resources/database/AzureDB_logindetails   | Bin 0 -> 111 bytes
 .../resources/database/OracleDB_logindetails  | Bin 0 -> 48 bytes
 .../resources/database/document.encrypted     | Bin 0 -> 84 bytes
 8 files changed, 111 insertions(+), 6 deletions(-)
 create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoException.java
 create mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java
 create mode 100644 src/main/resources/database/AzureDB_logindetails
 create mode 100644 src/main/resources/database/OracleDB_logindetails
 create mode 100644 src/main/resources/database/document.encrypted

diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoException.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoException.java
new file mode 100644
index 00000000..9c7c7b6a
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoException.java
@@ -0,0 +1,7 @@
+package de.hdm_stuttgart.battlearena.Persistance.Classes;
+
+public class CryptoException extends Exception{
+    public CryptoException(String message, Throwable throwable) {
+        super(message, throwable);
+    }
+}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java
new file mode 100644
index 00000000..a3ffe29d
--- /dev/null
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/CryptoUtils.java
@@ -0,0 +1,59 @@
+package de.hdm_stuttgart.battlearena.Persistance.Classes;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.security.InvalidKeyException;
+import java.security.Key;
+import java.security.NoSuchAlgorithmException;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+
+import java.nio.charset.StandardCharsets;
+
+
+public class CryptoUtils{
+    private static String parts[] = new String[2];
+    private static final String ALGORITHM = "AES";
+    private static final String TRANSFORMATION = "AES";
+
+    /*public static void encrypt(String key, File inputFile, File outputFile)
+            throws CryptoException {
+        doCrypto(Cipher.ENCRYPT_MODE, key, inputFile);
+    }*/
+
+    public static String[] decrypt(String key, File inputFile)
+            throws CryptoException {
+        doCrypto(Cipher.DECRYPT_MODE, key, inputFile);
+        return parts;
+    }
+
+    public static String[] doCrypto(int cipherMode, String key, File inputFile) throws CryptoException {
+        try {
+            Key secretKey = new SecretKeySpec(key.getBytes(), ALGORITHM);
+            Cipher cipher = Cipher.getInstance(TRANSFORMATION);
+            cipher.init(cipherMode, secretKey);
+
+            FileInputStream inputStream = new FileInputStream(inputFile);
+            byte[] inputBytes = new byte[(int) inputFile.length()];
+            inputStream.read(inputBytes);
+
+            byte[] outputBytes = cipher.doFinal(inputBytes);
+
+            String completeString = new String(outputBytes, StandardCharsets.UTF_8);
+            System.out.println(completeString);
+            parts = completeString.split(";");
+
+            inputStream.close();
+
+        } catch (NoSuchPaddingException | NoSuchAlgorithmException
+                 | InvalidKeyException | BadPaddingException
+                 | IllegalBlockSizeException | IOException ex) {
+            throw new CryptoException("Error encrypting/decrypting file", ex);
+        }
+        return parts;
+    }
+}
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java
index ddb1c2ba..bff8f428 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/DBalt.java
@@ -4,6 +4,7 @@ import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 
 
+import java.io.File;
 import java.io.IOException;
 import java.util.LinkedHashMap;
 import java.util.Properties;
@@ -11,6 +12,26 @@ import java.sql.*;
 
 public class DBalt implements IDataBasealt {
 
+    static String key = "Peters Olivenöl";
+
+    private static String user="";
+    private static String password="";
+    private static String[] parts= new String[2];
+
+    //static File inputFile = new File("src\\main\\resources\\database\\OracleDB_logindetails");
+    static File encryptedFile = new File("src\\main\\resources\\database\\AzureDB_logindetails");
+    //static File decryptedFile = new File("src\\main\\resources\\database\\document.decrypted");
+
+    protected static void getlogindata() throws CryptoException {
+        parts = CryptoUtils.decrypt(key, encryptedFile);
+        String completeString = parts[0] + parts[1];
+        parts = completeString.split("=");
+        user = parts[1];
+        password = parts[2];
+        user = user.replace("password", "");
+        log.info("AzureDB_logindetails:  user: " + user   +" password: " + password);
+    }
+
     private static final Logger log = LogManager.getLogger(DBalt.class);
 
 
@@ -22,7 +43,7 @@ public class DBalt implements IDataBasealt {
         properties.load(getClass().getClassLoader().getResourceAsStream("config.properties"));
 
         log.info("Connecting to the database!");
-        Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties.getProperty("user"), properties.getProperty("password"));
+        Connection connection = DriverManager.getConnection(properties.getProperty("url"), properties.getProperty(user), properties.getProperty(password));
         log.info("Database connection test" + connection.getCatalog());
 
         connection.setAutoCommit(true);
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java
index 51f83a17..609d2476 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/ISQLDataBase.java
@@ -7,7 +7,7 @@ import java.util.ArrayList;
 
 public interface ISQLDataBase {
 
-    Connection connect() throws DatabaseError;
+    Connection connect() throws DatabaseError, CryptoException;
 
     ArrayList<MapData> getCoreMaps() throws DatabaseError;
 
diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java
index 5eac5ff7..82006d89 100644
--- a/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java
+++ b/src/main/java/de/hdm_stuttgart/battlearena/Persistance/Classes/OracleDB.java
@@ -4,21 +4,39 @@ import de.hdm_stuttgart.battlearena.Exceptions.DatabaseError;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.io.File;
 import java.sql.*;
 import java.util.ArrayList;
 
 import oracle.jdbc.pool.OracleDataSource;
 
+
 public class OracleDB implements ISQLDataBase {
+    static String key = "Peters Olivenöl";
+    private static String user="";
+    private static String password="";
+    private static String[] parts= new String[2];
+
+    static File encryptedFile = new File("src\\main\\resources\\database\\document.encrypted");
+
+    //static File encryptedFile = new File("src\\main\\resources\\database\\document.encrypted");
+    //static File decryptedFile = new File("src\\main\\resources\\database\\document.decrypted");
 
     private static final Logger log = LogManager.getLogger(OracleDB.class);
+    public void getlogindata() throws CryptoException {
+        parts = CryptoUtils.decrypt(key, encryptedFile);
+        user = parts[0];
+        password = parts[1];
+        log.info("OracleDB_logindetails:  user: " + user + "  password: " +  password);
+    }
     @Override
-    public Connection connect() throws DatabaseError{
+    public Connection connect() throws DatabaseError, CryptoException {
+        getlogindata();
         try {
             OracleDataSource ods = new OracleDataSource();
             ods.setURL("jdbc:oracle:thin:@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=g093caf2cf1fea4_battlearena_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))");
-            ods.setUser("battlearenaplayer");
-            ods.setPassword("jo3+++w3rw+s##AA");
+            ods.setUser(user);
+            ods.setPassword(password);
             Connection conn = ods.getConnection();
 
             log.info("Connecting to the database!");
@@ -100,7 +118,7 @@ public class OracleDB implements ISQLDataBase {
         }
     }
 
-    public void uploadCommunityMap(MapData map) throws DatabaseError{
+    public void uploadCommunityMapByID(MapData map) throws DatabaseError{
         try(Connection connection = connect()) {
             String sql = "INSERT INTO battlearenadata.communitymaps (map_id, map_name, map_width, map_height, map_data) VALUES (?, ?, ?, ?, ?)";
             PreparedStatement stmt = connection.prepareStatement(sql);
diff --git a/src/main/resources/database/AzureDB_logindetails b/src/main/resources/database/AzureDB_logindetails
new file mode 100644
index 0000000000000000000000000000000000000000..1911780ef54a37f40c4b37e5f4a478f8c7874d28
GIT binary patch
literal 111
zcmXTTf4_e(5Q$${0wi54Z51K>cXQWh0a<lGEDXX7k`QqqdA1`?S_w#(z(wk0fJ_}A
ZzPtuV@B#6S-QjMWKpKt=fGj6Ab^zP3NFe|K

literal 0
HcmV?d00001

diff --git a/src/main/resources/database/OracleDB_logindetails b/src/main/resources/database/OracleDB_logindetails
new file mode 100644
index 0000000000000000000000000000000000000000..837a9fbcf781d32fe5ecb8608ad6a314235ba395
GIT binary patch
literal 48
zcmV-00MGv^1%~e?>!3~N0C{PaZl~7$p*RB0m>v*$v<63J980qjdfd<KybHwVF_VV{
Gd7K3&gBDQ$

literal 0
HcmV?d00001

diff --git a/src/main/resources/database/document.encrypted b/src/main/resources/database/document.encrypted
new file mode 100644
index 0000000000000000000000000000000000000000..4628fda970ac9930417a073c4bac11ac2cafdc69
GIT binary patch
literal 84
zcmdO7eZPM%5UByNFAy_SW&+7PAci9grgJmo1S)}iHup3cZy+sH1()Q8unZv-D@YY9
E0Is4mj{pDw

literal 0
HcmV?d00001

-- 
GitLab