docs: public Credentials userSignIn(Credentials credentials) throws DAOException {
              Credentials dbCreds = getUserByEmail(dao,credentials.getEmailAddress());
              if (dbCreds == null){
                  throw new DAOException(HttpStatus.SC_UNAUTHORIZED,"User Doesnt exist");
              }
              else {
                  //check if we are resetting the password
                  if(dbCreds.getValidation()!=null && dbCreds.getValidation().equals(credentials.getValidation())){
                      credentials.decryptPassword(keyManager.getPrivateKey()); //decrypt the password
                      dbCreds.setPassword(BCrypt.hashpw(credentials.getPassword(), BCrypt.gensalt(10))); //set the new password
                  }
                  //else check password
                  else {
                      String en = credentials.getPassword();
                      credentials.decryptPassword(keyManager.getPrivateKey()); //decrypt the password
                      String de = credentials.getPassword();
                      String ha = BCrypt.hashpw(de, BCrypt.gensalt(10));
                      System.out.println("Comparing passwords.\n" +
                              "Encrypted: " + en + "\n" +
                              "Decrypted: " + de + "\n" +
                              "Hashed:    " + ha + "\n" +
                              "Stored:    " + dbCreds.getPassword());
                      if (!BCrypt.checkpw(de, dbCreds.getPassword())){
                          throw new DAOException(HttpStatus.SC_UNAUTHORIZED,"User Already Exists");
                      }
                  }
  
  //              check if token is expired, if so return/set new
                  AuthTokenUtils.AuthToken token;
                  try {
                      token = new AuthTokenUtils.AuthToken(keyManager.getSymmetricKey(),dbCreds.getAuthToken());
                  } catch (AuthenticationException e) {
                      throw new DAOException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"internal error");
                  }
                  if (c.getTime().getTime() > token.expirationDate) {
                      dbCreds.setAuthToken(AuthTokenUtils.getNewToken(keyManager.getSymmetricKey(), dbCreds));
                      dao.save(dbCreds);
                  }
  
                  return dbCreds;
              }
      }