diff --git a/pom.xml b/pom.xml
index d5e1dc6..8a7e883 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,6 +34,10 @@
org.springframework.boot
spring-boot-starter-actuator
+
+ org.springframework.security
+ spring-security-crypto
+
diff --git a/src/main/java/database/DatabaseHelper.java b/src/main/java/database/DatabaseHelper.java
index d511d1d..fbf79c0 100644
--- a/src/main/java/database/DatabaseHelper.java
+++ b/src/main/java/database/DatabaseHelper.java
@@ -5,9 +5,10 @@ import com.j256.ormlite.support.ConnectionSource;
public class DatabaseHelper {
private static final String DATABASE_NAME = "monnethic";
- private static final String DATABASE_USER = "";
- private static final String DATABASE_PWD = "";
- private final static String DATABASE_URL = "jdbc:postgresql://host:port/"+DATABASE_NAME;
+ private static final String DATABASE_USER = "postgres";
+ private static final String DATABASE_PWD = "L-*q~Ytaha{;u+7yJ8";
+ //private final static String DATABASE_URL = "jdbc:postgresql://host:port/"+DATABASE_NAME;
+ private final static String DATABASE_URL = "jdbc:postgresql://37.187.101.44:5432/"+DATABASE_NAME;
public ConnectionSource setupDatabaseConnection(){
try{
diff --git a/src/main/java/database/transaction/Transaction.java b/src/main/java/database/transaction/Transaction.java
index 85aa124..08769ee 100644
--- a/src/main/java/database/transaction/Transaction.java
+++ b/src/main/java/database/transaction/Transaction.java
@@ -4,38 +4,36 @@ import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
import java.math.BigInteger;
-import java.util.Date;
@DatabaseTable(tableName = "T_TRANSACTION")
public class Transaction {
- @DatabaseField(columnName = "transactionId", generatedId = true, unique = true)
- private int id;
- @DatabaseField(columnName = "transactionDate")
- private Date transactionDate;
- @DatabaseField(columnName = "transactionDSrcAddress")
+ @DatabaseField
+ private int transactionId;
+ @DatabaseField(canBeNull = false)
+ private int userId;
+ @DatabaseField(canBeNull = false)
+ private long transactionDate;
+ @DatabaseField(columnName = "transactionFrom", canBeNull = false)
private String sourceAddress;
- @DatabaseField(columnName = "transactionDestAddress")
+ @DatabaseField(columnName = "transactionTo", canBeNull = false)
private String destAddress;
- @DatabaseField(columnName = "transactionHash")
+ @DatabaseField(canBeNull = false)
private String transactionHash;
- @DatabaseField(columnName = "transactionBlockNumber")
- private String blockNumber;
- @DatabaseField(columnName = "transactionAmout")
+ @DatabaseField(canBeNull = false)
private BigInteger amount;
- @DatabaseField(columnName = "transactionUnit")
+ @DatabaseField(canBeNull = false)
private String unit;
public Transaction() {
super();
}
- public Transaction(Date transactionDate, String sourceAddress, String destAddress, String transactionHash, String blockNumber, BigInteger amount, String unit) {
+ public Transaction(long transactionDate, String sourceAddress, String destAddress, String transactionHash, BigInteger amount, String unit) {
super();
this.transactionDate = transactionDate;
this.sourceAddress = sourceAddress;
this.destAddress = destAddress;
this.transactionHash = transactionHash;
- this.blockNumber = blockNumber;
this.amount = amount;
this.unit = unit;
}
@@ -72,19 +70,27 @@ public class Transaction {
this.amount = amount;
}
- public int getId() {
- return id;
+ public int getTransactionId() {
+ return transactionId;
}
- public void setId(int id) {
- this.id = id;
+ public void setTransactionId(int id) {
+ this.transactionId = transactionId;
}
- public Date getTransactionDate() {
+ public int getUserId() {
+ return userId;
+ }
+
+ public void setUserId(int userId) {
+ this.userId = userId;
+ }
+
+ public long getTransactionDate() {
return transactionDate;
}
- public void setTransactionDate(Date transactionDate) {
+ public void setTransactionDate(long transactionDate) {
this.transactionDate = transactionDate;
}
@@ -96,11 +102,4 @@ public class Transaction {
this.unit = unit;
}
- public String getBlockNumber() {
- return blockNumber;
- }
-
- public void setBlockNumber(String blockNumber) {
- this.blockNumber = blockNumber;
- }
}
diff --git a/src/main/java/database/user/User.java b/src/main/java/database/user/User.java
index 851f2a3..2de0261 100644
--- a/src/main/java/database/user/User.java
+++ b/src/main/java/database/user/User.java
@@ -6,11 +6,13 @@ import com.j256.ormlite.table.DatabaseTable;
//Class User which represent an User in the postgresDB
@DatabaseTable(tableName = "T_USER")
public class User {
+ @DatabaseField
+ private int userId;
@DatabaseField(canBeNull = false)
private String name;
@DatabaseField(canBeNull = false)
private String firstname;
- @DatabaseField(id = true)
+ @DatabaseField(canBeNull = false)
private String email;
@DatabaseField(canBeNull = false)
private String password;
@@ -22,6 +24,8 @@ public class User {
private boolean verified;
@DatabaseField(canBeNull = false)
private boolean approved;
+ @DatabaseField(canBeNull = false)
+ private String user_hash;
//Constructors
//Default constructor for ORMLite
@@ -35,9 +39,10 @@ public class User {
this.password = password;
}
- public User(String name, String firstname, String email, String password, long creation_date, long modification_date, boolean verified, boolean approved) {
+ public User(String name, String firstname,String user_hash, String email, String password, long creation_date, long modification_date, boolean verified, boolean approved) {
this.name = name;
this.firstname = firstname;
+ this.user_hash = user_hash;
this.email = email;
this.password = password;
this.creation_date = creation_date;
@@ -48,10 +53,18 @@ public class User {
//Getters and Setters
+ public int getUserId() {
+ return userId;
+ }
+
public String getName() {
return name;
}
+ public void setUser_hash(String user_hash){this.user_hash = user_hash;}
+
+ public String getUser_hash(){return user_hash;}
+
public void setName(String name) {
this.name = name;
}
diff --git a/src/main/java/database/user/UserDao.java b/src/main/java/database/user/UserDao.java
index 307b0eb..8d33285 100644
--- a/src/main/java/database/user/UserDao.java
+++ b/src/main/java/database/user/UserDao.java
@@ -14,7 +14,7 @@ public class UserDao {
private DatabaseHelper dbh = new DatabaseHelper();
private Dao userDao;
- public Dao createUserDaoConnection(){
+ private Dao createUserDaoConnection(){
try {
return DaoManager.createDao(dbh.setupDatabaseConnection(),User.class);
}catch (Exception e){
diff --git a/src/main/java/restImplementation/DatabaseImplementation.java b/src/main/java/restImplementation/DatabaseImplementation.java
new file mode 100644
index 0000000..15f6ad4
--- /dev/null
+++ b/src/main/java/restImplementation/DatabaseImplementation.java
@@ -0,0 +1,66 @@
+package restImplementation;
+
+import database.user.User;
+import database.user.UserDao;
+import org.springframework.security.crypto.bcrypt.BCrypt;
+
+import java.time.Instant;
+
+public class DatabaseImplementation {
+
+ public boolean saveUser(User user){
+ UserDao userDao = new UserDao();
+ try{
+ User dbUser = userDao.getUser(user.getEmail());
+ if(dbUser != null){
+ return false;
+ }else {
+ user.setPassword(hashPassword(user.getPassword()));
+
+ long now = Instant.now().toEpochMilli();
+
+ user.setCreation_date(now);
+ user.setModification_date(now);
+ user.setVerified(true);
+ user.setApproved(true);
+
+ //TEMPORARY USER HASH IS
+ // name+email+password
+ user.setUser_hash(hashPassword(user.getName()+user.getEmail()+user.getPassword()));
+ userDao.addUser(user);
+ }
+
+ } catch (Exception e){
+ e.printStackTrace();
+ }
+ return true;
+ }
+
+ public String userLogger(User user){
+ UserDao userDao = new UserDao();
+ String response = "";
+ try{
+ User user1 = userDao.getUser(user.getEmail());
+ if(user1 != null){
+ String hash = user1.getPassword();
+
+ if(!BCrypt.checkpw(user.getPassword(), hash)){
+ response = "NotAllowed";
+ }else{
+ response = "Ok";
+ }
+ } else {
+ response = "NotExist";
+ }
+
+ } catch (Exception e){
+ System.out.println(e);
+ }
+ return response;
+ }
+
+
+ private String hashPassword(String plainTextPassword){
+ return BCrypt.hashpw(plainTextPassword,BCrypt.gensalt());
+ }
+}
diff --git a/src/main/java/restService/DatabaseController.java b/src/main/java/restService/DatabaseController.java
new file mode 100644
index 0000000..0e0c204
--- /dev/null
+++ b/src/main/java/restService/DatabaseController.java
@@ -0,0 +1,44 @@
+package restService;
+
+import database.user.User;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+import restImplementation.DatabaseImplementation;
+
+import javax.validation.Valid;
+
+@RestController
+public class DatabaseController {
+
+ @PostMapping("/save")
+ @ResponseStatus(HttpStatus.CREATED)
+ public ResponseEntity saveUser(@Valid @RequestBody User user){
+ DatabaseImplementation databaseImplementation = new DatabaseImplementation();
+ boolean result = databaseImplementation.saveUser(user);
+ if(result){
+ return ResponseEntity.status(HttpStatus.OK).body("");
+ }else {
+ return ResponseEntity.status(HttpStatus.FOUND).body("User exist");
+ }
+ }
+
+ @PostMapping("/login")
+ @ResponseStatus(HttpStatus.OK)
+ public ResponseEntity login(@Valid @RequestBody User user){
+ DatabaseImplementation databaseImplementation = new DatabaseImplementation();
+ String response = databaseImplementation.userLogger(user);
+
+ if(response.equals("NotExist")){
+ return ResponseEntity.status(HttpStatus.NOT_FOUND).body("User not found");
+ }else if(response.equals("NotAllowed")){
+ return ResponseEntity.status(HttpStatus.FORBIDDEN).body("Wrong Password!");
+ } else if(response.equals("")){
+ return ResponseEntity.status(HttpStatus.NO_CONTENT).body("Error");
+ } else {
+ return ResponseEntity.ok("Welcome");
+ }
+ }
+
+
+}
diff --git a/src/test/java/crypto/CryptoTest.java b/src/test/java/crypto/CryptoTest.java
new file mode 100644
index 0000000..1451071
--- /dev/null
+++ b/src/test/java/crypto/CryptoTest.java
@@ -0,0 +1,23 @@
+package crypto;
+
+import org.junit.Ignore;
+import org.junit.Test;
+import org.springframework.security.crypto.bcrypt.BCrypt;
+
+import java.time.Instant;
+@Ignore
+public class CryptoTest {
+
+ @Test
+ public void testHash(){
+ String password = "newPassword";
+ System.out.println(hashPassword(password));
+
+ long now = Instant.now().toEpochMilli();
+ System.out.println(now);
+ }
+
+ private String hashPassword(String plainTextPassword) {
+ return BCrypt.hashpw(plainTextPassword, BCrypt.gensalt());
+ }
+}
diff --git a/src/test/java/database/DatabaseHelperTest.java b/src/test/java/database/DatabaseHelperTest.java
index 02dea81..07771d7 100644
--- a/src/test/java/database/DatabaseHelperTest.java
+++ b/src/test/java/database/DatabaseHelperTest.java
@@ -2,9 +2,11 @@ package database;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.dao.DaoManager;
+import org.junit.Ignore;
import org.junit.Test;
//Testing class for postgresql connection
+@Ignore
public class DatabaseHelperTest {
private DatabaseHelper dbh = new DatabaseHelper();
diff --git a/src/test/java/restImplementation/UserLoggerTest.java b/src/test/java/restImplementation/UserLoggerTest.java
new file mode 100644
index 0000000..8f21cb6
--- /dev/null
+++ b/src/test/java/restImplementation/UserLoggerTest.java
@@ -0,0 +1,21 @@
+package restImplementation;
+
+import database.user.User;
+import org.junit.Ignore;
+import org.junit.Test;
+
+@Ignore
+public class UserLoggerTest {
+ @Test
+ public void testLoggerUser(){
+ User user = new User();
+ user.setPassword("newPassword");
+ user.setEmail("thomas.marshal@gmail.com");
+
+ DatabaseImplementation databaseImplementation = new DatabaseImplementation();
+ String res = databaseImplementation.userLogger(user);
+ System.out.println(res);
+
+
+ }
+}