|
@@ -0,0 +1,78 @@
|
|
|
+package xyz.prismix.OPCAI_server.DataBase;
|
|
|
+
|
|
|
+import at.favre.lib.crypto.bcrypt.BCrypt;
|
|
|
+import org.apache.commons.lang3.RandomStringUtils;
|
|
|
+
|
|
|
+import java.sql.*;
|
|
|
+
|
|
|
+public class SQLDatabase {
|
|
|
+ static Connection connection;
|
|
|
+ static {
|
|
|
+ try {
|
|
|
+ String url = "jdbc:mysql://192.168.1.42/OPCAI";
|
|
|
+ String user = "OPCAI";
|
|
|
+ String password = "OPCAI1234!?";
|
|
|
+ connection = DriverManager.getConnection(url, user, password);
|
|
|
+ } catch (SQLException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static String createAccount(String username, String password) throws SQLException {
|
|
|
+ Statement statement = SQLDatabase.connection.createStatement();
|
|
|
+ ResultSet set = statement.executeQuery("SELECT * FROM Users WHERE Username='" + username + "';"); //TODO: Fix sql injection
|
|
|
+ if (set.next()) {
|
|
|
+ return "This username is already taken !";
|
|
|
+ }
|
|
|
+
|
|
|
+ String salt = RandomStringUtils.randomAlphanumeric(10);
|
|
|
+ password = BCrypt.with(BCrypt.Version.VERSION_2X).hashToString(12, (password + salt).toCharArray());
|
|
|
+
|
|
|
+ statement.executeUpdate("INSERT INTO Users (Username, Password, Salt) VALUES ('" + username + "', '" + password + "', '" + salt + "');");
|
|
|
+ return "Success";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static boolean verifyAccount(String username, String password) throws SQLException {
|
|
|
+ String sql = "SELECT Password, Salt FROM Users WHERE Username = ?";
|
|
|
+ PreparedStatement preparedStatement = SQLDatabase.connection.prepareStatement(sql);
|
|
|
+ preparedStatement.setString(1, username);
|
|
|
+ ResultSet resultSet = preparedStatement.executeQuery();
|
|
|
+
|
|
|
+ if (!resultSet.next()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ String hashedPassword = resultSet.getString("Password");
|
|
|
+ String salt = resultSet.getString("Salt");
|
|
|
+
|
|
|
+ BCrypt.Result result = BCrypt.verifyer().verify((password + salt).toCharArray(), hashedPassword);
|
|
|
+
|
|
|
+ return result.verified;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static String getTokenForUser(String username, String password) throws SQLException {
|
|
|
+ if (!verifyAccount(username, password)) {
|
|
|
+ return "null";
|
|
|
+ }
|
|
|
+
|
|
|
+ String sql = "SELECT Token FROM Tokens WHERE Username = ?";
|
|
|
+ PreparedStatement preparedStatement = SQLDatabase.connection.prepareStatement(sql);
|
|
|
+ preparedStatement.setString(1, username);
|
|
|
+ ResultSet resultSet = preparedStatement.executeQuery();
|
|
|
+
|
|
|
+ if (resultSet.next()) {
|
|
|
+ return resultSet.getString("Token");
|
|
|
+ }
|
|
|
+
|
|
|
+ String newToken = RandomStringUtils.randomAlphanumeric(50);
|
|
|
+
|
|
|
+ PreparedStatement insertion = SQLDatabase.connection.prepareStatement("INSERT INTO Tokens (Token, Username) VALUES (?, ?)");
|
|
|
+ insertion.setString(1, newToken);
|
|
|
+ insertion.setString(2, username);
|
|
|
+ insertion.executeUpdate();
|
|
|
+
|
|
|
+ return newToken;
|
|
|
+ }
|
|
|
+}
|