From f306606b34d8fb92842a5bab5b35a10546ce82ca Mon Sep 17 00:00:00 2001 From: maciejrusek Date: Mon, 27 Apr 2026 20:14:21 +0200 Subject: [PATCH] Added possible crypt password, create repository user implementation, etc... --- .idea/data_source_mapping.xml | 6 ++ pom.xml | 7 +- src/main/java/repository/TaskRepository.java | 5 +- .../java/repository/TaskRepositoryJdbc.java | 41 +++++++++ src/main/java/repository/UserRepository.java | 11 +++ .../java/repository/UserRepositoryJdbc.java | 85 +++++++++++++++++++ .../repository/impl/TaskRepositoryImpl.java | 9 -- src/main/java/service/UserService.java | 15 ++-- src/main/java/ui/LoginPanel.java | 26 +++--- src/main/java/ui/MyFrame.java | 9 +- src/main/java/ui/RegistryPanel.java | 55 ++++++++++++ src/main/java/util/PasswordService.java | 16 ++++ src/main/java/util/Session.java | 24 ++++++ 13 files changed, 278 insertions(+), 31 deletions(-) create mode 100644 .idea/data_source_mapping.xml create mode 100644 src/main/java/repository/TaskRepositoryJdbc.java create mode 100644 src/main/java/repository/UserRepository.java create mode 100644 src/main/java/repository/UserRepositoryJdbc.java delete mode 100644 src/main/java/repository/impl/TaskRepositoryImpl.java create mode 100644 src/main/java/ui/RegistryPanel.java create mode 100644 src/main/java/util/PasswordService.java diff --git a/.idea/data_source_mapping.xml b/.idea/data_source_mapping.xml new file mode 100644 index 0000000..8c9357f --- /dev/null +++ b/.idea/data_source_mapping.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 19f5920..e2ef3e2 100644 --- a/pom.xml +++ b/pom.xml @@ -78,10 +78,9 @@ - org.testcontainers - postgresql - 1.19.8 - test + org.mindrot + jbcrypt + 0.4 diff --git a/src/main/java/repository/TaskRepository.java b/src/main/java/repository/TaskRepository.java index cd84adb..d45cd6f 100644 --- a/src/main/java/repository/TaskRepository.java +++ b/src/main/java/repository/TaskRepository.java @@ -2,12 +2,13 @@ package repository; import models.Task; +import java.util.ArrayList; import java.util.List; import java.util.Optional; public interface TaskRepository { - List getUserTasks(int userId); - List findUserTasksByTitle(int userId, String title); + ArrayList getUserTasks(int userId); + ArrayList findUserTasksByTitle(int userId, String title); Optional getUserTask(int userId, int taskId); void save(Task task); void update(int taskId, Task task); diff --git a/src/main/java/repository/TaskRepositoryJdbc.java b/src/main/java/repository/TaskRepositoryJdbc.java new file mode 100644 index 0000000..c3dbc27 --- /dev/null +++ b/src/main/java/repository/TaskRepositoryJdbc.java @@ -0,0 +1,41 @@ +package repository; + +import models.Task; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +public class TaskRepositoryJdbc implements TaskRepository { + + + @Override + public ArrayList getUserTasks(int userId) { + return new ArrayList<>(); + } + + @Override + public ArrayList findUserTasksByTitle(int userId, String title) { + return new ArrayList<>(); + } + + @Override + public Optional getUserTask(int userId, int taskId) { + return Optional.empty(); + } + + @Override + public void save(Task task) { + + } + + @Override + public void update(int taskId, Task task) { + + } + + @Override + public void delete(int taskId) { + + } +} diff --git a/src/main/java/repository/UserRepository.java b/src/main/java/repository/UserRepository.java new file mode 100644 index 0000000..5bed468 --- /dev/null +++ b/src/main/java/repository/UserRepository.java @@ -0,0 +1,11 @@ +package repository; + +import models.User; + +import java.util.Optional; + +public interface UserRepository { + Optional getUser(String username, String password); + Optional saveUser(String username, String email, String password); + boolean deleteUser(int userId); +} diff --git a/src/main/java/repository/UserRepositoryJdbc.java b/src/main/java/repository/UserRepositoryJdbc.java new file mode 100644 index 0000000..25a3c84 --- /dev/null +++ b/src/main/java/repository/UserRepositoryJdbc.java @@ -0,0 +1,85 @@ +package repository; + +import models.User; +import org.flywaydb.core.internal.proprietaryStubs.PrepareCommandExtensionStub; +import util.PasswordService; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Optional; + +public class UserRepositoryJdbc implements UserRepository { + + private final Connection connection; + + public UserRepositoryJdbc(Connection connection) { + this.connection = connection; + } + + @Override + public Optional getUser(String username, String password) { + try { + PreparedStatement preparedStatement = connection.prepareStatement( + "SELECT * FROM users WHERE name=(?);" + ); + + preparedStatement.setString(1, username); + ResultSet resultSet = preparedStatement.executeQuery(); + + String passwordFromDB = resultSet.getString("password"); + String emailFromDB = resultSet.getString("email"); + if (!PasswordService.checkPassword(password, passwordFromDB)) { + return Optional.empty(); + } + + User user = new User(username, emailFromDB); + + return Optional.of(user); + } catch (SQLException e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + @Override + public Optional saveUser(String username, String email, String password) { + try { + String hashedPassword = PasswordService.hashPassword(password); + + PreparedStatement preparedStatement = connection.prepareStatement( + "INSERT INTO users (name, email, password) VALUES (?, ?, ?);" + ); + + preparedStatement.setString(1, username); + preparedStatement.setString(2, email); + preparedStatement.setString(3, hashedPassword); + preparedStatement.executeUpdate(); + + User user = new User(username, email); + return Optional.of(user); + } catch (SQLException e) { + e.printStackTrace(); + return Optional.empty(); + } + } + + @Override + public boolean deleteUser(int userId) { + try { + PreparedStatement preparedStatement = connection.prepareStatement( + "DELETE FROM users WHERE id=(?);" + ); + + preparedStatement.setInt(1, userId); + preparedStatement.executeUpdate(); + + return true; + } catch (SQLException e) { + e.printStackTrace(); + return false; + } + + } +} diff --git a/src/main/java/repository/impl/TaskRepositoryImpl.java b/src/main/java/repository/impl/TaskRepositoryImpl.java deleted file mode 100644 index ead8bbb..0000000 --- a/src/main/java/repository/impl/TaskRepositoryImpl.java +++ /dev/null @@ -1,9 +0,0 @@ -package repository.impl; - -import repository.TaskRepository; - -public class TaskRepositoryImpl { - - - -} diff --git a/src/main/java/service/UserService.java b/src/main/java/service/UserService.java index 12b0b93..0f1095f 100644 --- a/src/main/java/service/UserService.java +++ b/src/main/java/service/UserService.java @@ -1,11 +1,18 @@ package service; import models.User; +import repository.UserRepository; import java.util.Optional; public class UserService { + UserRepository userRepository; + + public UserService(UserRepository userRepository) { + this.userRepository = userRepository; + } + public Optional login(String username, String password) { try { @@ -18,13 +25,11 @@ public class UserService { } } - public Optional register(String username, String password) { + public Optional register(String username, String email, String password) { try { - - - return Optional.empty(); + return userRepository.saveUser(username, email, password); } catch (Exception e) { - System.out.println(e.getMessage()); + e.printStackTrace(); return Optional.empty(); } } diff --git a/src/main/java/ui/LoginPanel.java b/src/main/java/ui/LoginPanel.java index c5151ae..6964996 100644 --- a/src/main/java/ui/LoginPanel.java +++ b/src/main/java/ui/LoginPanel.java @@ -1,6 +1,7 @@ package ui; import models.User; +import repository.UserRepository; import service.UserService; import util.Session; @@ -21,19 +22,24 @@ public class LoginPanel { JButton loginButton = new JButton("Login"); loginButton.addActionListener(e -> { - String usernameText = username.getText(); - String passwordText = new String(password.getPassword()); + try { + String usernameText = username.getText(); + String passwordText = new String(password.getPassword()); - UserService service = new UserService(); + UserRepository userRepository = Session.getUserRepository(); + UserService service = new UserService(userRepository); - Optional user = service.login(usernameText, passwordText); - if (user.isPresent()) { - Session.getInstance().setUser(user.get()); - // Wywoałeni jakeiś metody która by mi zmieniała Panele - // Home - } else { - JOptionPane.showMessageDialog(panel, "User not found"); + Optional user = service.login(usernameText, passwordText); + if (user.isPresent()) { + Session.getInstance().setUser(user.get()); + } else { + JOptionPane.showMessageDialog(panel, "User not found"); + } + + } catch (Exception ex) { + JOptionPane.showMessageDialog(panel, "Error"); } + }); panel.add(loginButton, BorderLayout.SOUTH); diff --git a/src/main/java/ui/MyFrame.java b/src/main/java/ui/MyFrame.java index 544a2ef..faae510 100644 --- a/src/main/java/ui/MyFrame.java +++ b/src/main/java/ui/MyFrame.java @@ -19,18 +19,25 @@ public class MyFrame extends JFrame { JPanel startPanel = new JPanel(); JButton loginButton = new JButton("Login"); + JButton registryButton = new JButton("Registry"); startPanel.add(loginButton); + startPanel.add(registryButton); mainPanel.add(startPanel, "start"); mainPanel.add(LoginPanel.getLoginPanel(), "login"); + mainPanel.add(RegistryPanel.getRegistryPanel(), "registry"); loginButton.addActionListener(e -> { CardLayout cl = (CardLayout)mainPanel.getLayout(); cl.show(mainPanel, "login"); }); - add(mainPanel); + registryButton.addActionListener(e -> { + CardLayout cl = (CardLayout)mainPanel.getLayout(); + cl.show(mainPanel, "registry"); + }); + add(mainPanel); setVisible(true); } } diff --git a/src/main/java/ui/RegistryPanel.java b/src/main/java/ui/RegistryPanel.java new file mode 100644 index 0000000..b6dd202 --- /dev/null +++ b/src/main/java/ui/RegistryPanel.java @@ -0,0 +1,55 @@ +package ui; + +import models.User; +import repository.UserRepository; +import service.UserService; +import util.Session; + +import javax.swing.*; +import java.awt.*; +import java.util.Optional; + +public class RegistryPanel { + + public static JPanel getRegistryPanel(){ + JPanel panel = new JPanel(); + + JTextField username = new JTextField("Login"); + JTextField email = new JTextField("email@email.com"); + JPasswordField password = new JPasswordField("Password"); + + panel.add(username, BorderLayout.NORTH); + panel.add(email, BorderLayout.NORTH); + panel.add(password, BorderLayout.CENTER); + + JButton loginButton = new JButton("Registry"); + loginButton.addActionListener(e -> { + try { + String usernameText = username.getText(); + String emailText = email.getText(); + String passwordText = new String(password.getPassword()); + + UserRepository userRepository = Session.getUserRepository(); + UserService service = new UserService(userRepository); + + Optional user = service.register(usernameText, emailText, passwordText); + if (user.isPresent()) { + Session.getInstance().setUser(user.get()); + } else { + JOptionPane.showMessageDialog(panel, "User not found"); + } + + } catch (Exception ex) { + JOptionPane.showMessageDialog(panel, "Error"); + } + + }); + + panel.add(loginButton, BorderLayout.SOUTH); + + return panel; + } + + + +} diff --git a/src/main/java/util/PasswordService.java b/src/main/java/util/PasswordService.java new file mode 100644 index 0000000..96f034b --- /dev/null +++ b/src/main/java/util/PasswordService.java @@ -0,0 +1,16 @@ +package util; + +import org.mindrot.jbcrypt.BCrypt; + +public class PasswordService { + + public static String hashPassword(String password) { + String salt = BCrypt.gensalt(12); + + return BCrypt.hashpw(password, salt); + } + + public static boolean checkPassword(String password, String hashedPassword) { + return BCrypt.checkpw(password, hashedPassword); + } +} diff --git a/src/main/java/util/Session.java b/src/main/java/util/Session.java index 8e520ae..bbb5d5f 100644 --- a/src/main/java/util/Session.java +++ b/src/main/java/util/Session.java @@ -1,9 +1,19 @@ package util; import models.User; +import repository.UserRepository; +import repository.UserRepositoryJdbc; + +import java.sql.Connection; +import java.sql.SQLException; + +import static util.DatabaseConnection.getConnection; public class Session { private static Session instance; + private static Connection connection; + private static UserRepository userRepository; + private User user; public static Session getInstance() { @@ -13,6 +23,20 @@ public class Session { return instance; } + public static Connection getConn() throws SQLException { + if (connection == null) { + connection = getConnection(); + } + return connection; + } + + public static UserRepository getUserRepository() throws SQLException { + if (userRepository == null) { + userRepository = new UserRepositoryJdbc(getConn()); + } + return userRepository; + } + public User getUser() { return user; }