/** * Licensed to Apereo under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright ownership. Apereo * licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at the * following location: * * <p>http://www.apache.org/licenses/LICENSE-2.0 * * <p>Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package org.apereo.portal.security; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import org.apache.commons.lang.StringUtils; import org.apereo.portal.persondir.ILocalAccountDao; import org.apereo.portal.persondir.ILocalAccountPerson; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * A utility class that demonstrates changing and locking md5 passwords in the UP_PERSON_DIR table. * The program accepts two optional flags <code>-c</code> causes the user to be created if he/she * doesn't exist. The <code>-l</code> flag causes the specified user's account to be locked. * */ @Service("passwordUpdateTool") public class CliPasswordUpdateTool implements IPasswordUpdateTool { protected final Logger logger = LoggerFactory.getLogger(getClass()); private ILocalAccountDao localAccountDao; private IPortalPasswordService portalPasswordService; @Autowired public void setLocalAccountDao(ILocalAccountDao localAccountDao) { this.localAccountDao = localAccountDao; } @Autowired public void setPortalPasswordService(IPortalPasswordService portalPasswordService) { this.portalPasswordService = portalPasswordService; } @Override @Transactional public boolean updatePassword(String user, boolean create) throws IOException { // Make sure user is specified correctly if (StringUtils.isBlank(user)) { System.err.println("You did not specify a valid user name. Please try again."); return false; } // attempt to get the account form the database ILocalAccountPerson account = this.localAccountDao.getPerson(user); if (account == null) { if (!create) { System.err.println("No such user: " + user); return false; } account = this.localAccountDao.createPerson(user); } System.out.print("Enter Password for " + user + ": "); System.out.flush(); // Needed for prompt to appear when running from Ant. final BufferedReader d = new BufferedReader(new InputStreamReader(System.in)); final String spass = d.readLine(); // update the user's password final String encryptedPassword = this.portalPasswordService.encryptPassword(spass); account.setPassword(encryptedPassword); this.localAccountDao.updateAccount(account); System.out.println("Password Updated..."); return true; } @Override @Transactional public void updatePassword(String user, String spass, boolean create) throws IOException { // Make sure user is specified correctly if (StringUtils.isBlank(user)) { throw new IllegalArgumentException( "You did not specify a valid user name. Please try again."); } // attempt to get the account form the database ILocalAccountPerson account = this.localAccountDao.getPerson(user); if (account == null) { if (!create) { throw new IllegalArgumentException("No such user: " + user); } account = this.localAccountDao.createPerson(user); } // update the user's password final String encryptedPassword = this.portalPasswordService.encryptPassword(spass); account.setPassword(encryptedPassword); this.localAccountDao.updateAccount(account); logger.info("Password Updated for: {}", user); } }