/*
* Created on 26.05.2005
* Author: Moritz Kroll
*/
package jplagHomepage;
import java.util.regex.Pattern;
public class JSPRequestData {
private static final String errorBegin="<font color=\"red\">";
private static final String errorEnd="</font>";
private static final String[] invalidMailProvider = { "hotmail", "yahoo", "gmail", "gmx", "web", "lycos" };
JPlagBean jplagBean=null;
private boolean understand=false;
private String understandError="";
private String username="";
private String usernameError="";
private String oldUsername="";
private String password="";
private String passwordSame="";
private String passwordError="";
private String realname="";
private String realnameError="";
private String email="";
private String emailError="";
private String altEmail="";
private String homepage="";
private String homepageError="";
private String uniSchool="";
private String uniSchoolError="";
private String reason="";
private String reasonError="";
private String notes="";
public boolean getUnderstand() { return understand; }
public void setUnderstand(boolean val) { understand=val; }
public String getUsername() { return username; }
public void setUsername(String val) { username=val; }
public String getPassword() { return password; }
public void setPassword(String val) { password=val; }
public String getPasswordSame() { return passwordSame; }
public void setPasswordSame(String val) { passwordSame=val; }
public String getRealname() { return realname; }
public void setRealname(String val) { realname = val; }
public String getEmail() { return email; }
public void setEmail(String val) { email = val; }
public String getAltEmail() { return altEmail; }
public void setAltEmail(String val) { altEmail = val; }
public String getHomepage() { return homepage; }
public void setHomepage(String val) { homepage = val; }
public String getUniSchool() { return uniSchool; }
public void setUniSchool(String val) { uniSchool = val; }
public String getReason() { return reason; }
public void setReason(String val) { reason = val; }
public String getNotes() { return notes; }
public void setNotes(String val) { notes = val; }
private static String error(String str) {
return errorBegin + str + errorEnd;
}
private static String checkString(String str,String name) {
if(str!=null && str.length()!=0) return "";
return error("You have to provide " + name + "!");
}
private JPlagBean getJPlagBean() {
if(jplagBean==null) jplagBean = new JPlagBean();
return jplagBean;
}
public boolean checkUnderstand() {
if(understand) {
understandError = "";
return true;
}
else {
understandError = error("You have to acknowledge this statement!");
return false;
}
}
public String getUnderstandError() {
return understandError;
}
public boolean checkUsername() {
usernameError=checkString(username,"an username");
if(usernameError.length()!=0) return false;
if(!Pattern.matches("^[\\w\\@\\.]+$",username)) {
usernameError=error("The username may only consist of the "
+ "following characters: 'A'-'Z', 'a'-'z', '0'-'9', '@' "
+ "and '.'");
return false;
}
if(oldUsername!=username)
{
usernameError=getJPlagBean().existsUsername(username);
if(usernameError.length()!=0)
{
usernameError=error(usernameError);
return false;
}
oldUsername=username;
}
return true;
}
public String getUsernameError() {
return usernameError;
}
public boolean checkPassword() {
if(password!=null && passwordSame!=null && password.length()>0)
{
if(password.length()>=6)
{
if(passwordSame.length()>0)
{
if(password.equals(passwordSame))
{
if(!password.equals(username))
{
if(!password.equals("123456") && !password.toLowerCase().equals("password"))
{
passwordError="";
return true;
}
else passwordError = error("Very funny... please choose a sensible password.");
}
else passwordError = error("Username and password are identical! " +
"They must be different!");
}
else passwordError=error("The passwords are not equal! " +
"Please retype!");
}
else passwordError=error("You must provide the same password " +
"two times!");
}
else passwordError=error("The password is too short! " +
"It must have at least 6 characters!");
}
else passwordError=error("You have to provide a password!");
password="";
passwordSame="";
return false;
}
public String getPasswordError() {
return passwordError;
}
public boolean checkRealname() {
realnameError=checkString(realname,"a real name");
if(realnameError.length()!=0) return false;
String tokens[]=realname.split(" ");
if(tokens.length<2) {
realnameError=error("You have to provide a fore- <b>and</b> surename!");
return false;
}
return true;
}
public String getRealnameError() {
return realnameError;
}
/*
* Email verification pattern for RFC 2822 by Les Hazlewood:
* http://www.leshazlewood.com/?p=5
*/
/*
* RFC 2822 token definitions for valid email - only used together to form a java Pattern object:
*/
private static final String sp = "!#$%&'*+-/=?^_`{|}~";
private static final String atext = "[a-zA-Z0-9" + sp + "]";
private static final String atom = atext + "+"; //one or more atext chars
private static final String dotAtom = "\\." + atom;
private static final String localPart = atom + "(" + dotAtom + ")*"; //one atom followed by 0 or more dotAtoms.
/*
* RFC 1035 tokens for domain names:
*/
private static final String letter = "[a-zA-Z]";
private static final String letDig = "[a-zA-Z0-9]";
private static final String letDigHyp = "[a-zA-Z0-9-]";
public static final String rfcLabel = letDig + letDigHyp + "{0,61}" + letDig;
private static final String domain = rfcLabel + "(\\." + rfcLabel + ")*\\." + letter + "{2,6}";
/*
* Combined together, these form the allowed email regexp allowed by RFC 2822:
*/
private static final String addrSpec = "^" + localPart + "@" + domain + "$";
public static final Pattern VALID_EMAIL_PATTERN = Pattern.compile( addrSpec );
public boolean checkEmail() {
emailError=checkString(email,"a primary email address");
if(emailError.length()!=0) return false;
if(VALID_EMAIL_PATTERN.matcher(email).matches())
{
String tokens[]=email.split("@");
String tokens2[]=tokens[1].split("\\.");
if(tokens2.length>=2)
{
String lowermail=tokens2[tokens2.length-2].toLowerCase();
for(int i=0;i<invalidMailProvider.length;i++) {
if(invalidMailProvider[i].equals(lowermail))
{
emailError=error(invalidMailProvider[i] +
" will not be accepted!");
return false;
}
}
return true;
}
}
emailError=error(email + " is not a valid email" +
" address!");
return false;
}
public String getEmailError() {
return emailError;
}
public boolean checkUniSchool() {
uniSchoolError = checkString(uniSchool, "an university or school");
return uniSchoolError.length()==0;
}
public String getUniSchoolError() {
return uniSchoolError;
}
public boolean checkHomepage() {
homepageError = checkString(homepage, "an official web page showing your email address");
return homepageError.length()==0;
}
public String getHomepageError() {
return homepageError;
}
public boolean checkReason() {
reasonError=checkString(reason,"a reason for using JPlag");
return reasonError.length()==0;
}
public String getReasonError() {
return reasonError;
}
public boolean checkAll() {
return checkUnderstand() & checkUsername() & checkPassword() & checkRealname()
& checkEmail() & checkUniSchool() & checkHomepage() & checkReason();
}
public String sendRequest() {
String str=getJPlagBean().requestAccount(this);
if(str==null || str.length()==0) str="Account requested, check your" +
" mails for verification (the mail delivery could need some" +
" time depending on the providers)!";
return str;
}
/**
* This is a workaround to allow the user to clear out fields...
* Stupid JSP spec...
*/
public void setReset(String ignore) {
understand=false;
username="";
password="";
passwordSame="";
realname="";
email="";
altEmail="";
homepage="";
uniSchool="";
reason="";
notes="";
}
}