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;
}