Переименовал package, порефакторил юзеров
This commit is contained in:
parent
e29286cce3
commit
8e2412f36a
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Commons;
|
package ru.kirillius.XCP.Commons;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Commons;
|
package ru.kirillius.XCP.Commons;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
package ru.kirillius.XCP.api.Commons;
|
package ru.kirillius.XCP.Commons;
|
||||||
|
|
||||||
|
import ru.kirillius.XCP.Security.HashUtility;
|
||||||
|
|
||||||
public interface Context {
|
public interface Context {
|
||||||
Config getConfig();
|
Config getConfig();
|
||||||
|
|
@ -8,4 +10,6 @@ public interface Context {
|
||||||
<S extends Service> S getService(Class<S> serviceClass);
|
<S extends Service> S getService(Class<S> serviceClass);
|
||||||
|
|
||||||
void shutdown();
|
void shutdown();
|
||||||
|
|
||||||
|
HashUtility getHashUtility();
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Commons;
|
package ru.kirillius.XCP.Commons;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Commons;
|
package ru.kirillius.XCP.Commons;
|
||||||
|
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Commons;
|
package ru.kirillius.XCP.Commons;
|
||||||
|
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Data;
|
package ru.kirillius.XCP.Data;
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public interface DataTransferProtocol {
|
public interface DataTransferProtocol {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Data;
|
package ru.kirillius.XCP.Data;
|
||||||
|
|
||||||
public interface PollSettings {
|
public interface PollSettings {
|
||||||
int getMaxValueCount();
|
int getMaxValueCount();
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Data;
|
package ru.kirillius.XCP.Data;
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
public interface ValueModifier {
|
public interface ValueModifier {
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Data;
|
package ru.kirillius.XCP.Data;
|
||||||
|
|
||||||
import tools.jackson.databind.node.ObjectNode;
|
import tools.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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 {
|
||||||
|
}
|
||||||
|
|
@ -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.Persistence.PersistenceEntity;
|
||||||
import ru.kirillius.XCP.api.Security.UserRole;
|
import ru.kirillius.XCP.Security.UserRole;
|
||||||
import tools.jackson.databind.node.ObjectNode;
|
import tools.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
public interface User extends PersistenceEntity {
|
public interface User extends PersistenceEntity {
|
||||||
void changePassword(String newPass);
|
void setPassword(String password);
|
||||||
|
|
||||||
|
boolean verifyPassword(String password);
|
||||||
|
|
||||||
String getLogin();
|
String getLogin();
|
||||||
|
|
||||||
|
|
@ -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.Data.DataTransferProtocol;
|
||||||
import ru.kirillius.XCP.api.Data.ValueModifierSettings;
|
import ru.kirillius.XCP.Data.ValueModifierSettings;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
@ -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 tools.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
@ -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.Commons.StreamHandler;
|
||||||
import ru.kirillius.XCP.api.Persistence.Entities.Group;
|
import ru.kirillius.XCP.Persistence.Entities.Group;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Persistence;
|
package ru.kirillius.XCP.Persistence;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
|
@ -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<Input> {
|
||||||
|
StreamHandler<Group> getChildrenOf(Group dataGroup);
|
||||||
|
|
||||||
|
StreamHandler<Group> getChildrenRecursiveOf(Group dataGroup);
|
||||||
|
|
||||||
|
Group getRoot();
|
||||||
|
}
|
||||||
|
|
@ -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<Input> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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<Input> {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -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> {
|
||||||
|
|
||||||
|
User getByLogin(String login);
|
||||||
|
}
|
||||||
|
|
@ -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 ru.kirillius.java.utils.events.EventHandler;
|
||||||
import tools.jackson.databind.node.ArrayNode;
|
import tools.jackson.databind.node.ArrayNode;
|
||||||
import tools.jackson.databind.node.ObjectNode;
|
import tools.jackson.databind.node.ObjectNode;
|
||||||
|
|
@ -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 {
|
public interface RepositoryService extends Service {
|
||||||
<E extends PersistenceEntity> Repository<E> getRepositoryForEntity(Class<E> entityType);
|
<E extends PersistenceEntity> Repository<E> getRepositoryForEntity(Class<E> entityType);
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package ru.kirillius.XCP.api.Security;
|
package ru.kirillius.XCP.Security;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
|
|
@ -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);
|
|
||||||
}
|
|
||||||
|
|
@ -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);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -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 {
|
|
||||||
}
|
|
||||||
|
|
@ -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<Input> {
|
|
||||||
StreamHandler<Group> getChildrenOf(Group dataGroup);
|
|
||||||
|
|
||||||
StreamHandler<Group> getChildrenRecursiveOf(Group dataGroup);
|
|
||||||
|
|
||||||
Group getRoot();
|
|
||||||
}
|
|
||||||
|
|
@ -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<Input> {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -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<Input> {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
@ -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> {
|
|
||||||
User getByLoginAndPassword(String login, String password);
|
|
||||||
|
|
||||||
User getByLogin(String login);
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<parent>
|
||||||
|
<groupId>ru.kirillius</groupId>
|
||||||
|
<artifactId>XCP</artifactId>
|
||||||
|
<version>1.0.0.0</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<artifactId>core</artifactId>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>21</maven.compiler.source>
|
||||||
|
<maven.compiler.target>21</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ru.kirillius</groupId>
|
||||||
|
<artifactId>api</artifactId>
|
||||||
|
<version>1.0.0.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -41,6 +41,12 @@
|
||||||
<version>1.0.0.0</version>
|
<version>1.0.0.0</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>ru.kirillius</groupId>
|
||||||
|
<artifactId>core</artifactId>
|
||||||
|
<version>1.0.0.0</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
|
@ -5,9 +5,7 @@ import lombok.Getter;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.Transaction;
|
import org.hibernate.Transaction;
|
||||||
import org.hibernate.query.Query;
|
import org.hibernate.query.Query;
|
||||||
import ru.kirillius.XCP.api.Commons.StreamHandler;
|
import ru.kirillius.XCP.Commons.StreamHandler;
|
||||||
import ru.kirillius.XCP.api.Persistence.PersistenceEntity;
|
|
||||||
import ru.kirillius.XCP.api.Persistence.Repository;
|
|
||||||
import ru.kirillius.java.utils.events.ConcurrentEventHandler;
|
import ru.kirillius.java.utils.events.ConcurrentEventHandler;
|
||||||
import ru.kirillius.java.utils.events.EventHandler;
|
import ru.kirillius.java.utils.events.EventHandler;
|
||||||
import tools.jackson.databind.node.ArrayNode;
|
import tools.jackson.databind.node.ArrayNode;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
package ru.kirillius.XCP.Persistence;
|
package ru.kirillius.XCP.Persistence;
|
||||||
|
|
||||||
import ru.kirillius.XCP.api.Persistence.PersistenceEntity;
|
|
||||||
|
|
||||||
import java.lang.annotation.ElementType;
|
import java.lang.annotation.ElementType;
|
||||||
import java.lang.annotation.Retention;
|
import java.lang.annotation.Retention;
|
||||||
import java.lang.annotation.RetentionPolicy;
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package ru.kirillius.XCP.Persistence;
|
package ru.kirillius.XCP.Persistence;
|
||||||
|
|
||||||
import ru.kirillius.XCP.api.Persistence.PersistenceEntity;
|
|
||||||
import tools.jackson.core.JacksonException;
|
import tools.jackson.core.JacksonException;
|
||||||
import tools.jackson.core.JsonParser;
|
import tools.jackson.core.JsonParser;
|
||||||
import tools.jackson.databind.DeserializationContext;
|
import tools.jackson.databind.DeserializationContext;
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,5 @@
|
||||||
package ru.kirillius.XCP.Persistence;
|
package ru.kirillius.XCP.Persistence;
|
||||||
|
|
||||||
import ru.kirillius.XCP.api.Persistence.PersistenceEntity;
|
|
||||||
import tools.jackson.core.JacksonException;
|
import tools.jackson.core.JacksonException;
|
||||||
import tools.jackson.core.JsonGenerator;
|
import tools.jackson.core.JsonGenerator;
|
||||||
import tools.jackson.databind.SerializationContext;
|
import tools.jackson.databind.SerializationContext;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package ru.kirillius.XCP.Persistence;
|
package ru.kirillius.XCP.Persistence;
|
||||||
|
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import ru.kirillius.XCP.api.Persistence.PersistenceEntity;
|
|
||||||
import tools.jackson.core.Version;
|
import tools.jackson.core.Version;
|
||||||
import tools.jackson.databind.JacksonModule;
|
import tools.jackson.databind.JacksonModule;
|
||||||
import tools.jackson.databind.module.SimpleDeserializers;
|
import tools.jackson.databind.module.SimpleDeserializers;
|
||||||
|
|
|
||||||
|
|
@ -1,24 +1,17 @@
|
||||||
package ru.kirillius.XCP.Persistence.Services;
|
package ru.kirillius.XCP.Persistence.Repositories;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
import jakarta.persistence.*;
|
import jakarta.persistence.*;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import org.hibernate.annotations.UuidGenerator;
|
import org.hibernate.annotations.UuidGenerator;
|
||||||
import ru.kirillius.XCP.Persistence.AbstractRepository;
|
import ru.kirillius.XCP.Persistence.*;
|
||||||
import ru.kirillius.XCP.Persistence.EntityImplementation;
|
import ru.kirillius.XCP.Persistence.Entities.User;
|
||||||
import ru.kirillius.XCP.Persistence.RepositoryServiceImpl;
|
import ru.kirillius.XCP.Security.Argon2HashUtility;
|
||||||
|
import ru.kirillius.XCP.Security.UserRole;
|
||||||
import ru.kirillius.XCP.Serialization.SerializationUtils;
|
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 tools.jackson.databind.node.ObjectNode;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.charset.StandardCharsets;
|
|
||||||
import java.security.MessageDigest;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@EntityImplementation(UserRepositoryImpl.UserEntity.class)
|
@EntityImplementation(UserRepositoryImpl.UserEntity.class)
|
||||||
|
|
@ -33,18 +26,6 @@ public class UserRepositoryImpl extends AbstractRepository<User> implements User
|
||||||
return UserRepository.class;
|
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
|
@Override
|
||||||
public User getByLogin(String login) {
|
public User getByLogin(String login) {
|
||||||
try (var request = buildQueryParametrized("WHERE login = ?1", login)) {
|
try (var request = buildQueryParametrized("WHERE login = ?1", login)) {
|
||||||
|
|
@ -55,7 +36,7 @@ public class UserRepositoryImpl extends AbstractRepository<User> implements User
|
||||||
}
|
}
|
||||||
|
|
||||||
@Entity
|
@Entity
|
||||||
@Table(name = "UserEntity")
|
@Table(name = "Users")
|
||||||
@Builder
|
@Builder
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
|
|
@ -84,10 +65,6 @@ public class UserRepositoryImpl extends AbstractRepository<User> implements User
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private String passwordHash;
|
private String passwordHash;
|
||||||
|
|
||||||
@Column(nullable = false)
|
|
||||||
@JsonProperty
|
|
||||||
private String passwordHashSalt;
|
|
||||||
|
|
||||||
@Column(nullable = false)
|
@Column(nullable = false)
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
@Enumerated(EnumType.STRING)
|
@Enumerated(EnumType.STRING)
|
||||||
|
|
@ -99,32 +76,19 @@ public class UserRepositoryImpl extends AbstractRepository<User> implements User
|
||||||
@JsonProperty
|
@JsonProperty
|
||||||
private ObjectNode values = SerializationUtils.EmptyObject();
|
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
|
@Override
|
||||||
public Class<? extends PersistenceEntity> getBaseType() {
|
public Class<? extends PersistenceEntity> getBaseType() {
|
||||||
return User.class;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -4,10 +4,7 @@ import lombok.Getter;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.SessionFactory;
|
import org.hibernate.SessionFactory;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
import ru.kirillius.XCP.api.Commons.Context;
|
import ru.kirillius.XCP.Commons.Context;
|
||||||
import ru.kirillius.XCP.api.Persistence.PersistenceEntity;
|
|
||||||
import ru.kirillius.XCP.api.Persistence.Repository;
|
|
||||||
import ru.kirillius.XCP.api.Persistence.RepositoryService;
|
|
||||||
import tools.jackson.databind.ObjectMapper;
|
import tools.jackson.databind.ObjectMapper;
|
||||||
import tools.jackson.databind.json.JsonMapper;
|
import tools.jackson.databind.json.JsonMapper;
|
||||||
|
|
||||||
|
|
@ -24,8 +21,8 @@ public final class RepositoryServiceImpl implements RepositoryService {
|
||||||
private DatabaseConfiguration databaseConfiguration;
|
private DatabaseConfiguration databaseConfiguration;
|
||||||
private final Map<Class<? extends Repository<?>>, Repository<?>> repositoryBindings = new ConcurrentHashMap<>();
|
private final Map<Class<? extends Repository<?>>, Repository<?>> repositoryBindings = new ConcurrentHashMap<>();
|
||||||
private final Map<Class<? extends PersistenceEntity>, Class<? extends Repository<?>>> entityBindings = new ConcurrentHashMap<>();
|
private final Map<Class<? extends PersistenceEntity>, Class<? extends Repository<?>>> entityBindings = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
private final Collection<Class<? extends AbstractRepository<?>>> managedRepositoryClasses;
|
private final Collection<Class<? extends AbstractRepository<?>>> managedRepositoryClasses;
|
||||||
|
private Context context;
|
||||||
|
|
||||||
public RepositoryServiceImpl(DatabaseConfiguration databaseConfiguration, Collection<Class<? extends AbstractRepository<?>>> repositoryImplClasses) {
|
public RepositoryServiceImpl(DatabaseConfiguration databaseConfiguration, Collection<Class<? extends AbstractRepository<?>>> repositoryImplClasses) {
|
||||||
managedRepositoryClasses = repositoryImplClasses;
|
managedRepositoryClasses = repositoryImplClasses;
|
||||||
|
|
@ -88,6 +85,7 @@ public final class RepositoryServiceImpl implements RepositoryService {
|
||||||
throw new IllegalStateException("Initialized already");
|
throw new IllegalStateException("Initialized already");
|
||||||
}
|
}
|
||||||
initialized = true;
|
initialized = true;
|
||||||
|
this.context = context;
|
||||||
if (databaseConfiguration == null) {
|
if (databaseConfiguration == null) {
|
||||||
loadDatabaseConfig(new H2DatabaseInFileConfiguration(context.getConfig().getDatabaseFile()));
|
loadDatabaseConfig(new H2DatabaseInFileConfiguration(context.getConfig().getDatabaseFile()));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import ru.kirillius.XCP.api.Commons.Config;
|
import ru.kirillius.XCP.Commons.Config;
|
||||||
import ru.kirillius.XCP.api.Commons.ConfigManager;
|
import ru.kirillius.XCP.Commons.ConfigManager;
|
||||||
import ru.kirillius.XCP.api.Commons.Context;
|
import ru.kirillius.XCP.Commons.Context;
|
||||||
import ru.kirillius.XCP.api.Commons.Service;
|
import ru.kirillius.XCP.Commons.Service;
|
||||||
|
|
||||||
public class TestContext implements Context {
|
public class TestContext implements Context {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,7 @@ import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
import org.hibernate.annotations.UuidGenerator;
|
import org.hibernate.annotations.UuidGenerator;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import ru.kirillius.XCP.api.Commons.Context;
|
import ru.kirillius.XCP.Commons.Context;
|
||||||
import ru.kirillius.XCP.api.Persistence.PersistenceEntity;
|
|
||||||
import ru.kirillius.XCP.api.Persistence.Repository;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
|
||||||
8
pom.xml
8
pom.xml
|
|
@ -11,6 +11,7 @@
|
||||||
<modules>
|
<modules>
|
||||||
<module>api</module>
|
<module>api</module>
|
||||||
<module>database</module>
|
<module>database</module>
|
||||||
|
<module>core</module>
|
||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
@ -79,6 +80,13 @@
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- https://mvnrepository.com/artifact/de.mkammerer/argon2-jvm -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>de.mkammerer</groupId>
|
||||||
|
<artifactId>argon2-jvm</artifactId>
|
||||||
|
<version>2.12</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
|
<!-- https://mvnrepository.com/artifact/org.assertj/assertj-core -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.assertj</groupId>
|
<groupId>org.assertj</groupId>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue