14994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair/* 24994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * Copyright 2008 the original author or authors. 34994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * 44994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 54994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * you may not use this file except in compliance with the License. 64994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * You may obtain a copy of the License at 74994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * 84994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * http://www.apache.org/licenses/LICENSE-2.0 94994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * 104994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * Unless required by applicable law or agreed to in writing, software 114994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * distributed under the License is distributed on an "AS IS" BASIS, 124994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * See the License for the specific language governing permissions and 144994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * limitations under the License. 154994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair */ 164994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismairpackage org.mockftpserver.fake.command; 174994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair 184994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismairimport org.mockftpserver.core.command.Command; 194994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismairimport org.mockftpserver.core.command.ReplyCodes; 204994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismairimport org.mockftpserver.core.session.Session; 214994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismairimport org.mockftpserver.core.session.SessionKeys; 22bd576ae311a45a994ae6b457fb2e5bb0ffe0d6b5chrismairimport org.mockftpserver.fake.UserAccount; 234994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair 244994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair/** 254994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * CommandHandler for the USER command. Handler logic: 264994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * <ol> 274994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * <li>If the required pathname parameter is missing, then reply with 501</li> 284994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * <li>If the user account configured for the named user is not valid, then reply with 530</li> 293736b2d78b2d799ad9318e5295e2204c21e21a44chrismair * <li>If the named user does not need a password for login, then set the UserAccount and 303736b2d78b2d799ad9318e5295e2204c21e21a44chrismair * current directory in the session, and reply with 230</li> 313736b2d78b2d799ad9318e5295e2204c21e21a44chrismair * <li>Otherwise, set the username in the session and reply with 331</li> 324994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * </ol> 334994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * 344994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair * @author Chris Mair 352a0a3f946dba517a01cc26278f905156857c9c91chrismair * @version $Revision$ - $Date$ 364994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair */ 374994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismairpublic class UserCommandHandler extends AbstractFakeCommandHandler { 384994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair 394994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair protected void handle(Command command, Session session) { 404994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair String username = command.getRequiredParameter(0); 414994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair UserAccount userAccount = getServerConfiguration().getUserAccount(username); 424994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair 434994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair if (userAccount != null) { 444994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair if (!validateUserAccount(username, session)) { 454994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair return; 464994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair } 474994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair 484994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair // If the UserAccount is configured to not require password for login 494994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair if (!userAccount.isPasswordRequiredForLogin()) { 504994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair login(userAccount, session, ReplyCodes.USER_LOGGED_IN_OK, "user.loggedIn"); 514994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair return; 524994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair } 534994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair } 544994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair session.setAttribute(SessionKeys.USERNAME, username); 554994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair sendReply(session, ReplyCodes.USER_NEED_PASSWORD_OK, "user.needPassword"); 564994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair } 574994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair 584994f84c7ce59f07273c8bca16ddfc8bfbbc14d0chrismair}