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()); } }