diff --git a/pom.xml b/pom.xml
index d666d95..cc3a8ab 100644
--- a/pom.xml
+++ b/pom.xml
@@ -154,6 +154,13 @@
2.4.1
+
+
+ org.mindrot
+ jbcrypt
+ 0.3m
+
+
org.junit.jupiter
diff --git a/src/main/java/de/hsel/itech/db/Database.java b/src/main/java/de/hsel/itech/db/Database.java
index a9b89a0..10f34f1 100644
--- a/src/main/java/de/hsel/itech/db/Database.java
+++ b/src/main/java/de/hsel/itech/db/Database.java
@@ -32,11 +32,15 @@ public class Database {
final String tableAuthorBook = "author_book";
final String tablePublisher = "publisher";
final String tableCategory = "category";
+ final String tableUser = "user";
+ final String tableUserAddress = "user_address";
+ final String tableAddress = "address";
private AuthorDB authorDB;
private BookDB bookDB;
private CategoryDB categoryDB;
private PublisherDB publisherDB;
+ private UserDB userDB;
private static Database instance;
@@ -124,6 +128,12 @@ public class Database {
return publisherDB;
}
+ public UserDB user() {
+ if(userDB == null)
+ userDB = new UserDB(this);
+ return userDB;
+ }
+
/**
diff --git a/src/main/java/de/hsel/itech/db/UserDB.java b/src/main/java/de/hsel/itech/db/UserDB.java
new file mode 100644
index 0000000..dd562ac
--- /dev/null
+++ b/src/main/java/de/hsel/itech/db/UserDB.java
@@ -0,0 +1,89 @@
+package de.hsel.itech.db;
+
+import de.hsel.itech.db.pojo.User;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.mindrot.jbcrypt.BCrypt;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Map;
+
+/**
+ * @author Johannes Theiner
+ * @version 0.1
+ * @since 0.5
+ **/
+public class UserDB {
+
+ private Database database;
+
+ private final int logRounds = 11;
+
+ UserDB(Database database) {
+ this.database = database;
+ }
+
+ @Nullable
+ public User get(long id) {
+ Map.Entry entry = database.getResultSetById(database.tableUser, id);
+ assert entry != null;
+
+ ResultSet rs = entry.getKey();
+ try {
+ return new User(rs.getString("email"), rs.getString("name"), rs.getString("password"), rs.getShort("type"));
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ entry.getValue().close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public boolean verify(@NotNull User user, @NotNull String password) {
+ return verifyHash(password, user.getPassword());
+ }
+
+
+ public int insert(@NotNull User user) {
+ user.setPassword(hash(user.getPassword()));
+
+
+ Connection connection = database.getConnection();
+ int updateCount = 0;
+
+ try {
+ assert connection != null;
+ PreparedStatement statement = connection.prepareStatement("INSERT INTO user (name, email, password, type) values (?, ?, ?, ?)");
+ statement.setString(1, user.getName());
+ statement.setString(2, user.getEmail());
+ statement.setString(3, user.getEmail());
+ statement.setShort(4, user.getType());
+
+ updateCount += statement.executeUpdate();
+ connection.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }
+ return updateCount;
+ }
+
+ public int delete(@NotNull User user) {
+ return database.delete(user.getId(), database.tableUser);
+ }
+
+ @NotNull
+ private String hash(@NotNull String password) {
+ return BCrypt.hashpw(password, BCrypt.gensalt(logRounds));
+ }
+
+ private boolean verifyHash(@NotNull String plaintext, @NotNull String hash) {
+ return BCrypt.checkpw(plaintext, hash);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/de/hsel/itech/db/pojo/Address.java b/src/main/java/de/hsel/itech/db/pojo/Address.java
index 030e0be..39ea954 100644
--- a/src/main/java/de/hsel/itech/db/pojo/Address.java
+++ b/src/main/java/de/hsel/itech/db/pojo/Address.java
@@ -18,7 +18,7 @@ import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
public class Address {
- @NonNull private Customer customer;
+ @NonNull private User user;
private long id;
@NonNull private String name;
@NonNull private String street;
diff --git a/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java b/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java
index 0145e55..0d31b17 100644
--- a/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java
+++ b/src/main/java/de/hsel/itech/db/pojo/CreditCardPayment.java
@@ -21,7 +21,7 @@ import java.time.LocalDate;
public class CreditCardPayment {
private long id;
- @NonNull private Customer customer;
+ @NonNull private User user;
@NonNull private int number;
@NonNull private String owner;
@NonNull private LocalDate expiration;
diff --git a/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java b/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java
index 5e7afdd..35e3985 100644
--- a/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java
+++ b/src/main/java/de/hsel/itech/db/pojo/DebitCardPayment.java
@@ -19,7 +19,7 @@ import lombok.RequiredArgsConstructor;
public class DebitCardPayment {
private long id;
- @NonNull private Customer customer;
+ @NonNull private User user;
@NonNull private String iban;
@NonNull private String bic;
@NonNull private String owner;
diff --git a/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java b/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java
index b250a97..6e1411b 100644
--- a/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java
+++ b/src/main/java/de/hsel/itech/db/pojo/InvoicePayment.java
@@ -19,5 +19,5 @@ import lombok.RequiredArgsConstructor;
public class InvoicePayment {
private long id;
- @NonNull private Customer customer;
+ @NonNull private User user;
}
\ No newline at end of file
diff --git a/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java b/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java
index be55830..0c4044b 100644
--- a/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java
+++ b/src/main/java/de/hsel/itech/db/pojo/PayPalPayment.java
@@ -19,7 +19,7 @@ import lombok.RequiredArgsConstructor;
public class PayPalPayment {
private long id;
- @NonNull private Customer customer;
+ @NonNull private User user;
@NonNull private String email;
@NonNull private String authCode;
}
\ No newline at end of file
diff --git a/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java b/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java
index 547743a..c7fd9ec 100644
--- a/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java
+++ b/src/main/java/de/hsel/itech/db/pojo/ShoppingCart.java
@@ -19,7 +19,7 @@ import lombok.RequiredArgsConstructor;
public class ShoppingCart {
private long id;
- @NonNull private Customer customer;
+ @NonNull private User user;
@NonNull private Book article;
@NonNull private int count;
}
\ No newline at end of file
diff --git a/src/main/java/de/hsel/itech/db/pojo/Customer.java b/src/main/java/de/hsel/itech/db/pojo/User.java
similarity index 82%
rename from src/main/java/de/hsel/itech/db/pojo/Customer.java
rename to src/main/java/de/hsel/itech/db/pojo/User.java
index 566afd3..e24b2e9 100644
--- a/src/main/java/de/hsel/itech/db/pojo/Customer.java
+++ b/src/main/java/de/hsel/itech/db/pojo/User.java
@@ -6,7 +6,7 @@ import lombok.NonNull;
import lombok.RequiredArgsConstructor;
/**
- * POJO for Customer.
+ * POJO for User.
*
* @author Johannes Theiner
* @version 0.1
@@ -16,11 +16,11 @@ import lombok.RequiredArgsConstructor;
@Data
@AllArgsConstructor
@RequiredArgsConstructor
-public class Customer {
+public class User {
private long id;
@NonNull private String email;
@NonNull private String name;
@NonNull private String password;
- @NonNull private boolean admin;
+ @NonNull private short type;
}
\ No newline at end of file