summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java83
1 files changed, 83 insertions, 0 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java
new file mode 100644
index 00000000..27dc2b6e
--- /dev/null
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbConfiguration.java
@@ -0,0 +1,83 @@
+package org.openslx.bwlp.sat.database.mappers;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.security.KeyStore;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.log4j.Logger;
+import org.openslx.bwlp.sat.database.Database;
+import org.openslx.bwlp.sat.database.MysqlConnection;
+import org.openslx.bwlp.sat.database.MysqlStatement;
+
+public class DbConfiguration {
+
+ private static final Logger LOGGER = Logger.getLogger(DbConfiguration.class);
+
+ private static final String KEY_CERTIFICATE = "certstore";
+
+ public static KeyStore loadKeyStore(String password) throws KeyStoreException, SQLException,
+ NoSuchAlgorithmException, CertificateException, IOException {
+ KeyStore keystore = KeyStore.getInstance("JKS");
+ InputStream stream = retrieveStream(KEY_CERTIFICATE);
+ if (stream == null)
+ return null;
+ keystore.load(stream, password.toCharArray());
+ return keystore;
+ }
+
+ public static void saveKeyStore(File file) throws SQLException, FileNotFoundException, IOException {
+ store(KEY_CERTIFICATE, new FileInputStream(file));
+ }
+
+ private static void store(String configKey, InputStream stream) throws IOException, SQLException {
+ store(configKey, IOUtils.toByteArray(stream));
+ }
+
+ private static void store(String configKey, byte[] value) throws SQLException {
+ try (MysqlConnection connection = Database.getConnection()) {
+ MysqlStatement stmt = connection.prepareStatement("INSERT INTO configuration"
+ + " (parameter, value) VALUES (:parameter, :value)"
+ + " ON DUPLICATE KEY UPDATE value = VALUES(value)");
+ stmt.setString("parameter", configKey);
+ stmt.setBinary("value", value);
+ stmt.executeUpdate();
+ connection.commit();
+ } catch (SQLException e) {
+ LOGGER.error("Query failed in DbConfiguration.store()", e);
+ throw e;
+ }
+ }
+
+ private static InputStream retrieveStream(String configKey) throws SQLException {
+ byte[] data = retrieve(configKey);
+ if (data == null)
+ return null;
+ return new ByteArrayInputStream(data);
+ }
+
+ private static byte[] retrieve(String configKey) throws SQLException {
+ try (MysqlConnection connection = Database.getConnection()) {
+ MysqlStatement stmt = connection.prepareStatement("SELECT value FROM configuration"
+ + " WHERE parameter = :parameter LIMIT 1");
+ stmt.setString("parameter", configKey);
+ ResultSet rs = stmt.executeQuery();
+ if (!rs.next())
+ return null;
+ return rs.getBytes("value");
+ } catch (SQLException e) {
+ LOGGER.error("Query failed in DbConfiguration.retrieve()", e);
+ throw e;
+ }
+ }
+
+}