KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > coldcore > coloradoftp > command > impl > ftp > PassCommand


1 /**
2  * Command PASS.
3  * See FTP spec for details on the command.
4  *
5  * This implementation denies all logins but anonymous.
6  * Extend this class to perform a passowrd control.
7  */

8 package com.coldcore.coloradoftp.command.impl.ftp;
9
10 import com.coldcore.coloradoftp.command.Reply;
11 import com.coldcore.coloradoftp.command.impl.AbstractCommand;
12 import com.coldcore.coloradoftp.session.LoginState;
13 import com.coldcore.coloradoftp.session.Session;
14 import com.coldcore.coloradoftp.session.SessionAttributeName;
15 import org.apache.log4j.Logger;
16
17 public class PassCommand extends AbstractCommand {
18
19   private static Logger log = Logger.getLogger(PassCommand.class);
20   private String JavaDoc emailRegExp;
21
22
23   public PassCommand() {
24     emailRegExp = "([a-zA-Z0-9_\\-\\.]+)@([a-zA-Z0-9_\\-\\.]*)";
25   }
26
27
28   /** Get email regular expression
29    * @return Email regular expression
30    */

31   public String JavaDoc getEmailRegExp() {
32     return emailRegExp;
33   }
34
35
36   /** Set email regular expression
37    * @param emailRegExp Email regular expression
38    */

39   public void setEmailRegExp(String JavaDoc emailRegExp) {
40     this.emailRegExp = emailRegExp;
41   }
42
43
44   public Reply execute() {
45     Reply reply = getReply();
46
47     String JavaDoc password = getParameter();
48
49     Session session = getConnection().getSession();
50     LoginState loginState = (LoginState) session.getAttribute(SessionAttributeName.LOGIN_STATE);
51     if (loginState != null) {
52       log.debug("Already logged in user submits PASS command again");
53       reply.setCode("503");
54       reply.setText("Already logged in.");
55       return reply;
56     }
57
58     String JavaDoc username = (String JavaDoc) session.getAttribute(SessionAttributeName.USERNAME);
59     if (username == null) {
60       reply.setCode("503");
61       reply.setText("Send your user name.");
62       return reply;
63     }
64
65     if (password.length() == 0) {
66       log.debug("Invalid syntax of submitted password");
67       reply.setCode("501");
68       reply.setText("Send your password.");
69       return reply;
70     }
71
72     //Anonymous login (password is user's email)
73
if (username.equalsIgnoreCase("anonymous")) {
74       if (checkRegExp(password, emailRegExp)) {
75         log.debug("Anonymous login successful for username: "+username+" ("+password+")");
76         session.setAttribute(SessionAttributeName.LOGIN_STATE, LoginState.ANONYMOUS);
77         session.setAttribute(SessionAttributeName.PASSWORD, password);
78         reply.setCode("230");
79         reply.setText("User logged in, proceed.");
80         return reply;
81       } else {
82         log.debug("Anonymous login failed for username: "+username+" ("+password+")");
83         reply.setCode("530");
84         reply.setText("Not logged in.");
85         return reply;
86       }
87     }
88
89     //Regular login
90
if (checkLogin(username, password)) {
91       log.debug("Login successful for username: "+username);
92       session.setAttribute(SessionAttributeName.LOGIN_STATE, LoginState.REGULAR);
93       /* For security reasons password is not stored into the session */
94       reply.setCode("230");
95       reply.setText("User logged in, proceed.");
96       return reply;
97     }
98
99     //Login failed
100
log.debug("Login failed for username: "+username);
101     reply.setCode("530");
102     reply.setText("Not logged in.");
103     return reply;
104   }
105
106
107   /** Test user login.
108    * This implementation always returns FALSE.
109    * @param username Username
110    * @param password Password
111    * @return TRUE if login is OK, FALSE otherwise
112    */

113   protected boolean checkLogin(String JavaDoc username, String JavaDoc password) {
114     return false;
115   }
116 }
117
Popular Tags