@Override
  public ResponseVO isUserAuthenticated(String authString, ResponseVO response) throws IOException {
    String decodedAuth = "";
    // Header is in the format "Basic 5tyc0uiDat4"
    // We need to extract data before decoding it back to original string
    // Decode the data back to original string
    byte[] bytes = null;
    new Base64();
    bytes = Base64.decode(authString);
    decodedAuth = new String(bytes);

    String[] decodedAuths = decodedAuth.split(":");

    User user = getUserDetail(decodedAuths[0], decodedAuths[1]);
    if (user == null) {
      response.setSuccess(false);
      response.setError(new Error(222, "Invalid credentials!!"));
    } else {
      String accessToken = ApplicationUtilities.generateAccessToken(user);
      CachedObject newCachedObject = new CachedObject(user.getUuid(), accessToken, 0);
      CacheManager.putCache(newCachedObject);
      response.setSuccess(true);
      // response.setData(new LoggedInUserVO(accessToken,user.getEmailAddress()));
    }
    return response;
  }
 @Override
 public String findUserRoleNameByUserId(Long userId) {
   User user = findUserById(userId);
   if (user != null) {
     return user.getUserRole().getRole().getName();
   }
   return null;
 }
 @Override
 public User updatePassword(ResetPasswordVo rpVo) {
   CachedObject cachedObject = (CachedObject) CacheManager.getCache(rpVo.getAccessToken());
   if (cachedObject != null) {
     User user = getUserByUUID((String) cachedObject.object.toString());
     user.setPassword(rpVo.getNewPassword());
     saveUser(user);
     return user;
   }
   return null;
 }
 @Override
 public boolean isUserAuthenticated(User user, HttpSession session) {
   user = getUserDetail(user.getUsername(), user.getPassword());
   if (user != null) {
     log.info(user.getEmailAddress());
     if (session != null) {
       session.setAttribute("displayUser", user.getEmailAddress());
     }
     return true;
   }
   return false;
 }
 @Override
 public String validateOTPAndGenerateAccessToken(String otp) {
   CachedObject cachedObject = (CachedObject) CacheManager.getCache(otp);
   if (cachedObject != null) {
     User user = getUserByUUID((String) cachedObject.object.toString());
     String accessToken = ApplicationUtilities.generateAccessToken(user);
     CachedObject newCachedObject = new CachedObject(user.getUuid(), accessToken, 10);
     CacheManager.putCache(newCachedObject);
     return accessToken;
   }
   return null;
 }
 @Override
 public boolean generateOTP(String emailAddress, String mobileNumber) {
   User user = null;
   if (!StringUtils.isNullOrEmpty(emailAddress)) {
     user = getUserByEmailAddress(emailAddress);
   }
   if (!StringUtils.isNullOrEmpty(mobileNumber)) {
     user = getUserByMobileNumber(mobileNumber);
   }
   if (user != null) {
     String otp = Otp.generate(6);
     CachedObject cachedObject = new CachedObject(user.getUuid(), otp, 10);
     CacheManager.putCache(cachedObject);
     log.info("Generated otp is " + otp);
     CachedObject o = (CachedObject) CacheManager.getCache(otp);
     log.info("from cache " + (String) o.object.toString());
     // notificationService.sendEmail("*****@*****.**", "One time password",otp);
     return true;
   }
   return false;
 }
 @Override
 public ResponseVO isUserAuthenticated(DoLoginVo doLoginVo, ResponseVO response) {
   User user = getUserDetail(doLoginVo.getAuthString());
   List<AssignedTest> assignedTests = null;
   if (user != null) {
     UserProfile profile = getUserProfileByUUID(user.getUuid());
     if (profile != null) {
       profile.setMobileNumber(user.getMobileNumber());
       profile.setEmailAddress(user.getEmailAddress());
       profile.setUsername(user.getUsername());
       assignedTests = schoolAssesmentService.findAllAssignedTestByuser(user);
     }
     String accessToken = ApplicationUtilities.generateAccessToken(user);
     user.setAccessToken(accessToken);
     saveUser(user);
     response.setData(new LoggedInUserVO(accessToken, profile, assignedTests));
   } else {
     response.setData("Invalid Student code!!");
   }
   response.setSuccess(true);
   return response;
 }
 @Override
 public void removeAccessToken(String accessToken) {
   User user = getUserByAccessToken(accessToken);
   user.setAccessToken(null);
   saveUser(user);
 }