Added python project; fixed spelling of folder
This commit is contained in:
256
Java Projects/DarkCrypt/src/handlers/DBConnect.java
Normal file
256
Java Projects/DarkCrypt/src/handlers/DBConnect.java
Normal file
@@ -0,0 +1,256 @@
|
||||
package com.itdominator.darkcrypt.handlers;
|
||||
|
||||
|
||||
import com.itdominator.darkcrypt.utils.DarkCryptLogger;
|
||||
import com.itdominator.darkcrypt.handlers.DBConnect;
|
||||
import com.itdominator.darkcrypt.utils.Utils;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.DriverManager;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Statement;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
|
||||
|
||||
import java.util.logging.Level;
|
||||
import java.util.Properties;
|
||||
import java.util.Enumeration;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
public class DBConnect {
|
||||
// Classes
|
||||
private static DBConnect dbConnect = new DBConnect();
|
||||
private DarkCryptLogger cryptLogger = DarkCryptLogger.getInstance();
|
||||
|
||||
private Connection connector; // SQL connector to DriverManager connection.
|
||||
private Set<String> noDupTagsSet = new HashSet<String>();
|
||||
private static final String JDBC_URL = "jdbc:sqlite:resources/DarkCrypt.db";
|
||||
|
||||
// Instance passer
|
||||
public static DBConnect getInstance() { return dbConnect; }
|
||||
|
||||
// Init DBConnect
|
||||
private DBConnect() {
|
||||
try {
|
||||
this.connector = DriverManager.getConnection(JDBC_URL);
|
||||
if (this.connector != null)
|
||||
System.out.println("Connected to db driver....");
|
||||
} catch (SQLException sqlException) {
|
||||
String message = "\nDarkCrypt Failed to connect to the database.... See logs.\n";
|
||||
System.out.println(message);
|
||||
cryptLogger.insertToLog(Level.SEVERE, message, sqlException);
|
||||
}
|
||||
}
|
||||
|
||||
public List<String> searchForEntry(String searchTerm) {
|
||||
List<String> data = new ArrayList<String>();
|
||||
try {
|
||||
String sql = "SELECT Title FROM DarkCrypt WHERE Title LIKE ?";
|
||||
PreparedStatement pstmt = connector.prepareStatement(sql);
|
||||
pstmt.setString(1, "%" + searchTerm + "%");
|
||||
|
||||
ResultSet rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
data.add(rs.getString("Title"));
|
||||
}
|
||||
} catch (SQLException sqlException) { }
|
||||
return data;
|
||||
}
|
||||
|
||||
public void createEntry(String[] data) throws Exception {
|
||||
String unencryptedPassword = data[3];
|
||||
data[5] = (data[5].isEmpty()) ? "[no tag]": data[5].replace("\\s","");
|
||||
|
||||
if (!unencryptedPassword.isEmpty())
|
||||
data[3] = Utils.encryptGeneral(unencryptedPassword);
|
||||
|
||||
String preStmt = "INSERT INTO DarkCrypt (Title, Description, Username, Password, Url, Tags)" +
|
||||
" Values(?,?,?,?,?,?)";
|
||||
String errorMsg = "DarkCrypt Failed to insert to the database... See logs.\n";
|
||||
|
||||
dbHandler(preStmt, data, errorMsg);
|
||||
System.out.println("Created entry...");
|
||||
}
|
||||
|
||||
public void updateEntry(String[] data) throws Exception {
|
||||
String unencryptedPassword = data[3];
|
||||
data[5] = (data[5].equals("")) ? "[no tag]": data[5].replace("\\s","");
|
||||
data[3] = Utils.encryptGeneral(unencryptedPassword);
|
||||
|
||||
String preStmt = "UPDATE DarkCrypt SET Title = ? , Description = ? , Username = ? ," +
|
||||
" Password = ? , Url = ? , Tags = ? WHERE id = ? ";
|
||||
String errorMsg = "\nDarkCrypt Failed to update row in database... See logs.\n";
|
||||
|
||||
dbHandler(preStmt, data, errorMsg);
|
||||
System.out.print("Updated entry...");
|
||||
}
|
||||
|
||||
public void deleteEntry(String[] data) {
|
||||
String preStmt = "DELETE FROM DarkCrypt WHERE id = ? ";
|
||||
String errorMsg = "DarkCrypt Failed to delete from database... See logs.\n";
|
||||
|
||||
dbHandler(preStmt, data, errorMsg);
|
||||
System.out.print("Deleted entry...");
|
||||
}
|
||||
|
||||
public String[] retrieveEntry(String branch, String leaf) {
|
||||
String[] data = new String[7];
|
||||
String preStmt = "";
|
||||
PreparedStatement stmt;
|
||||
|
||||
try {
|
||||
// This has issues if there is a duplicate entry of title but branch is root.
|
||||
// The design is supposed look at tags to root out duplicates.
|
||||
if (!branch.equals(":: Tags ::")) {
|
||||
preStmt = "SELECT * FROM DarkCrypt WHERE Tags LIKE ? AND Title = ?";
|
||||
stmt = connector.prepareStatement(preStmt);
|
||||
stmt.setString(1, "%" + branch + "%");
|
||||
stmt.setString(2, leaf);
|
||||
} else {
|
||||
preStmt = "SELECT * FROM DarkCrypt WHERE Title = ?";
|
||||
stmt = connector.prepareStatement(preStmt);
|
||||
stmt.setString(1, leaf);
|
||||
}
|
||||
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
data[0] = rs.getString("Title");
|
||||
data[1] = rs.getString("Description");
|
||||
data[2] = rs.getString("Username");
|
||||
|
||||
// passwords are encrypted and therefore need to be decrypted to view
|
||||
if (!rs.getString("Password").isEmpty())
|
||||
data[3] = Utils.decryptGeneral(rs.getString("Password"));
|
||||
else
|
||||
data[3] = rs.getString("Password");
|
||||
|
||||
data[4] = rs.getString("Url");
|
||||
data[5] = rs.getString("Tags").replace("[no tag]", "");
|
||||
data[6] = rs.getString("id");
|
||||
}
|
||||
} catch (SQLException sqlException) {
|
||||
String message = "DarkCrypt Failed to get from database query data... See logs.\n";
|
||||
System.out.println(message + sqlException);
|
||||
cryptLogger.insertToLog(Level.SEVERE, message, sqlException);
|
||||
} catch (Exception e) {}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
private void dbHandler(String preStmt, String[] arguments, String message) {
|
||||
try {
|
||||
PreparedStatement stmt = connector.prepareStatement(preStmt);
|
||||
|
||||
int count = arguments.length;
|
||||
if (count > 1) {
|
||||
for (int i = 1; i <= count; i++) { // B/c of sql prep statement it starts at 1
|
||||
if (i != 7) {
|
||||
stmt.setString(i, arguments[i-1]);
|
||||
} else { // Need to convert 'id' to int
|
||||
System.out.println(i);
|
||||
stmt.setInt(i, Integer.parseInt(arguments[i-1]));
|
||||
}
|
||||
}
|
||||
} else if (count == 1) { // Assuming deletion since only 'id' passesd
|
||||
stmt.setInt(1, Integer.parseInt(arguments[0]));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
|
||||
stmt.executeUpdate();
|
||||
} catch (SQLException sqlException) {
|
||||
System.out.println(message);
|
||||
cryptLogger.insertToLog(Level.SEVERE, message, sqlException);
|
||||
}
|
||||
}
|
||||
|
||||
public Set<String> getBranches() {
|
||||
try {
|
||||
String sql = "SELECT Tags FROM DarkCrypt";
|
||||
PreparedStatement stmt = connector.prepareStatement(sql);;
|
||||
ResultSet rs = stmt.executeQuery();
|
||||
|
||||
// Get a de-duplicated set of tags that are coma split
|
||||
while (rs.next()) {
|
||||
String[] commaSplitTags = rs.getString("Tags").split("\\"+",");
|
||||
for (int i=0; i<commaSplitTags.length; i++) {
|
||||
if (!noDupTagsSet.contains(commaSplitTags[i]))
|
||||
noDupTagsSet.add(commaSplitTags[i]);
|
||||
}
|
||||
}
|
||||
} catch (SQLException ex) {}
|
||||
return noDupTagsSet;
|
||||
}
|
||||
|
||||
public List<String> getLeaves(String branch) {
|
||||
List<String> data = new ArrayList<String>();
|
||||
String sql = "SELECT * FROM DarkCrypt WHERE ',' || Tags || ',' LIKE ?";
|
||||
try {
|
||||
PreparedStatement pstmt = connector.prepareStatement(sql);
|
||||
pstmt.setString(1, "%"+ branch +",%");
|
||||
|
||||
ResultSet rs = pstmt.executeQuery();
|
||||
while (rs.next()) {
|
||||
data.add(rs.getString("Title"));
|
||||
}
|
||||
} catch (SQLException ex) {}
|
||||
return data;
|
||||
}
|
||||
|
||||
// See if a passwd exists or compare NOTE: the first run in controller
|
||||
// sees if a password exists and all other runs compare...
|
||||
public boolean checkPassword(String pass, boolean passwdPresent, boolean compare) {
|
||||
if (passwdPresent) {
|
||||
try {
|
||||
Statement st = this.connector.createStatement();
|
||||
String sql = String.format("SELECT * FROM Login");
|
||||
ResultSet rs = st.executeQuery(sql);
|
||||
|
||||
if (rs.next()) {
|
||||
if (compare) {
|
||||
if (pass.equals(Utils.decryptGeneral(rs.getString("Pass")))) {
|
||||
pass = "";
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} catch (SQLException sqlException) {
|
||||
String message = "\nDarkCrypt Failed to access database... See logs.\n";
|
||||
System.out.println(message);
|
||||
cryptLogger.insertToLog(Level.SEVERE, message, sqlException);
|
||||
} catch (Exception decException) {
|
||||
String message = "\nDarkCrypt Failed to encode password properly... See logs.\n";
|
||||
System.out.println(message);
|
||||
cryptLogger.insertToLog(Level.WARNING, message, decException);
|
||||
}
|
||||
return false;
|
||||
} else {
|
||||
setLogin(pass);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public void setLogin(String key) {
|
||||
try {
|
||||
key = Utils.encryptGeneral(key);
|
||||
|
||||
String sql = "INSERT INTO Login Values (?)";
|
||||
PreparedStatement pstmt = connector.prepareStatement(sql);
|
||||
pstmt.setString(1, key);
|
||||
pstmt.execute();
|
||||
} catch (SQLException sqlException) {
|
||||
String message = "\nDarkCrypt Failed to access Login database...\n";
|
||||
System.out.println(message + sqlException);
|
||||
cryptLogger.insertToLog(Level.SEVERE, message, sqlException);
|
||||
} catch (Exception e) { }
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user