Added possible crypt password, create repository user implementation, etc...
This commit is contained in:
6
.idea/data_source_mapping.xml
generated
Normal file
6
.idea/data_source_mapping.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DataSourcePerFileMappings">
|
||||||
|
<file url="file://$APPLICATION_CONFIG_DIR$/consoles/db/ff48017c-ca9a-4bd4-8b7f-b8031139bce6/console.sql" value="ff48017c-ca9a-4bd4-8b7f-b8031139bce6" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
7
pom.xml
7
pom.xml
@@ -78,10 +78,9 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.testcontainers</groupId>
|
<groupId>org.mindrot</groupId>
|
||||||
<artifactId>postgresql</artifactId>
|
<artifactId>jbcrypt</artifactId>
|
||||||
<version>1.19.8</version>
|
<version>0.4</version>
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|||||||
@@ -2,12 +2,13 @@ package repository;
|
|||||||
|
|
||||||
import models.Task;
|
import models.Task;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public interface TaskRepository {
|
public interface TaskRepository {
|
||||||
List<Task> getUserTasks(int userId);
|
ArrayList<Task> getUserTasks(int userId);
|
||||||
List<Task> findUserTasksByTitle(int userId, String title);
|
ArrayList<Task> findUserTasksByTitle(int userId, String title);
|
||||||
Optional<Task> getUserTask(int userId, int taskId);
|
Optional<Task> getUserTask(int userId, int taskId);
|
||||||
void save(Task task);
|
void save(Task task);
|
||||||
void update(int taskId, Task task);
|
void update(int taskId, Task task);
|
||||||
|
|||||||
41
src/main/java/repository/TaskRepositoryJdbc.java
Normal file
41
src/main/java/repository/TaskRepositoryJdbc.java
Normal file
@@ -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<Task> getUserTasks(int userId) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ArrayList<Task> findUserTasksByTitle(int userId, String title) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<Task> 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) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
11
src/main/java/repository/UserRepository.java
Normal file
11
src/main/java/repository/UserRepository.java
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
package repository;
|
||||||
|
|
||||||
|
import models.User;
|
||||||
|
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
public interface UserRepository {
|
||||||
|
Optional<User> getUser(String username, String password);
|
||||||
|
Optional<User> saveUser(String username, String email, String password);
|
||||||
|
boolean deleteUser(int userId);
|
||||||
|
}
|
||||||
85
src/main/java/repository/UserRepositoryJdbc.java
Normal file
85
src/main/java/repository/UserRepositoryJdbc.java
Normal file
@@ -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<User> 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<User> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package repository.impl;
|
|
||||||
|
|
||||||
import repository.TaskRepository;
|
|
||||||
|
|
||||||
public class TaskRepositoryImpl {
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,11 +1,18 @@
|
|||||||
package service;
|
package service;
|
||||||
|
|
||||||
import models.User;
|
import models.User;
|
||||||
|
import repository.UserRepository;
|
||||||
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
public class UserService {
|
public class UserService {
|
||||||
|
|
||||||
|
UserRepository userRepository;
|
||||||
|
|
||||||
|
public UserService(UserRepository userRepository) {
|
||||||
|
this.userRepository = userRepository;
|
||||||
|
}
|
||||||
|
|
||||||
public Optional<User> login(String username, String password) {
|
public Optional<User> login(String username, String password) {
|
||||||
try {
|
try {
|
||||||
|
|
||||||
@@ -18,13 +25,11 @@ public class UserService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Optional<User> register(String username, String password) {
|
public Optional<User> register(String username, String email, String password) {
|
||||||
try {
|
try {
|
||||||
|
return userRepository.saveUser(username, email, password);
|
||||||
|
|
||||||
return Optional.empty();
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
System.out.println(e.getMessage());
|
e.printStackTrace();
|
||||||
return Optional.empty();
|
return Optional.empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package ui;
|
package ui;
|
||||||
|
|
||||||
import models.User;
|
import models.User;
|
||||||
|
import repository.UserRepository;
|
||||||
import service.UserService;
|
import service.UserService;
|
||||||
import util.Session;
|
import util.Session;
|
||||||
|
|
||||||
@@ -21,19 +22,24 @@ public class LoginPanel {
|
|||||||
|
|
||||||
JButton loginButton = new JButton("Login");
|
JButton loginButton = new JButton("Login");
|
||||||
loginButton.addActionListener(e -> {
|
loginButton.addActionListener(e -> {
|
||||||
String usernameText = username.getText();
|
try {
|
||||||
String passwordText = new String(password.getPassword());
|
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> user = service.login(usernameText, passwordText);
|
Optional<User> user = service.login(usernameText, passwordText);
|
||||||
if (user.isPresent()) {
|
if (user.isPresent()) {
|
||||||
Session.getInstance().setUser(user.get());
|
Session.getInstance().setUser(user.get());
|
||||||
// Wywoałeni jakeiś metody która by mi zmieniała Panele
|
} else {
|
||||||
// Home
|
JOptionPane.showMessageDialog(panel, "User not found");
|
||||||
} else {
|
}
|
||||||
JOptionPane.showMessageDialog(panel, "User not found");
|
|
||||||
|
} catch (Exception ex) {
|
||||||
|
JOptionPane.showMessageDialog(panel, "Error");
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
panel.add(loginButton, BorderLayout.SOUTH);
|
panel.add(loginButton, BorderLayout.SOUTH);
|
||||||
|
|||||||
@@ -19,18 +19,25 @@ public class MyFrame extends JFrame {
|
|||||||
|
|
||||||
JPanel startPanel = new JPanel();
|
JPanel startPanel = new JPanel();
|
||||||
JButton loginButton = new JButton("Login");
|
JButton loginButton = new JButton("Login");
|
||||||
|
JButton registryButton = new JButton("Registry");
|
||||||
|
|
||||||
startPanel.add(loginButton);
|
startPanel.add(loginButton);
|
||||||
|
startPanel.add(registryButton);
|
||||||
mainPanel.add(startPanel, "start");
|
mainPanel.add(startPanel, "start");
|
||||||
mainPanel.add(LoginPanel.getLoginPanel(), "login");
|
mainPanel.add(LoginPanel.getLoginPanel(), "login");
|
||||||
|
mainPanel.add(RegistryPanel.getRegistryPanel(), "registry");
|
||||||
|
|
||||||
loginButton.addActionListener(e -> {
|
loginButton.addActionListener(e -> {
|
||||||
CardLayout cl = (CardLayout)mainPanel.getLayout();
|
CardLayout cl = (CardLayout)mainPanel.getLayout();
|
||||||
cl.show(mainPanel, "login");
|
cl.show(mainPanel, "login");
|
||||||
});
|
});
|
||||||
|
|
||||||
add(mainPanel);
|
registryButton.addActionListener(e -> {
|
||||||
|
CardLayout cl = (CardLayout)mainPanel.getLayout();
|
||||||
|
cl.show(mainPanel, "registry");
|
||||||
|
});
|
||||||
|
|
||||||
|
add(mainPanel);
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
55
src/main/java/ui/RegistryPanel.java
Normal file
55
src/main/java/ui/RegistryPanel.java
Normal file
@@ -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> 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
16
src/main/java/util/PasswordService.java
Normal file
16
src/main/java/util/PasswordService.java
Normal file
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,9 +1,19 @@
|
|||||||
package util;
|
package util;
|
||||||
|
|
||||||
import models.User;
|
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 {
|
public class Session {
|
||||||
private static Session instance;
|
private static Session instance;
|
||||||
|
private static Connection connection;
|
||||||
|
private static UserRepository userRepository;
|
||||||
|
|
||||||
private User user;
|
private User user;
|
||||||
|
|
||||||
public static Session getInstance() {
|
public static Session getInstance() {
|
||||||
@@ -13,6 +23,20 @@ public class Session {
|
|||||||
return instance;
|
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() {
|
public User getUser() {
|
||||||
return user;
|
return user;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user