@@ -1,5 +1,6 @@
package planetrenox.controller;
import lombok.NonNull;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import planetrenox.encryption.AES256_GCM;
@@ -21,15 +22,16 @@ public class FormController
* "DOCUMENT_TYPE": "DECRYPT_SUCCESS" || "DECRYPT_FAILURE"
*/
@PostMapping(path = "/", params = {"name", "password"})
public Map<String, Object> login(@RequestParam("name") String name, @RequestParam("password") String password)
public Map<String, Object> login
(@NonNull @RequestParam("name") final String name, @NonNull @RequestParam("password") final String password)
{
Map<String, Object> loginDocument = RequestValidation.validateLogin(name, password);
if ((boolean) loginDocument.get("INVALID")) return loginDocument; // Validation Failed
else // Validation Successful
{
name = (String) loginDocument.get("CLEAN_NAME");
fi nal String sanitizedN ame = (String) loginDocument.get("CLEAN_NAME");
loginDocument.clear();
Dungeon dungeon = repository.findByNameIgnoreCase(name);
Dungeon dungeon = repository.findByNameIgnoreCase(sa nitizedN ame);
if (dungeon == null) // New User
{
loginDocument.put("DOCUMENT_TYPE", "NEW_USER");
@@ -57,20 +59,21 @@ public class FormController
* "DOCUMENT_TYPE": "DECRYPT_FAILURE"
*/
@PostMapping(path = "/", params = {"name", "password", "text", "tabs"})
public Map<String, Object> save(@RequestParam("name") String name, @RequestParam("password") String password, @RequestParam("text") String text, @RequestParam("tabs") int tabs)
public Map<String, Object> save
(@NonNull @RequestParam("name") final String name, @NonNull @RequestParam("password") final String password, @NonNull @RequestParam("text") final String text, @NonNull @RequestParam("tabs") final int tabs)
{
Map<String, Object> saveDocument = RequestValidation.validateSave(name, password, text, tabs);
if ((boolean) saveDocument.get("INVALID")) return saveDocument; // Validation Failed
else // Validation Successful
{
name = (String) saveDocument.get("CLEAN_NAME");
text = (String) saveDocument.get("CLEAN_TEXT");
fi nal String sanitizedN ame = (String) saveDocument.get("CLEAN_NAME");
final S tring sanitizedT ext = (String) saveDocument.get("CLEAN_TEXT");
saveDocument.clear();
Dungeon dungeon = repository.findByNameIgnoreCase(name);
Dungeon dungeon = repository.findByNameIgnoreCase(sa nitizedN ame);
if (dungeon == null) // New User
{
saveDocument.put("DOCUMENT_TYPE", "SAVED");
dungeon = new Dungeon(name, AES256_GCM.encrypt(text, password), new java.util.HashMap<>(Map.of(
dungeon = new Dungeon(sa nitizedN ame, AES256_GCM.encrypt(sani tizedT ext, password), new java.util.HashMap<>(Map.of(
"TAB_COUNT", Integer.toString(tabs),
"TYPE", "FREE"
)));
@@ -84,7 +87,7 @@ public class FormController
} else // Password Correct - Saved
{
saveDocument.put("DOCUMENT_TYPE", "SAVED");
dungeon.setEncryptionData(AES256_GCM.encrypt(text, password));
dungeon.setEncryptionData(AES256_GCM.encrypt(sani tizedT ext, password));
Map<String, String> meta = dungeon.getMeta();
meta.put("TAB_COUNT", Integer.toString(tabs));
dungeon.setMeta(meta);
@@ -96,9 +99,12 @@ public class FormController
}
@PostMapping(path = "/", params = {"name", "password", "delete"})
public void delete(@RequestParam("name") String name, @RequestParam("password") String password)
public void delete
(@NonNull @RequestParam("name") final String name, @NonNull @RequestParam("password") final String password)
{
Dungeon dungeon = repository.findByNameIgnoreCase(name);
Map<String, Object> deleteDocument = RequestValidation.validateLogin(name, password);
final String sanitizedName = (String) deleteDocument.get("CLEAN_NAME");
Dungeon dungeon = repository.findByNameIgnoreCase(sanitizedName);
if (dungeon != null)
{
dungeon.setCleartext(AES256_GCM.decrypt(dungeon.getEncryptionData(), password));
@@ -109,17 +115,18 @@ public class FormController
}
}
@PostMapping(path = "/", params = {"name", "password", "text", "tabs, newpassword"})
public Map<String, Object> reset(@RequestParam("name") String name, @RequestParam("password") String password, @RequestParam("text") String text, @RequestParam("tabs") int tabs, @RequestParam("newpassword") String newPassword)
@PostMapping(path = "/", params = {"name", "password", "text", "tabs", "newpassword"})
public Map<String, Object> reset
(@NonNull @RequestParam("name") final String name, @NonNull @RequestParam("password") final String password, @NonNull @RequestParam("text") final String text, @NonNull @RequestParam("tabs") final int tabs, @NonNull @RequestParam("newpassword") final String newPassword)
{
Map<String, Object> saveDocument = RequestValidation.validateReset(name, password, text, tabs, newPassword);
if ((boolean) saveDocument.get("INVALID")) return saveDocument; // Validation Failed
else // Validation Successful
{
name = (String) saveDocument.get("CLEAN_NAME");
text = (String) saveDocument.get("CLEAN_TEXT");
fi nal String sanitizedN ame = (String) saveDocument.get("CLEAN_NAME");
final S tring sanitizedT ext = (String) saveDocument.get("CLEAN_TEXT");
saveDocument.clear();
Dungeon dungeon = repository.findByNameIgnoreCase(name);
Dungeon dungeon = repository.findByNameIgnoreCase(sa nitizedN ame);
if (dungeon != null)
{
if (AES256_GCM.decrypt(dungeon.getEncryptionData(), password) == null) // DECRYPT FAILURE
@@ -128,7 +135,7 @@ public class FormController
} else // Password Correct
{
saveDocument.put("DOCUMENT_TYPE", "SAVED");
dungeon.setEncryptionData(AES256_GCM.encrypt(text, newPassword));
dungeon.setEncryptionData(AES256_GCM.encrypt(sani tizedT ext, newPassword));
Map<String, String> meta = dungeon.getMeta();
meta.put("TAB_COUNT", Integer.toString(tabs));
dungeon.setMeta(meta);
@@ -138,5 +145,4 @@ public class FormController
return saveDocument;
}
}
}