/** * Get user password. Returns the encrypted value. * * <p> * * <pre> * If the password value is not null * password = new password * else * if user does exist * password = old password * else * password = "" * </pre> */ private String getPassword(User usr) { String name = usr.getName(); String password = usr.getPassword(); if (password != null) { password = passwordEncryptor.encrypt(password); } else { String blankPassword = passwordEncryptor.encrypt(""); if (doesExist(name)) { String key = PREFIX + name + '.' + ATTR_PASSWORD; password = userDataProp.getProperty(key, blankPassword); } else { password = blankPassword; } } return password; }
/** Save user data. Store the properties. */ public synchronized void save(User usr) throws FtpException { lazyInit(); // null value check if (usr.getName() == null) { throw new NullPointerException("User name is null."); } String thisPrefix = PREFIX + usr.getName() + '.'; // set other properties userDataProp.setProperty(thisPrefix + ATTR_PASSWORD, getPassword(usr)); String home = usr.getHomeDirectory(); if (home == null) { home = "/"; } userDataProp.setProperty(thisPrefix + ATTR_HOME, home); userDataProp.setProperty(thisPrefix + ATTR_ENABLE, usr.getEnabled()); userDataProp.setProperty( thisPrefix + ATTR_WRITE_PERM, usr.authorize(new WriteRequest()) != null); userDataProp.setProperty(thisPrefix + ATTR_MAX_IDLE_TIME, usr.getMaxIdleTime()); TransferRateRequest transferRateRequest = new TransferRateRequest(); transferRateRequest = (TransferRateRequest) usr.authorize(transferRateRequest); if (transferRateRequest != null) { userDataProp.setProperty( thisPrefix + ATTR_MAX_UPLOAD_RATE, transferRateRequest.getMaxUploadRate()); userDataProp.setProperty( thisPrefix + ATTR_MAX_DOWNLOAD_RATE, transferRateRequest.getMaxDownloadRate()); } else { userDataProp.remove(thisPrefix + ATTR_MAX_UPLOAD_RATE); userDataProp.remove(thisPrefix + ATTR_MAX_DOWNLOAD_RATE); } // request that always will succeed ConcurrentLoginRequest concurrentLoginRequest = new ConcurrentLoginRequest(0, 0); concurrentLoginRequest = (ConcurrentLoginRequest) usr.authorize(concurrentLoginRequest); if (concurrentLoginRequest != null) { userDataProp.setProperty( thisPrefix + ATTR_MAX_LOGIN_NUMBER, concurrentLoginRequest.getMaxConcurrentLogins()); userDataProp.setProperty( thisPrefix + ATTR_MAX_LOGIN_PER_IP, concurrentLoginRequest.getMaxConcurrentLoginsPerIP()); } else { userDataProp.remove(thisPrefix + ATTR_MAX_LOGIN_NUMBER); userDataProp.remove(thisPrefix + ATTR_MAX_LOGIN_PER_IP); } saveUserData(); }