diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e9ec169..3cf3d9b 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,8 +4,11 @@
-
-
+
+
+
+
+
@@ -392,7 +395,7 @@
-
+
@@ -674,7 +677,15 @@
1723393276632
-
+
+
+ 1723393478027
+
+
+
+ 1723393478027
+
+
@@ -692,7 +703,6 @@
-
@@ -717,7 +727,8 @@
-
+
+
diff --git a/src/main/java/com/alttd/forms/controlers/FormRequestHandler.java b/src/main/java/com/alttd/forms/controlers/FormRequestHandler.java
index 7c1bd0b..b3e9116 100644
--- a/src/main/java/com/alttd/forms/controlers/FormRequestHandler.java
+++ b/src/main/java/com/alttd/forms/controlers/FormRequestHandler.java
@@ -16,7 +16,7 @@ public class FormRequestHandler {
private static final Logger logger = LoggerFactory.getLogger(FormRequestHandler.class);
public static CompletableFuture> handleRequestWithVerifyMail(Form form, String ip) {
- CompletableFuture storeFormForVerificationCode = new StoreFormQuery().storeFormForVerificationCode(form.getSender(), form);
+ CompletableFuture storeFormForVerificationCode = new StoreFormQuery().storeFormForVerificationCode(form.getSender(), form, ip);
return storeFormForVerificationCode.thenCompose(code -> Verify.verifyEmail(ip, form.getSender(), code, form).thenApply(verificationResult -> {
if (verificationResult == VerificationResult.VERIFICATION_SENT) {
//TODO if this is ok tell the user they have x min to verify if they fail to do so they have to remake the form
diff --git a/src/main/java/com/alttd/forms/database/Database.java b/src/main/java/com/alttd/forms/database/Database.java
index a5a3e45..8651f43 100644
--- a/src/main/java/com/alttd/forms/database/Database.java
+++ b/src/main/java/com/alttd/forms/database/Database.java
@@ -8,7 +8,7 @@ import java.sql.SQLException;
public class Database {
- private static final Logger logger = LoggerFactory.getLogger(Database.class); //TODO can be replaced with library and that one db file that creates the db
+ private static final Logger logger = LoggerFactory.getLogger(Database.class);
public static void createTables() {
String[] createTables = {
@@ -28,6 +28,8 @@ public class Database {
creation_date BIGINT NOT NULL,
form_json TEXT NOT NULL,
form_class VARCHAR(64) NOT NULL,
+ ip VARCHAR(45) not null,
+ time TIMESTAMP default current_timestamp() not null,
PRIMARY KEY(formId)
)
""",
diff --git a/src/main/java/com/alttd/forms/form/StoreFormQuery.java b/src/main/java/com/alttd/forms/form/StoreFormQuery.java
index 222e92b..e08ba31 100644
--- a/src/main/java/com/alttd/forms/form/StoreFormQuery.java
+++ b/src/main/java/com/alttd/forms/form/StoreFormQuery.java
@@ -21,29 +21,30 @@ public class StoreFormQuery {
return 100000 + random.nextInt(900000);
}
- private Optional insertForm(Connection connection, Form form) {
- String insertForm = "INSERT INTO form (creation_date, form_json, form_class) VALUES (?, ?, ?)";
+ private Optional insertForm(Connection connection, Form form, String ip) {
+ String insertForm = "INSERT INTO form (creation_date, form_json, form_class, ip) VALUES (?, ?, ?, ?)";
try (PreparedStatement stmt = connection.prepareStatement(insertForm, Statement.RETURN_GENERATED_KEYS)) {
stmt.setLong(1, Instant.now().toEpochMilli());
stmt.setString(2, form.toJsonString());
stmt.setString(3, form.getClass().getSimpleName());
+ stmt.setString(4, ip);
int affectedRows = stmt.executeUpdate();
if (affectedRows == 0) {
- logger.error("No rows affected during insert of form: " + form);
+ logger.error("No rows affected during insert of form: {}", form);
return Optional.empty();
}
ResultSet generatedKeys = stmt.getGeneratedKeys();
if (generatedKeys.next()) {
return Optional.of(generatedKeys.getLong(1));
} else {
- logger.error("No primary key generated when inserting form " + form);
+ logger.error("No primary key generated when inserting form {}", form);
return Optional.empty();
}
} catch (SQLException e) {
- logger.error("Failed insert form query for: " + form, e);
+ logger.error("Failed insert form query for: {}", form, e);
return Optional.empty();
} catch (JsonProcessingException e) {
- logger.error("Invalid class for JSON, failed insert form query for: " + form, e);
+ logger.error("Invalid class for JSON, failed insert form query for: {}", form, e);
return Optional.empty();
}
}
@@ -58,17 +59,17 @@ public class StoreFormQuery {
stmt.executeUpdate();
return Optional.of(verificationCode);
} catch (SQLException e) {
- logger.error("Failed to insert verification code for form with id: " + formId);
+ logger.error("Failed to insert verification code for form with id: {}", formId);
return Optional.empty();
}
}
- public CompletableFuture storeFormForVerificationCode(String eMail, Form form) {
+ public CompletableFuture storeFormForVerificationCode(String eMail, Form form, String ip) {
logger.debug("storeFormForVerificationCode");
Connection connection = DatabaseConnection.getConnection();
logger.trace("Connection: {}", connection);
return CompletableFuture.supplyAsync(() -> {
- Optional optionalFormId = insertForm(connection, form);
+ Optional optionalFormId = insertForm(connection, form, ip);
logger.trace("Form id: {}", optionalFormId);
if (optionalFormId.isEmpty()) {
throw new RuntimeException("Failed to store form");
diff --git a/src/test/java/TestForm.java b/src/test/java/TestForm.java
index 3d4db08..548b92e 100644
--- a/src/test/java/TestForm.java
+++ b/src/test/java/TestForm.java
@@ -23,7 +23,7 @@ public class TestForm {
Assertions.assertDoesNotThrow(() -> DatabaseConnection.initialize());
StoreFormQuery storeFormQuery = new StoreFormQuery();
ContactFormData contactFormData = new ContactFormData("akastijn", "akastijn@alttd.com", "This is a test question.");
- storeFormQuery.storeFormForVerificationCode("akastijn@alttd.com", contactFormData).
+ storeFormQuery.storeFormForVerificationCode("akastijn@alttd.com", contactFormData, "0.0.0.0").
thenAccept(code -> {
TestForm.code = code;
Assertions.assertTrue(code > 999 && code < 10000);