java-api/src/main/java/restImplementation/UserImplementation.java
2019-03-31 18:35:30 +02:00

113 lines
3.7 KiB
Java

package restImplementation;
import blockchain.query.TransactionWrapper;
import database.user.User;
import database.user.UserDao;
import org.hyperledger.fabric.sdk.BlockEvent;
import org.springframework.security.crypto.bcrypt.BCrypt;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
public class UserImplementation {
public Map<String,String> 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()));
System.out.println("user hash: "+user.getUser_hash());
//REGISTER IN BLOCKCHAIN
if(user.getPhone()==null){
user.setPhone("0000000000");
}
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<String,String> 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 void approveUser(User user) throws Exception{
TransactionWrapper transactionWrapper = new TransactionWrapper();
UserDao userDao = new UserDao();
transactionWrapper.sendTransaction("setUserPermission",new String[]{user.getUser_hash()});
userDao.approveUser(user.getEmail());
}
public void deleteUser(User user) throws Exception {
TransactionWrapper transactionWrapper = new TransactionWrapper();
transactionWrapper.sendTransaction("deleteUser",new String[]{user.getUser_hash()});
UserDao userDao = new UserDao();
userDao.deleteUser(user.getEmail());
}
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<String,String> userLogger(User user) throws Exception {
UserDao userDao = new UserDao();
Map<String,String> 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","true");
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());
}
}