Added python project; fixed spelling of folder

This commit is contained in:
2023-09-30 16:09:14 -05:00
parent 1f23cb73d1
commit 6bf66c5916
1075 changed files with 2165 additions and 0 deletions

View 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) { }
}
}