diff --git a/src/main/java/blockchain/query/TransactionWrapper.java b/src/main/java/blockchain/query/TransactionWrapper.java index 95490d7..93a0f28 100644 --- a/src/main/java/blockchain/query/TransactionWrapper.java +++ b/src/main/java/blockchain/query/TransactionWrapper.java @@ -15,11 +15,12 @@ import java.util.LinkedList; public class TransactionWrapper { private static Logger logger = Logger.getLogger(TransactionWrapper.class); - public BlockEvent.TransactionEvent sendTransaction(String functionName, String[] args){ + public BlockEvent.TransactionEvent sendTransaction(String functionName, String[] args) throws Exception { BasicConfigurator.configure(); UserContext user = Util.readUserContext(Config.ORG1,"admin"); - try{ + //try{ + Collection successful = new LinkedList<>(); Collection failed = new LinkedList<>(); FabricClientWrapper fabricClientWrapper; @@ -62,10 +63,10 @@ public class TransactionWrapper { return channelClientWrapper.sendTransaction(successful); //Send successful transaction to orderer - + /* } catch (Exception e){ e.printStackTrace(); return null; - } + }*/ } } diff --git a/src/main/java/database/Wallet/Wallet.java b/src/main/java/database/Wallet/Wallet.java new file mode 100644 index 0000000..78aab6d --- /dev/null +++ b/src/main/java/database/Wallet/Wallet.java @@ -0,0 +1,4 @@ +package database.Wallet; + +public class Wallet { +} diff --git a/src/main/java/database/Wallet/WalletDao.java b/src/main/java/database/Wallet/WalletDao.java new file mode 100644 index 0000000..33ac10c --- /dev/null +++ b/src/main/java/database/Wallet/WalletDao.java @@ -0,0 +1,4 @@ +package database.Wallet; + +public class WalletDao { +} diff --git a/src/main/java/database/user/User.java b/src/main/java/database/user/User.java index 9ced319..c5ffff7 100644 --- a/src/main/java/database/user/User.java +++ b/src/main/java/database/user/User.java @@ -20,9 +20,9 @@ public class User { private long creation_date; @DatabaseField(canBeNull = false) private long modification_date; - @DatabaseField + @DatabaseField(canBeNull = false) private long phone; - @DatabaseField + @DatabaseField(canBeNull = false) private String association; @DatabaseField(canBeNull = false) private boolean verified; @@ -150,6 +150,7 @@ public class User { this.approved = approved; } + @Override public String toString() { return "User{" + diff --git a/src/main/java/restImplementation/DatabaseUserImplementation.java b/src/main/java/restImplementation/DatabaseUserImplementation.java index b243e54..be56d54 100644 --- a/src/main/java/restImplementation/DatabaseUserImplementation.java +++ b/src/main/java/restImplementation/DatabaseUserImplementation.java @@ -10,6 +10,7 @@ import java.util.Map; public class DatabaseUserImplementation { + /* public Map saveUser(User user) throws Exception { UserDao userDao = new UserDao(); Map response = new HashMap(); @@ -35,8 +36,10 @@ public class DatabaseUserImplementation { return response; } } + */ + /* public User getUser(String email, String password) throws Exception{ UserDao userDao = new UserDao(); User user1 = userDao.getUser(email); @@ -51,8 +54,9 @@ public class DatabaseUserImplementation { return null; } } + */ - + /* public Map userLogger(User user) throws Exception { UserDao userDao = new UserDao(); Map response = new HashMap(); @@ -72,8 +76,11 @@ public class DatabaseUserImplementation { } return response; } + */ + /* private String hashPassword(String plainTextPassword){ return BCrypt.hashpw(plainTextPassword,BCrypt.gensalt()); } + */ } diff --git a/src/main/java/restImplementation/UserImplementation.java b/src/main/java/restImplementation/UserImplementation.java new file mode 100644 index 0000000..f0ceb49 --- /dev/null +++ b/src/main/java/restImplementation/UserImplementation.java @@ -0,0 +1,86 @@ +package restImplementation; + +import blockchain.query.TransactionWrapper; +import database.user.User; +import database.user.UserDao; +import org.springframework.security.crypto.bcrypt.BCrypt; + +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; + +public class UserImplementation { + + public Map registerUser(User user) throws Exception { + TransactionWrapper transactionWrapper = new TransactionWrapper(); + UserDao userDao = new UserDao(); + + //CREATE USER HASH. TEMPORARY USER HASH IS : name+email+firstname+association + user.setUser_hash(hashPassword(user.getName()+user.getEmail()+user.getFirstname()+user.getAssociation())); + + //REGISTER IN BLOCKCHAIN + String[] userInfos = new String[]{user.getUser_hash(),user.getName(),user.getFirstname(),""+user.getPhone(),user.getAssociation()}; + transactionWrapper.sendTransaction("registerUser",userInfos); + + //REGISTER IN REPLICA DB FOR BI + Map response = new HashMap<>(); + User dbUser = userDao.getUser(user.getEmail()); // check if user exist + + if(dbUser != null){ + response.put("response","false"); + return response; + }else { + user.setPassword(hashPassword(user.getPassword())); + long now = Instant.now().toEpochMilli(); + user.setCreation_date(now); + user.setModification_date(now); + user.setVerified(true); + user.setApproved(false); + + userDao.addUser(user); + response.put("userHash",user.getUser_hash()); + response.put("response","true"); + return response; + } + } + + public User getUser(String email, String password) throws Exception{ + UserDao userDao = new UserDao(); + User user1 = userDao.getUser(email); + if(user1 != null){ + String hash = user1.getPassword(); + if(BCrypt.checkpw(password, hash)){ + return user1; + }else{ + return null; + } + }else { + return null; + } + } + + public Map userLogger(User user) throws Exception { + UserDao userDao = new UserDao(); + Map response = new HashMap<>(); + + User userResponse = userDao.getUser(user.getEmail()); + if(userResponse != null){ + String hash = userResponse.getPassword(); + + if(!BCrypt.checkpw(user.getPassword(), hash)){ + response.put("response","Not Allowed"); + }else{ + response.put("response","Ok"); + response.put("userHash",userResponse.getUser_hash()); + } + } else { + response.put("response","Not Exist"); + } + return response; + } + + private String hashPassword(String plainTextPassword){ + return BCrypt.hashpw(plainTextPassword,BCrypt.gensalt()); + } + +} diff --git a/src/main/java/restService/DatabaseUserResource.java b/src/main/java/restService/DatabaseUserResource.java index 7681598..461ed83 100644 --- a/src/main/java/restService/DatabaseUserResource.java +++ b/src/main/java/restService/DatabaseUserResource.java @@ -13,10 +13,11 @@ import javax.validation.Valid; import java.util.HashMap; import java.util.Map; -@RestController -@RequestMapping(value = "/api/rest/user") +//@RestController +//@RequestMapping(value = "/api/rest/user") public class DatabaseUserResource { + /* @RequestMapping(value = "/save", method = RequestMethod.POST,produces = "application/json") @ResponseStatus(HttpStatus.CREATED) public ResponseEntity saveUser(@Valid @RequestBody User user){ @@ -41,7 +42,9 @@ public class DatabaseUserResource { return ResponseEntity.status(HttpStatus.CONFLICT).body(responseS); } } + */ + /* @RequestMapping(value = "/login", method = RequestMethod.POST,produces = "application/json") @ResponseStatus(HttpStatus.OK) public ResponseEntity login(@Valid @RequestBody User user){ @@ -75,7 +78,9 @@ public class DatabaseUserResource { return ResponseEntity.status(HttpStatus.CONFLICT).body(responseS); } } + */ + /* @PostMapping(value = "/get", produces = "application/json") @ResponseBody public ResponseEntity getUser(@RequestBody User user){ @@ -94,11 +99,14 @@ public class DatabaseUserResource { return new ResponseEntity(e.getMessage(), HttpStatus.CONFLICT); } } + */ + /* @PostMapping(value = "/update") @ResponseStatus(HttpStatus.OK) public ResponseEntity updateUser(@RequestBody User user){ return new ResponseEntity(null, HttpStatus.OK); } + */ } diff --git a/src/main/java/restService/TransactionResource.java b/src/main/java/restService/TransactionResource.java new file mode 100644 index 0000000..74a68d9 --- /dev/null +++ b/src/main/java/restService/TransactionResource.java @@ -0,0 +1,10 @@ +package restService; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value = "/api/rest/transaction") +public class TransactionResource { + +} diff --git a/src/main/java/restService/UserResource.java b/src/main/java/restService/UserResource.java new file mode 100644 index 0000000..f27837e --- /dev/null +++ b/src/main/java/restService/UserResource.java @@ -0,0 +1,98 @@ +package restService; + +import database.user.User; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import restImplementation.UserImplementation; + +import javax.validation.Valid; +import java.util.Map; + +@RestController +@RequestMapping(value = "/api/rest/user") +public class UserResource { + + + @RequestMapping(value = "/register", method = RequestMethod.POST,produces = "application/json") + @ResponseStatus(HttpStatus.CREATED) + public ResponseEntity registerUser(@Valid @RequestBody User user){ + try{ + UserImplementation userImplementation = new UserImplementation(); + Map userHashResponse = userImplementation.registerUser(user); + + if(Boolean.parseBoolean(userHashResponse.get("response"))){ + StringResponse responseS = new StringResponse("Ok",userHashResponse.get("userHash")); + return ResponseEntity.status(HttpStatus.OK).body(responseS); + }else { + StringResponse responseS = new StringResponse("User already exist"); + return ResponseEntity.status(HttpStatus.FOUND).body(responseS); + } + }catch (Exception e){ + StringResponse responseS = new StringResponse(e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseS); + } + } + + + @RequestMapping(value = "/login", method = RequestMethod.POST,produces = "application/json") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity login(@Valid @RequestBody User user){ + try{ + UserImplementation userImplementation = new UserImplementation(); + Map response = userImplementation.userLogger(user); + switch (response.get("response")){ + case "Not Exist" : { + StringResponse responseS = new StringResponse("Not Found"); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(responseS); + } + case "Not Allowed" :{ + StringResponse responseS = new StringResponse("Forbidden"); + return ResponseEntity.status(HttpStatus.FORBIDDEN).body(responseS); + } + case "" :{ + StringResponse responseS = new StringResponse("Error"); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseS); + } + case "Ok":{ + StringResponse responseS = new StringResponse("Ok",response.get("userHash")); + return ResponseEntity.status(HttpStatus.OK).body(responseS); + } + default:{ + StringResponse responseS = new StringResponse("Error"); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseS); + } + } + }catch (Exception e){ + StringResponse responseS = new StringResponse(e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(responseS); + } + } + + + @PostMapping(value = "/get", produces = "application/json") + @ResponseBody + public ResponseEntity getUser(@RequestBody User user){ + try{ + UserImplementation userImplementation = new UserImplementation(); + User response = userImplementation.getUser(user.getEmail(), user.getPassword()); + if(response != null){ + User userResponse = new User(); + userResponse.setUser_hash(response.getUser_hash()); + userResponse.setUserId(response.getUserId()); + return ResponseEntity.status(HttpStatus.OK).body(userResponse); + }else{ + return new ResponseEntity("Error", HttpStatus.NOT_FOUND); + } + }catch (Exception e){ + return new ResponseEntity(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); + } + } + + + @PostMapping(value = "/update") + @ResponseStatus(HttpStatus.OK) + public ResponseEntity updateUser(@RequestBody User user){ + return new ResponseEntity(null, HttpStatus.OK); + } +} diff --git a/src/main/java/restService/WalletResource.java b/src/main/java/restService/WalletResource.java new file mode 100644 index 0000000..ec244d1 --- /dev/null +++ b/src/main/java/restService/WalletResource.java @@ -0,0 +1,9 @@ +package restService; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value = "/api/rest/wallet") +public class WalletResource { +}