/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" ** ** $Id: EmailAddress.java,v 1.6 1997/07/31 14:00:18 subtle Exp subtle $ ** ** Class History ** ** Date Name Description ** ---------|------------|----------------------------------------------- ** 25Jul97 subtle added configuration ** 26Jul97 subtle set name in EDV thread. (email delay verifier) ** */ package key.primitive; import key.util.SMTP; import key.util.HTUU; import key.Event; import key.Reference; import key.EmailSetter; import key.Player; import key.Factory; import key.Key; import key.Daemon; import key.Daemon; import key.InteractiveConnection; import key.InvalidEmailException; import java.io.*; import java.net.UnknownHostException; import java.net.ProtocolException; import java.util.Random; import java.util.StringTokenizer; public class EmailAddress implements java.io.Serializable { private String validationCode; protected String validAddress; protected String address; protected Reference setter; public EmailAddress() { validationCode = null; validAddress = null; address = null; setter = null; } public String toString() { if( validAddress != null ) return( validAddress ); else return( "<not set>" ); } public String get() { return( validAddress ); } public boolean isValid() { return( validAddress != null ); } public boolean isSet() { return( address != null || validAddress != null ); } public void set( String newAddress, InteractiveConnection ic, Player p ) { // simply checks that there is something between the seperators // and that both of them (@ and .) exist in the string, somewhere. try { boolean containsAt = false; boolean containsDot = false; boolean lastWasSeperator = true; boolean firstseperator = true; StringTokenizer st = new StringTokenizer( newAddress, "@.", true ); while( st.hasMoreTokens() ) { String s = st.nextToken(); if( s.charAt( 0 ) == '@' ) { if( lastWasSeperator ) throw new InvalidEmailException(); if( !firstseperator ) throw new InvalidEmailException(); firstseperator = false; lastWasSeperator = true; containsAt = true; } else if( s.charAt( 0 ) == '.' ) { if( lastWasSeperator ) throw new InvalidEmailException(); if( firstseperator ) lastWasSeperator = false; else { lastWasSeperator = true; containsDot = true; } } else { lastWasSeperator = false; } } if( !containsAt || !containsDot || lastWasSeperator ) throw new InvalidEmailException(); } catch( InvalidEmailException e ) { ic.sendError( "That is not the correct form of an email address. Please do not use this command frivolously" ); return; } if( address != null && (setter == null || !setter.isValid()) ) { // some sort of message here saying the previous // email was never registered? ic.sendFeedback( "\nThe previous email address you set was never validated. Please do not use this command frivolously.\n" ); } validationCode = HTUU.encode( Integer.toString( new Random().nextInt() ) ); address = newAddress; if( setter == null || !setter.isValid() ) { EmailSetter es = (EmailSetter) Factory.makeAtom( EmailSetter.class, p.getName() ); try { es.ensureInKey(); } catch( Exception e ) { ic.sendError( "An error occurred while attempting to send your email: " + e.toString() ); return; } setter = es.getThis(); es = null; } ((EmailSetter)setter.get()).set( p.getThis(), address, validationCode ); ic.sendFeedback( "\nAn email will be sent to " + address + " shortly, containing the verification code that you need to make this new email address active. If you have made a mistake, please set your email address again immediately." ); } public void verify( String code, InteractiveConnection ic ) { if( address == null ) ic.sendError( "You don't have a pending email verification code" ); else if( code.equals( validationCode ) ) { validAddress = address; address = null; validationCode = null; ic.sendFeedback( "Verification code correct, your email address has been set to: " + validAddress ); } else ic.sendError( "Invalid verification code" ); } }