mirror of
https://github.com/GravitLauncher/Launcher
synced 2024-11-15 11:39:11 +03:00
[FEATURE][CRITICAL] Добавление поддержки Hibernate
This commit is contained in:
parent
03ef5265dd
commit
439b3f41c1
10 changed files with 249 additions and 0 deletions
|
@ -53,6 +53,7 @@ bundle project(':Radon')
|
||||||
bundle 'commons-codec:commons-codec:1.12'
|
bundle 'commons-codec:commons-codec:1.12'
|
||||||
bundle 'org.javassist:javassist:3.25.0-GA'
|
bundle 'org.javassist:javassist:3.25.0-GA'
|
||||||
bundle 'io.netty:netty-all:4.1.36.Final'
|
bundle 'io.netty:netty-all:4.1.36.Final'
|
||||||
|
bundle 'org.hibernate:hibernate-core:5.4.3.Final'
|
||||||
|
|
||||||
bundle 'org.slf4j:slf4j-simple:1.7.25'
|
bundle 'org.slf4j:slf4j-simple:1.7.25'
|
||||||
bundle 'org.slf4j:slf4j-api:1.7.25'
|
bundle 'org.slf4j:slf4j-api:1.7.25'
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package pro.gravit.launchserver.auth.provider;
|
package pro.gravit.launchserver.auth.provider;
|
||||||
|
|
||||||
import pro.gravit.launchserver.auth.AuthException;
|
import pro.gravit.launchserver.auth.AuthException;
|
||||||
|
import pro.gravit.launchserver.hibernate.HibernateManager;
|
||||||
import pro.gravit.utils.ProviderMap;
|
import pro.gravit.utils.ProviderMap;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
@ -21,6 +22,7 @@ public static void registerProviders() {
|
||||||
providers.register("mysql", MySQLAuthProvider.class);
|
providers.register("mysql", MySQLAuthProvider.class);
|
||||||
providers.register("request", RequestAuthProvider.class);
|
providers.register("request", RequestAuthProvider.class);
|
||||||
providers.register("json", JsonAuthProvider.class);
|
providers.register("json", JsonAuthProvider.class);
|
||||||
|
providers.register("hibernate", HibernateAuthProvider.class);
|
||||||
registredProv = true;
|
registredProv = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
package pro.gravit.launchserver.auth.provider;
|
||||||
|
|
||||||
|
import pro.gravit.launchserver.auth.AuthException;
|
||||||
|
import pro.gravit.launchserver.hibernate.User;
|
||||||
|
import pro.gravit.launchserver.hibernate.UserService;
|
||||||
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class HibernateAuthProvider extends AuthProvider {
|
||||||
|
@Override
|
||||||
|
public AuthProviderResult auth(String login, String password, String ip) throws Exception {
|
||||||
|
UserService service = new UserService();
|
||||||
|
User user = service.findUserByUsername(login);
|
||||||
|
if(user == null || !user.verifyPassword(password))
|
||||||
|
{
|
||||||
|
if(user ==null) throw new AuthException("Username incorrect");
|
||||||
|
else throw new AuthException("Username or password incorrect");
|
||||||
|
}
|
||||||
|
return new AuthProviderResult(login, SecurityHelper.randomStringToken());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void close() throws IOException {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -11,6 +11,7 @@ public static void registerComponents() {
|
||||||
if (!registredComp) {
|
if (!registredComp) {
|
||||||
providers.register("authLimiter", AuthLimiterComponent.class);
|
providers.register("authLimiter", AuthLimiterComponent.class);
|
||||||
providers.register("commandRemover", CommandRemoverComponent.class);
|
providers.register("commandRemover", CommandRemoverComponent.class);
|
||||||
|
providers.register("hibernate", HibernateConfiguratorComponent.class);
|
||||||
registredComp = true;
|
registredComp = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,55 @@
|
||||||
|
package pro.gravit.launchserver.components;
|
||||||
|
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import pro.gravit.launchserver.LaunchServer;
|
||||||
|
import pro.gravit.launchserver.hibernate.HibernateManager;
|
||||||
|
import pro.gravit.launchserver.hibernate.User;
|
||||||
|
import pro.gravit.launchserver.hibernate.UserService;
|
||||||
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
|
||||||
|
import javax.persistence.Persistence;
|
||||||
|
import java.nio.file.Paths;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class HibernateConfiguratorComponent extends Component {
|
||||||
|
public String driver;
|
||||||
|
public String url;
|
||||||
|
public String username;
|
||||||
|
public String password;
|
||||||
|
public String pool_size;
|
||||||
|
public String hibernateConfig;
|
||||||
|
@Override
|
||||||
|
public void preInit(LaunchServer launchServer) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(LaunchServer launchServer) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void postInit(LaunchServer launchServer) {
|
||||||
|
Configuration cfg = new Configuration()
|
||||||
|
.addAnnotatedClass(User.class)
|
||||||
|
.setProperty("hibernate.connection.driver_class", driver)
|
||||||
|
.setProperty("hibernate.connection.url", url)
|
||||||
|
.setProperty("hibernate.connection.username", username)
|
||||||
|
.setProperty("hibernate.connection.password", password)
|
||||||
|
.setProperty("hibernate.connection.pool_size", pool_size);
|
||||||
|
if(hibernateConfig != null)
|
||||||
|
cfg.configure(Paths.get(hibernateConfig).toFile());
|
||||||
|
HibernateManager.sessionFactory = cfg.buildSessionFactory();
|
||||||
|
//UserService service = new UserService();
|
||||||
|
//List<User> users = service.findAllUsers();
|
||||||
|
//User newUser = new User();
|
||||||
|
//newUser.username = "VeryTestUser";
|
||||||
|
//newUser.setPassword("12345");
|
||||||
|
//service.saveUser(newUser);
|
||||||
|
//for(User u : users)
|
||||||
|
//{
|
||||||
|
// LogHelper.info("Found User %s", u.username);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package pro.gravit.launchserver.hibernate;
|
||||||
|
|
||||||
|
import org.hibernate.SessionFactory;
|
||||||
|
|
||||||
|
public class HibernateManager {
|
||||||
|
public static SessionFactory sessionFactory;
|
||||||
|
}
|
|
@ -0,0 +1,49 @@
|
||||||
|
package pro.gravit.launchserver.hibernate;
|
||||||
|
|
||||||
|
import pro.gravit.utils.helper.LogHelper;
|
||||||
|
import pro.gravit.utils.helper.SecurityHelper;
|
||||||
|
|
||||||
|
import javax.persistence.*;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
|
import java.security.MessageDigest;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "users")
|
||||||
|
public class User {
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private long id;
|
||||||
|
@Column(unique = true)
|
||||||
|
public String username;
|
||||||
|
@Column(name = "password")
|
||||||
|
private byte[] password;
|
||||||
|
private String password_salt;
|
||||||
|
public void setPassword(String password)
|
||||||
|
{
|
||||||
|
password_salt = SecurityHelper.randomStringAESKey();
|
||||||
|
MessageDigest digest;
|
||||||
|
try {
|
||||||
|
digest = MessageDigest.getInstance("SHA-256");
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
LogHelper.error(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.password = digest.digest(password.concat(password_salt).getBytes(StandardCharsets.UTF_8));
|
||||||
|
}
|
||||||
|
public boolean verifyPassword(String password)
|
||||||
|
{
|
||||||
|
MessageDigest digest;
|
||||||
|
try {
|
||||||
|
digest = MessageDigest.getInstance("SHA-256");
|
||||||
|
} catch (NoSuchAlgorithmException e) {
|
||||||
|
LogHelper.error(e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
byte[] enpassword = digest.digest(password.concat(password_salt).getBytes(StandardCharsets.UTF_8));
|
||||||
|
LogHelper.info(Arrays.toString(enpassword));
|
||||||
|
LogHelper.info(Arrays.toString(this.password));
|
||||||
|
return Arrays.equals(enpassword, this.password);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,12 @@
|
||||||
|
package pro.gravit.launchserver.hibernate;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface UserDAO {
|
||||||
|
User findById(int id);
|
||||||
|
User findByUsername(String username);
|
||||||
|
void save(User user);
|
||||||
|
void update(User user);
|
||||||
|
void delete(User user);
|
||||||
|
List<User> findAll();
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
package pro.gravit.launchserver.hibernate;
|
||||||
|
|
||||||
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.Transaction;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.criteria.CriteriaBuilder;
|
||||||
|
import javax.persistence.criteria.CriteriaQuery;
|
||||||
|
import javax.persistence.criteria.Root;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class UserDAOImpl implements UserDAO {
|
||||||
|
|
||||||
|
public User findById(int id) {
|
||||||
|
return HibernateManager.sessionFactory.openSession().get(User.class, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public User findByUsername(String username) {
|
||||||
|
EntityManager em = HibernateManager.sessionFactory.createEntityManager();
|
||||||
|
em.getTransaction().begin();
|
||||||
|
CriteriaBuilder cb = em.getCriteriaBuilder();
|
||||||
|
CriteriaQuery<User> personCriteria = cb.createQuery(User.class);
|
||||||
|
Root<User> rootUser = personCriteria.from(User.class);
|
||||||
|
personCriteria.select(rootUser).where(cb.equal(rootUser.get("username"), username));
|
||||||
|
User ret = em.createQuery(personCriteria).getSingleResult();
|
||||||
|
em.close();
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void save(User user) {
|
||||||
|
Session session = HibernateManager.sessionFactory.openSession();
|
||||||
|
Transaction tx1 = session.beginTransaction();
|
||||||
|
session.save(user);
|
||||||
|
tx1.commit();
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void update(User user) {
|
||||||
|
Session session = HibernateManager.sessionFactory.openSession();
|
||||||
|
Transaction tx1 = session.beginTransaction();
|
||||||
|
session.update(user);
|
||||||
|
tx1.commit();
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(User user) {
|
||||||
|
Session session = HibernateManager.sessionFactory.openSession();
|
||||||
|
Transaction tx1 = session.beginTransaction();
|
||||||
|
session.delete(user);
|
||||||
|
tx1.commit();
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User> findAll() {
|
||||||
|
List<User> users = (List<User>) HibernateManager.sessionFactory.openSession().createQuery("From User").list();
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package pro.gravit.launchserver.hibernate;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class UserService {
|
||||||
|
|
||||||
|
private UserDAO usersDao = new UserDAOImpl();
|
||||||
|
|
||||||
|
public UserService() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public User findUser(int id) {
|
||||||
|
return usersDao.findById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public User findUserByUsername(String username) {
|
||||||
|
return usersDao.findByUsername(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveUser(User user) {
|
||||||
|
usersDao.save(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteUser(User user) {
|
||||||
|
usersDao.delete(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateUser(User user) {
|
||||||
|
usersDao.update(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<User> findAllUsers() {
|
||||||
|
return usersDao.findAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in a new issue