From 8e2412f36ae3798fd2af38eab0c2427b01d827c3 Mon Sep 17 00:00:00 2001 From: kirillius Date: Fri, 26 Dec 2025 06:12:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B8=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B0=D0=BB=20package,=20=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE=D1=80=D0=B8=D0=BB=20=D1=8E?= =?UTF-8?q?=D0=B7=D0=B5=D1=80=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../XCP/{api => }/Commons/Config.java | 2 +- .../XCP/{api => }/Commons/ConfigManager.java | 2 +- .../XCP/{api => }/Commons/Context.java | 6 +- .../{api => }/Commons/ResourceHandler.java | 2 +- .../XCP/{api => }/Commons/Service.java | 2 +- .../XCP/{api => }/Commons/StreamHandler.java | 2 +- .../{api => }/Data/DataTransferProtocol.java | 2 +- .../XCP/{api => }/Data/PollSettings.java | 2 +- .../XCP/{api => }/Data/ValueModifier.java | 2 +- .../{api => }/Data/ValueModifierSettings.java | 2 +- .../XCP/Persistence/Entities/Group.java | 8 +++ .../XCP/Persistence/Entities/Input.java | 13 ++++ .../XCP/Persistence/Entities/Output.java | 7 ++ .../{api => }/Persistence/Entities/User.java | 10 +-- .../XCP/{api => }/Persistence/IOEntity.java | 6 +- .../XCP/{api => }/Persistence/NodeEntity.java | 4 +- .../{api => }/Persistence/NodeRepository.java | 6 +- .../Persistence/PersistenceEntity.java | 2 +- .../Repositories/GroupRepository.java | 14 ++++ .../Repositories/InputRepository.java | 8 +++ .../Repositories/OutputRepository.java | 8 +++ .../Repositories/UserRepository.java | 9 +++ .../XCP/{api => }/Persistence/Repository.java | 4 +- .../Persistence/RepositoryService.java | 4 +- .../kirillius/XCP/Security/HashUtility.java | 9 +++ .../XCP/{api => }/Security/UserRole.java | 2 +- .../XCP/api/Persistence/Entities/Group.java | 8 --- .../XCP/api/Persistence/Entities/Input.java | 13 ---- .../XCP/api/Persistence/Entities/Output.java | 7 -- .../Repositories/GroupRepository.java | 14 ---- .../Repositories/InputRepository.java | 8 --- .../Repositories/OutputRepository.java | 8 --- .../Repositories/UserRepository.java | 10 --- core/pom.xml | 28 ++++++++ .../XCP/Security/Argon2HashUtility.java | 35 ++++++++++ database/pom.xml | 6 ++ .../XCP/Persistence/AbstractRepository.java | 4 +- .../XCP/Persistence/EntityImplementation.java | 2 - .../EntityReferenceDeserializer.java | 1 - .../EntityReferenceSerializer.java | 1 - .../PersistenceSerializationModule.java | 1 - .../UserRepositoryImpl.java | 68 +++++-------------- .../Persistence/RepositoryServiceImpl.java | 8 +-- database/src/test/java/TestContext.java | 8 +-- .../RepositoryServiceImplTest.java | 4 +- pom.xml | 8 +++ 46 files changed, 212 insertions(+), 168 deletions(-) rename api/src/main/java/ru/kirillius/XCP/{api => }/Commons/Config.java (87%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Commons/ConfigManager.java (82%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Commons/Context.java (60%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Commons/ResourceHandler.java (72%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Commons/Service.java (74%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Commons/StreamHandler.java (73%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Data/DataTransferProtocol.java (65%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Data/PollSettings.java (90%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Data/ValueModifier.java (62%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Data/ValueModifierSettings.java (89%) create mode 100644 api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Group.java create mode 100644 api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Input.java create mode 100644 api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Output.java rename api/src/main/java/ru/kirillius/XCP/{api => }/Persistence/Entities/User.java (59%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Persistence/IOEntity.java (67%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Persistence/NodeEntity.java (84%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Persistence/NodeRepository.java (69%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Persistence/PersistenceEntity.java (79%) create mode 100644 api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/GroupRepository.java create mode 100644 api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/InputRepository.java create mode 100644 api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/OutputRepository.java create mode 100644 api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/UserRepository.java rename api/src/main/java/ru/kirillius/XCP/{api => }/Persistence/Repository.java (91%) rename api/src/main/java/ru/kirillius/XCP/{api => }/Persistence/RepositoryService.java (71%) create mode 100644 api/src/main/java/ru/kirillius/XCP/Security/HashUtility.java rename api/src/main/java/ru/kirillius/XCP/{api => }/Security/UserRole.java (84%) delete mode 100644 api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Group.java delete mode 100644 api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Input.java delete mode 100644 api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Output.java delete mode 100644 api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/GroupRepository.java delete mode 100644 api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/InputRepository.java delete mode 100644 api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/OutputRepository.java delete mode 100644 api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/UserRepository.java create mode 100644 core/pom.xml create mode 100644 core/src/main/java/ru/kirillius/XCP/Security/Argon2HashUtility.java rename database/src/main/java/ru/kirillius/XCP/Persistence/{Services => Repositories}/UserRepositoryImpl.java (51%) diff --git a/api/src/main/java/ru/kirillius/XCP/api/Commons/Config.java b/api/src/main/java/ru/kirillius/XCP/Commons/Config.java similarity index 87% rename from api/src/main/java/ru/kirillius/XCP/api/Commons/Config.java rename to api/src/main/java/ru/kirillius/XCP/Commons/Config.java index 5618bb0..154c954 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Commons/Config.java +++ b/api/src/main/java/ru/kirillius/XCP/Commons/Config.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Commons; +package ru.kirillius.XCP.Commons; import java.io.File; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Commons/ConfigManager.java b/api/src/main/java/ru/kirillius/XCP/Commons/ConfigManager.java similarity index 82% rename from api/src/main/java/ru/kirillius/XCP/api/Commons/ConfigManager.java rename to api/src/main/java/ru/kirillius/XCP/Commons/ConfigManager.java index 43bebbd..251358e 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Commons/ConfigManager.java +++ b/api/src/main/java/ru/kirillius/XCP/Commons/ConfigManager.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Commons; +package ru.kirillius.XCP.Commons; import java.io.IOException; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Commons/Context.java b/api/src/main/java/ru/kirillius/XCP/Commons/Context.java similarity index 60% rename from api/src/main/java/ru/kirillius/XCP/api/Commons/Context.java rename to api/src/main/java/ru/kirillius/XCP/Commons/Context.java index 51e475c..2c011bd 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Commons/Context.java +++ b/api/src/main/java/ru/kirillius/XCP/Commons/Context.java @@ -1,4 +1,6 @@ -package ru.kirillius.XCP.api.Commons; +package ru.kirillius.XCP.Commons; + +import ru.kirillius.XCP.Security.HashUtility; public interface Context { Config getConfig(); @@ -8,4 +10,6 @@ public interface Context { S getService(Class serviceClass); void shutdown(); + + HashUtility getHashUtility(); } diff --git a/api/src/main/java/ru/kirillius/XCP/api/Commons/ResourceHandler.java b/api/src/main/java/ru/kirillius/XCP/Commons/ResourceHandler.java similarity index 72% rename from api/src/main/java/ru/kirillius/XCP/api/Commons/ResourceHandler.java rename to api/src/main/java/ru/kirillius/XCP/Commons/ResourceHandler.java index 4c5ebd3..8639bb9 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Commons/ResourceHandler.java +++ b/api/src/main/java/ru/kirillius/XCP/Commons/ResourceHandler.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Commons; +package ru.kirillius.XCP.Commons; import java.io.Closeable; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Commons/Service.java b/api/src/main/java/ru/kirillius/XCP/Commons/Service.java similarity index 74% rename from api/src/main/java/ru/kirillius/XCP/api/Commons/Service.java rename to api/src/main/java/ru/kirillius/XCP/Commons/Service.java index 27a8803..a026678 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Commons/Service.java +++ b/api/src/main/java/ru/kirillius/XCP/Commons/Service.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Commons; +package ru.kirillius.XCP.Commons; import java.io.Closeable; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Commons/StreamHandler.java b/api/src/main/java/ru/kirillius/XCP/Commons/StreamHandler.java similarity index 73% rename from api/src/main/java/ru/kirillius/XCP/api/Commons/StreamHandler.java rename to api/src/main/java/ru/kirillius/XCP/Commons/StreamHandler.java index fde73df..23abc52 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Commons/StreamHandler.java +++ b/api/src/main/java/ru/kirillius/XCP/Commons/StreamHandler.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Commons; +package ru.kirillius.XCP.Commons; import java.util.stream.Stream; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Data/DataTransferProtocol.java b/api/src/main/java/ru/kirillius/XCP/Data/DataTransferProtocol.java similarity index 65% rename from api/src/main/java/ru/kirillius/XCP/api/Data/DataTransferProtocol.java rename to api/src/main/java/ru/kirillius/XCP/Data/DataTransferProtocol.java index 05a8817..06d2728 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Data/DataTransferProtocol.java +++ b/api/src/main/java/ru/kirillius/XCP/Data/DataTransferProtocol.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Data; +package ru.kirillius.XCP.Data; @Deprecated public interface DataTransferProtocol { diff --git a/api/src/main/java/ru/kirillius/XCP/api/Data/PollSettings.java b/api/src/main/java/ru/kirillius/XCP/Data/PollSettings.java similarity index 90% rename from api/src/main/java/ru/kirillius/XCP/api/Data/PollSettings.java rename to api/src/main/java/ru/kirillius/XCP/Data/PollSettings.java index a9beb62..ac4bf14 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Data/PollSettings.java +++ b/api/src/main/java/ru/kirillius/XCP/Data/PollSettings.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Data; +package ru.kirillius.XCP.Data; public interface PollSettings { int getMaxValueCount(); diff --git a/api/src/main/java/ru/kirillius/XCP/api/Data/ValueModifier.java b/api/src/main/java/ru/kirillius/XCP/Data/ValueModifier.java similarity index 62% rename from api/src/main/java/ru/kirillius/XCP/api/Data/ValueModifier.java rename to api/src/main/java/ru/kirillius/XCP/Data/ValueModifier.java index fd578ac..cd5eee0 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Data/ValueModifier.java +++ b/api/src/main/java/ru/kirillius/XCP/Data/ValueModifier.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Data; +package ru.kirillius.XCP.Data; @Deprecated public interface ValueModifier { diff --git a/api/src/main/java/ru/kirillius/XCP/api/Data/ValueModifierSettings.java b/api/src/main/java/ru/kirillius/XCP/Data/ValueModifierSettings.java similarity index 89% rename from api/src/main/java/ru/kirillius/XCP/api/Data/ValueModifierSettings.java rename to api/src/main/java/ru/kirillius/XCP/Data/ValueModifierSettings.java index 533d548..656b652 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Data/ValueModifierSettings.java +++ b/api/src/main/java/ru/kirillius/XCP/Data/ValueModifierSettings.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Data; +package ru.kirillius.XCP.Data; import tools.jackson.databind.node.ObjectNode; diff --git a/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Group.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Group.java new file mode 100644 index 0000000..4da26e1 --- /dev/null +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Group.java @@ -0,0 +1,8 @@ +package ru.kirillius.XCP.Persistence.Entities; + +import ru.kirillius.XCP.Persistence.NodeEntity; + +public interface Group extends NodeEntity { + String getIcon(); + void setIcon(String icon); +} diff --git a/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Input.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Input.java new file mode 100644 index 0000000..923cee2 --- /dev/null +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Input.java @@ -0,0 +1,13 @@ +package ru.kirillius.XCP.Persistence.Entities; + +import ru.kirillius.XCP.Data.PollSettings; +import ru.kirillius.XCP.Persistence.IOEntity; +import ru.kirillius.XCP.Persistence.NodeEntity; + +public interface Input extends IOEntity, NodeEntity { + + PollSettings getPollSettings(); + + void setPollSettings(PollSettings pollSettings); + +} diff --git a/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Output.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Output.java new file mode 100644 index 0000000..eed3111 --- /dev/null +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/Output.java @@ -0,0 +1,7 @@ +package ru.kirillius.XCP.Persistence.Entities; + +import ru.kirillius.XCP.Persistence.IOEntity; +import ru.kirillius.XCP.Persistence.NodeEntity; + +public interface Output extends IOEntity, NodeEntity { +} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/User.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/User.java similarity index 59% rename from api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/User.java rename to api/src/main/java/ru/kirillius/XCP/Persistence/Entities/User.java index 87de17f..8f60b7b 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/User.java +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Entities/User.java @@ -1,11 +1,13 @@ -package ru.kirillius.XCP.api.Persistence.Entities; +package ru.kirillius.XCP.Persistence.Entities; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; -import ru.kirillius.XCP.api.Security.UserRole; +import ru.kirillius.XCP.Persistence.PersistenceEntity; +import ru.kirillius.XCP.Security.UserRole; import tools.jackson.databind.node.ObjectNode; public interface User extends PersistenceEntity { - void changePassword(String newPass); + void setPassword(String password); + + boolean verifyPassword(String password); String getLogin(); diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/IOEntity.java b/api/src/main/java/ru/kirillius/XCP/Persistence/IOEntity.java similarity index 67% rename from api/src/main/java/ru/kirillius/XCP/api/Persistence/IOEntity.java rename to api/src/main/java/ru/kirillius/XCP/Persistence/IOEntity.java index 65123a2..f2acec2 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/IOEntity.java +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/IOEntity.java @@ -1,7 +1,7 @@ -package ru.kirillius.XCP.api.Persistence; +package ru.kirillius.XCP.Persistence; -import ru.kirillius.XCP.api.Data.DataTransferProtocol; -import ru.kirillius.XCP.api.Data.ValueModifierSettings; +import ru.kirillius.XCP.Data.DataTransferProtocol; +import ru.kirillius.XCP.Data.ValueModifierSettings; import java.util.List; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/NodeEntity.java b/api/src/main/java/ru/kirillius/XCP/Persistence/NodeEntity.java similarity index 84% rename from api/src/main/java/ru/kirillius/XCP/api/Persistence/NodeEntity.java rename to api/src/main/java/ru/kirillius/XCP/Persistence/NodeEntity.java index f1402ca..150202b 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/NodeEntity.java +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/NodeEntity.java @@ -1,6 +1,6 @@ -package ru.kirillius.XCP.api.Persistence; +package ru.kirillius.XCP.Persistence; -import ru.kirillius.XCP.api.Persistence.Entities.Group; +import ru.kirillius.XCP.Persistence.Entities.Group; import tools.jackson.databind.node.ObjectNode; import java.util.Set; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/NodeRepository.java b/api/src/main/java/ru/kirillius/XCP/Persistence/NodeRepository.java similarity index 69% rename from api/src/main/java/ru/kirillius/XCP/api/Persistence/NodeRepository.java rename to api/src/main/java/ru/kirillius/XCP/Persistence/NodeRepository.java index 30737e1..a9bd1ba 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/NodeRepository.java +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/NodeRepository.java @@ -1,7 +1,7 @@ -package ru.kirillius.XCP.api.Persistence; +package ru.kirillius.XCP.Persistence; -import ru.kirillius.XCP.api.Commons.StreamHandler; -import ru.kirillius.XCP.api.Persistence.Entities.Group; +import ru.kirillius.XCP.Commons.StreamHandler; +import ru.kirillius.XCP.Persistence.Entities.Group; import java.util.Collection; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/PersistenceEntity.java b/api/src/main/java/ru/kirillius/XCP/Persistence/PersistenceEntity.java similarity index 79% rename from api/src/main/java/ru/kirillius/XCP/api/Persistence/PersistenceEntity.java rename to api/src/main/java/ru/kirillius/XCP/Persistence/PersistenceEntity.java index 0d52384..fbedbd2 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/PersistenceEntity.java +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/PersistenceEntity.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Persistence; +package ru.kirillius.XCP.Persistence; import java.util.UUID; diff --git a/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/GroupRepository.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/GroupRepository.java new file mode 100644 index 0000000..7bc598f --- /dev/null +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/GroupRepository.java @@ -0,0 +1,14 @@ +package ru.kirillius.XCP.Persistence.Repositories; + +import ru.kirillius.XCP.Commons.StreamHandler; +import ru.kirillius.XCP.Persistence.Entities.Group; +import ru.kirillius.XCP.Persistence.Entities.Input; +import ru.kirillius.XCP.Persistence.NodeRepository; + +public interface GroupRepository extends NodeRepository { + StreamHandler getChildrenOf(Group dataGroup); + + StreamHandler getChildrenRecursiveOf(Group dataGroup); + + Group getRoot(); +} diff --git a/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/InputRepository.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/InputRepository.java new file mode 100644 index 0000000..edc61da --- /dev/null +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/InputRepository.java @@ -0,0 +1,8 @@ +package ru.kirillius.XCP.Persistence.Repositories; + +import ru.kirillius.XCP.Persistence.Entities.Input; +import ru.kirillius.XCP.Persistence.NodeRepository; + +public interface InputRepository extends NodeRepository { + +} diff --git a/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/OutputRepository.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/OutputRepository.java new file mode 100644 index 0000000..9600da7 --- /dev/null +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/OutputRepository.java @@ -0,0 +1,8 @@ +package ru.kirillius.XCP.Persistence.Repositories; + +import ru.kirillius.XCP.Persistence.Entities.Input; +import ru.kirillius.XCP.Persistence.NodeRepository; + +public interface OutputRepository extends NodeRepository { + +} diff --git a/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/UserRepository.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/UserRepository.java new file mode 100644 index 0000000..f2dc2a8 --- /dev/null +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Repositories/UserRepository.java @@ -0,0 +1,9 @@ +package ru.kirillius.XCP.Persistence.Repositories; + +import ru.kirillius.XCP.Persistence.Entities.User; +import ru.kirillius.XCP.Persistence.Repository; + +public interface UserRepository extends Repository { + + User getByLogin(String login); +} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repository.java b/api/src/main/java/ru/kirillius/XCP/Persistence/Repository.java similarity index 91% rename from api/src/main/java/ru/kirillius/XCP/api/Persistence/Repository.java rename to api/src/main/java/ru/kirillius/XCP/Persistence/Repository.java index c45a68b..c95254b 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repository.java +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/Repository.java @@ -1,6 +1,6 @@ -package ru.kirillius.XCP.api.Persistence; +package ru.kirillius.XCP.Persistence; -import ru.kirillius.XCP.api.Commons.StreamHandler; +import ru.kirillius.XCP.Commons.StreamHandler; import ru.kirillius.java.utils.events.EventHandler; import tools.jackson.databind.node.ArrayNode; import tools.jackson.databind.node.ObjectNode; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/RepositoryService.java b/api/src/main/java/ru/kirillius/XCP/Persistence/RepositoryService.java similarity index 71% rename from api/src/main/java/ru/kirillius/XCP/api/Persistence/RepositoryService.java rename to api/src/main/java/ru/kirillius/XCP/Persistence/RepositoryService.java index 092add9..6f9d8c4 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/RepositoryService.java +++ b/api/src/main/java/ru/kirillius/XCP/Persistence/RepositoryService.java @@ -1,6 +1,6 @@ -package ru.kirillius.XCP.api.Persistence; +package ru.kirillius.XCP.Persistence; -import ru.kirillius.XCP.api.Commons.Service; +import ru.kirillius.XCP.Commons.Service; public interface RepositoryService extends Service { Repository getRepositoryForEntity(Class entityType); diff --git a/api/src/main/java/ru/kirillius/XCP/Security/HashUtility.java b/api/src/main/java/ru/kirillius/XCP/Security/HashUtility.java new file mode 100644 index 0000000..fcab557 --- /dev/null +++ b/api/src/main/java/ru/kirillius/XCP/Security/HashUtility.java @@ -0,0 +1,9 @@ +package ru.kirillius.XCP.Security; + +public interface HashUtility { + String hash(String password); + + default boolean validate(String password, String hash) { + return hash(password).equals(hash); + } +} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Security/UserRole.java b/api/src/main/java/ru/kirillius/XCP/Security/UserRole.java similarity index 84% rename from api/src/main/java/ru/kirillius/XCP/api/Security/UserRole.java rename to api/src/main/java/ru/kirillius/XCP/Security/UserRole.java index e8b2dfa..dcf774c 100644 --- a/api/src/main/java/ru/kirillius/XCP/api/Security/UserRole.java +++ b/api/src/main/java/ru/kirillius/XCP/Security/UserRole.java @@ -1,4 +1,4 @@ -package ru.kirillius.XCP.api.Security; +package ru.kirillius.XCP.Security; import lombok.Getter; diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Group.java b/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Group.java deleted file mode 100644 index 82a9f69..0000000 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Group.java +++ /dev/null @@ -1,8 +0,0 @@ -package ru.kirillius.XCP.api.Persistence.Entities; - -import ru.kirillius.XCP.api.Persistence.NodeEntity; - -public interface Group extends NodeEntity { - String getIcon(); - void setIcon(String icon); -} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Input.java b/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Input.java deleted file mode 100644 index 11a4430..0000000 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Input.java +++ /dev/null @@ -1,13 +0,0 @@ -package ru.kirillius.XCP.api.Persistence.Entities; - -import ru.kirillius.XCP.api.Data.PollSettings; -import ru.kirillius.XCP.api.Persistence.IOEntity; -import ru.kirillius.XCP.api.Persistence.NodeEntity; - -public interface Input extends IOEntity, NodeEntity { - - PollSettings getPollSettings(); - - void setPollSettings(PollSettings pollSettings); - -} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Output.java b/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Output.java deleted file mode 100644 index cc6ed5f..0000000 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Entities/Output.java +++ /dev/null @@ -1,7 +0,0 @@ -package ru.kirillius.XCP.api.Persistence.Entities; - -import ru.kirillius.XCP.api.Persistence.IOEntity; -import ru.kirillius.XCP.api.Persistence.NodeEntity; - -public interface Output extends IOEntity, NodeEntity { -} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/GroupRepository.java b/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/GroupRepository.java deleted file mode 100644 index e68def2..0000000 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/GroupRepository.java +++ /dev/null @@ -1,14 +0,0 @@ -package ru.kirillius.XCP.api.Persistence.Repositories; - -import ru.kirillius.XCP.api.Commons.StreamHandler; -import ru.kirillius.XCP.api.Persistence.Entities.Group; -import ru.kirillius.XCP.api.Persistence.Entities.Input; -import ru.kirillius.XCP.api.Persistence.NodeRepository; - -public interface GroupRepository extends NodeRepository { - StreamHandler getChildrenOf(Group dataGroup); - - StreamHandler getChildrenRecursiveOf(Group dataGroup); - - Group getRoot(); -} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/InputRepository.java b/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/InputRepository.java deleted file mode 100644 index 2fc0d6e..0000000 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/InputRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package ru.kirillius.XCP.api.Persistence.Repositories; - -import ru.kirillius.XCP.api.Persistence.Entities.Input; -import ru.kirillius.XCP.api.Persistence.NodeRepository; - -public interface InputRepository extends NodeRepository { - -} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/OutputRepository.java b/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/OutputRepository.java deleted file mode 100644 index ed541e3..0000000 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/OutputRepository.java +++ /dev/null @@ -1,8 +0,0 @@ -package ru.kirillius.XCP.api.Persistence.Repositories; - -import ru.kirillius.XCP.api.Persistence.Entities.Input; -import ru.kirillius.XCP.api.Persistence.NodeRepository; - -public interface OutputRepository extends NodeRepository { - -} diff --git a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/UserRepository.java b/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/UserRepository.java deleted file mode 100644 index dede83b..0000000 --- a/api/src/main/java/ru/kirillius/XCP/api/Persistence/Repositories/UserRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package ru.kirillius.XCP.api.Persistence.Repositories; - -import ru.kirillius.XCP.api.Persistence.Entities.User; -import ru.kirillius.XCP.api.Persistence.Repository; - -public interface UserRepository extends Repository { - User getByLoginAndPassword(String login, String password); - - User getByLogin(String login); -} diff --git a/core/pom.xml b/core/pom.xml new file mode 100644 index 0000000..b863ea7 --- /dev/null +++ b/core/pom.xml @@ -0,0 +1,28 @@ + + + 4.0.0 + + ru.kirillius + XCP + 1.0.0.0 + + + core + + + 21 + 21 + UTF-8 + + + + ru.kirillius + api + 1.0.0.0 + compile + + + + \ No newline at end of file diff --git a/core/src/main/java/ru/kirillius/XCP/Security/Argon2HashUtility.java b/core/src/main/java/ru/kirillius/XCP/Security/Argon2HashUtility.java new file mode 100644 index 0000000..5943c4b --- /dev/null +++ b/core/src/main/java/ru/kirillius/XCP/Security/Argon2HashUtility.java @@ -0,0 +1,35 @@ +package ru.kirillius.XCP.Security; + +import de.mkammerer.argon2.Argon2; +import de.mkammerer.argon2.Argon2Factory; +import lombok.Getter; + +public class Argon2HashUtility implements HashUtility { + + @Getter + private final static HashUtility instance = new Argon2HashUtility(); + + private final Argon2 argon2; + + public Argon2HashUtility() { + this.argon2 = Argon2Factory.create( + Argon2Factory.Argon2Types.ARGON2id, + 16, + 32 + ); + } + + @Override + public String hash(String password) { + try { + return argon2.hash(3, 65536, 1, password.toCharArray()); + } finally { + argon2.wipeArray(password.toCharArray()); + } + } + + @Override + public boolean validate(String password, String hash) { + return argon2.verify(hash, password.toCharArray()); + } +} diff --git a/database/pom.xml b/database/pom.xml index e33ac8a..3ca3f76 100644 --- a/database/pom.xml +++ b/database/pom.xml @@ -41,6 +41,12 @@ 1.0.0.0 compile + + ru.kirillius + core + 1.0.0.0 + compile + \ No newline at end of file diff --git a/database/src/main/java/ru/kirillius/XCP/Persistence/AbstractRepository.java b/database/src/main/java/ru/kirillius/XCP/Persistence/AbstractRepository.java index 2794abb..60d7af5 100644 --- a/database/src/main/java/ru/kirillius/XCP/Persistence/AbstractRepository.java +++ b/database/src/main/java/ru/kirillius/XCP/Persistence/AbstractRepository.java @@ -5,9 +5,7 @@ import lombok.Getter; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.query.Query; -import ru.kirillius.XCP.api.Commons.StreamHandler; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; -import ru.kirillius.XCP.api.Persistence.Repository; +import ru.kirillius.XCP.Commons.StreamHandler; import ru.kirillius.java.utils.events.ConcurrentEventHandler; import ru.kirillius.java.utils.events.EventHandler; import tools.jackson.databind.node.ArrayNode; diff --git a/database/src/main/java/ru/kirillius/XCP/Persistence/EntityImplementation.java b/database/src/main/java/ru/kirillius/XCP/Persistence/EntityImplementation.java index 1190195..28a9d15 100644 --- a/database/src/main/java/ru/kirillius/XCP/Persistence/EntityImplementation.java +++ b/database/src/main/java/ru/kirillius/XCP/Persistence/EntityImplementation.java @@ -1,7 +1,5 @@ package ru.kirillius.XCP.Persistence; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; - import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; diff --git a/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceDeserializer.java b/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceDeserializer.java index 938164c..852b877 100644 --- a/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceDeserializer.java +++ b/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceDeserializer.java @@ -1,6 +1,5 @@ package ru.kirillius.XCP.Persistence; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; import tools.jackson.core.JacksonException; import tools.jackson.core.JsonParser; import tools.jackson.databind.DeserializationContext; diff --git a/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceSerializer.java b/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceSerializer.java index 916ea3f..cbd6356 100644 --- a/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceSerializer.java +++ b/database/src/main/java/ru/kirillius/XCP/Persistence/EntityReferenceSerializer.java @@ -1,6 +1,5 @@ package ru.kirillius.XCP.Persistence; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; import tools.jackson.core.JacksonException; import tools.jackson.core.JsonGenerator; import tools.jackson.databind.SerializationContext; diff --git a/database/src/main/java/ru/kirillius/XCP/Persistence/PersistenceSerializationModule.java b/database/src/main/java/ru/kirillius/XCP/Persistence/PersistenceSerializationModule.java index e6b13e6..5c7484d 100644 --- a/database/src/main/java/ru/kirillius/XCP/Persistence/PersistenceSerializationModule.java +++ b/database/src/main/java/ru/kirillius/XCP/Persistence/PersistenceSerializationModule.java @@ -1,7 +1,6 @@ package ru.kirillius.XCP.Persistence; import lombok.Getter; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; import tools.jackson.core.Version; import tools.jackson.databind.JacksonModule; import tools.jackson.databind.module.SimpleDeserializers; diff --git a/database/src/main/java/ru/kirillius/XCP/Persistence/Services/UserRepositoryImpl.java b/database/src/main/java/ru/kirillius/XCP/Persistence/Repositories/UserRepositoryImpl.java similarity index 51% rename from database/src/main/java/ru/kirillius/XCP/Persistence/Services/UserRepositoryImpl.java rename to database/src/main/java/ru/kirillius/XCP/Persistence/Repositories/UserRepositoryImpl.java index d55a5ab..dbce144 100644 --- a/database/src/main/java/ru/kirillius/XCP/Persistence/Services/UserRepositoryImpl.java +++ b/database/src/main/java/ru/kirillius/XCP/Persistence/Repositories/UserRepositoryImpl.java @@ -1,24 +1,17 @@ -package ru.kirillius.XCP.Persistence.Services; +package ru.kirillius.XCP.Persistence.Repositories; import com.fasterxml.jackson.annotation.JsonProperty; import jakarta.persistence.*; import lombok.*; import org.hibernate.annotations.UuidGenerator; -import ru.kirillius.XCP.Persistence.AbstractRepository; -import ru.kirillius.XCP.Persistence.EntityImplementation; -import ru.kirillius.XCP.Persistence.RepositoryServiceImpl; +import ru.kirillius.XCP.Persistence.*; +import ru.kirillius.XCP.Persistence.Entities.User; +import ru.kirillius.XCP.Security.Argon2HashUtility; +import ru.kirillius.XCP.Security.UserRole; import ru.kirillius.XCP.Serialization.SerializationUtils; -import ru.kirillius.XCP.api.Persistence.Entities.User; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; -import ru.kirillius.XCP.api.Persistence.Repositories.UserRepository; -import ru.kirillius.XCP.api.Persistence.Repository; -import ru.kirillius.XCP.api.Security.UserRole; import tools.jackson.databind.node.ObjectNode; import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.UUID; @EntityImplementation(UserRepositoryImpl.UserEntity.class) @@ -33,18 +26,6 @@ public class UserRepositoryImpl extends AbstractRepository implements User return UserRepository.class; } - @Override - public User getByLoginAndPassword(String login, String password) { - var user = (UserEntity) getByLogin(login); - if (user == null) { - return null; - } - if (user.getPasswordHash().equals(UserEntity.hash(password, user.getPasswordHashSalt()))) { - return user; - } - return null; - } - @Override public User getByLogin(String login) { try (var request = buildQueryParametrized("WHERE login = ?1", login)) { @@ -55,7 +36,7 @@ public class UserRepositoryImpl extends AbstractRepository implements User } @Entity - @Table(name = "UserEntity") + @Table(name = "Users") @Builder @AllArgsConstructor @NoArgsConstructor @@ -84,10 +65,6 @@ public class UserRepositoryImpl extends AbstractRepository implements User @JsonProperty private String passwordHash; - @Column(nullable = false) - @JsonProperty - private String passwordHashSalt; - @Column(nullable = false) @JsonProperty @Enumerated(EnumType.STRING) @@ -99,32 +76,19 @@ public class UserRepositoryImpl extends AbstractRepository implements User @JsonProperty private ObjectNode values = SerializationUtils.EmptyObject(); - public static String hash(String data, String salt) { - String generatedPassword; - MessageDigest md; - try { - md = MessageDigest.getInstance("SHA-512"); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); - } - md.update(salt.getBytes(StandardCharsets.UTF_8)); - var bytes = md.digest(data.getBytes(StandardCharsets.UTF_8)); - var sb = new StringBuilder(); - for (byte aByte : bytes) { - sb.append(Integer.toString((aByte & 0xff) + 0x100, 16).substring(1)); - } - generatedPassword = sb.toString(); - return generatedPassword; - } - - public void changePassword(String newPass) { - passwordHashSalt = java.util.UUID.randomUUID().toString(); - passwordHash = hash(newPass, passwordHashSalt); - } - @Override public Class getBaseType() { return User.class; } + + @Override + public void setPassword(String password) { + passwordHash = Argon2HashUtility.getInstance().hash(password); + } + + @Override + public boolean verifyPassword(String password) { + return Argon2HashUtility.getInstance().validate(password, passwordHash); + } } } diff --git a/database/src/main/java/ru/kirillius/XCP/Persistence/RepositoryServiceImpl.java b/database/src/main/java/ru/kirillius/XCP/Persistence/RepositoryServiceImpl.java index 5cfcf27..fc174b6 100644 --- a/database/src/main/java/ru/kirillius/XCP/Persistence/RepositoryServiceImpl.java +++ b/database/src/main/java/ru/kirillius/XCP/Persistence/RepositoryServiceImpl.java @@ -4,10 +4,7 @@ import lombok.Getter; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; -import ru.kirillius.XCP.api.Commons.Context; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; -import ru.kirillius.XCP.api.Persistence.Repository; -import ru.kirillius.XCP.api.Persistence.RepositoryService; +import ru.kirillius.XCP.Commons.Context; import tools.jackson.databind.ObjectMapper; import tools.jackson.databind.json.JsonMapper; @@ -24,8 +21,8 @@ public final class RepositoryServiceImpl implements RepositoryService { private DatabaseConfiguration databaseConfiguration; private final Map>, Repository> repositoryBindings = new ConcurrentHashMap<>(); private final Map, Class>> entityBindings = new ConcurrentHashMap<>(); - private final Collection>> managedRepositoryClasses; + private Context context; public RepositoryServiceImpl(DatabaseConfiguration databaseConfiguration, Collection>> repositoryImplClasses) { managedRepositoryClasses = repositoryImplClasses; @@ -88,6 +85,7 @@ public final class RepositoryServiceImpl implements RepositoryService { throw new IllegalStateException("Initialized already"); } initialized = true; + this.context = context; if (databaseConfiguration == null) { loadDatabaseConfig(new H2DatabaseInFileConfiguration(context.getConfig().getDatabaseFile())); } diff --git a/database/src/test/java/TestContext.java b/database/src/test/java/TestContext.java index 4cf31c5..df6f6e1 100644 --- a/database/src/test/java/TestContext.java +++ b/database/src/test/java/TestContext.java @@ -1,7 +1,7 @@ -import ru.kirillius.XCP.api.Commons.Config; -import ru.kirillius.XCP.api.Commons.ConfigManager; -import ru.kirillius.XCP.api.Commons.Context; -import ru.kirillius.XCP.api.Commons.Service; +import ru.kirillius.XCP.Commons.Config; +import ru.kirillius.XCP.Commons.ConfigManager; +import ru.kirillius.XCP.Commons.Context; +import ru.kirillius.XCP.Commons.Service; public class TestContext implements Context { @Override diff --git a/database/src/test/java/ru/kirillius/XCP/Persistence/RepositoryServiceImplTest.java b/database/src/test/java/ru/kirillius/XCP/Persistence/RepositoryServiceImplTest.java index 0249671..37c308e 100644 --- a/database/src/test/java/ru/kirillius/XCP/Persistence/RepositoryServiceImplTest.java +++ b/database/src/test/java/ru/kirillius/XCP/Persistence/RepositoryServiceImplTest.java @@ -6,9 +6,7 @@ import lombok.Getter; import lombok.Setter; import org.hibernate.annotations.UuidGenerator; import org.junit.jupiter.api.Test; -import ru.kirillius.XCP.api.Commons.Context; -import ru.kirillius.XCP.api.Persistence.PersistenceEntity; -import ru.kirillius.XCP.api.Persistence.Repository; +import ru.kirillius.XCP.Commons.Context; import java.io.IOException; import java.util.*; diff --git a/pom.xml b/pom.xml index e256c5c..2b447f6 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,7 @@ api database + core @@ -79,6 +80,13 @@ test + + + de.mkammerer + argon2-jvm + 2.12 + + org.assertj