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 @@ - @@ -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);