package org.dcache.auth; import java.io.Serializable; import java.security.Principal; import java.util.regex.Pattern; import static com.google.common.base.Preconditions.checkArgument; public class EmailAddressPrincipal implements Principal, Serializable { private static final long serialVersionUID = -5091924321331479809L; // Pattern based on // http://stackoverflow.com/questions/624581/what-is-the-best-java-email-address-validation-method private static final Pattern EMAIL_PATTERN = Pattern.compile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$", Pattern.CASE_INSENSITIVE); private final String _email; public EmailAddressPrincipal(String email) { checkArgument(EMAIL_PATTERN.matcher(email).matches(), "Not a valid email address"); _email = email; } @Override public String getName() { return _email; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof EmailAddressPrincipal)) { return false; } EmailAddressPrincipal that = (EmailAddressPrincipal) o; return _email.equals(that._email); } @Override public int hashCode() { return _email.hashCode(); } @Override public String toString() { return "EmailAddressPrincipal[" + "email='" + _email + ']'; } }