/*
** 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;
import key.primitive.DateTime;
import key.primitive.Duration;
import key.util.SMTP;
import java.io.*;
import java.net.UnknownHostException;
import java.net.ProtocolException;
import java.util.Random;
import java.util.StringTokenizer;
public class EmailSetter extends Event
{
public static final String VAR_ENTRY_NAME = "emailsetters";
public final static String EMAIL_LOG = "email";
DateTime created;
boolean resetSince;
String validationCode;
String address;
Reference player;
String ip = "";
public EmailSetter()
{
}
public void ensureInKey() throws NonUniqueKeyException,BadKeyException
{
Key.instance().ensureAndGetVarEntry( VAR_ENTRY_NAME ).addInternal( getThis() );
}
public String getName()
{
return( "EmailSetter for: " + getKey().toString() );
}
public void set( Reference p, String ad, String vc )
{
player = p;
created = new DateTime();
resetSince = true;
try
{
Player pl = (Player) p.get();
ip = pl.getLastConnectFrom();
}
catch( OutOfDateReferenceException e )
{
if( scheduledFor != null )
{
// remove from old schedule first
Key.instance().getScheduler().remove( this );
scheduledFor = null;
}
return;
}
address = ad;
validationCode = vc;
if( scheduledFor != null )
{
// remove from old schedule first
Key.instance().getScheduler().remove( this );
}
scheduledFor = DateTime.nowPlus( new Duration( 5 * 1000 * 60 ) ); // 5 minutes
Key.instance().getScheduler().add( this );
}
public void run( Daemon scheduler )
{
Player p;
try
{
p = (Player) player.get();
}
catch( OutOfDateReferenceException e )
{
cleanup();
return;
}
p.putCode( 'p', p.getName() );
p.putCode( 'i', ip );
p.putCode( 'd', created.toString() );
p.putCode( 'v', validationCode );
String cn = Key.instance().getName();
p.putCode( 'c', cn );
String ra = (String) Key.instance().getConfig().getProperty( "returnAddress" );
p.putCode( 'r', ra );
TextParagraph para = (TextParagraph) Key.instance().getConfig().getProperty( "emailForm" );
if( para != null )
{
para = (TextParagraph) Grammar.substitute( para, p.getCodes() );
try
{
SMTP mailer = new SMTP( (String) Key.instance().getConfig().getProperty( "emailServer" ) );
Log.log( EMAIL_LOG, "sending message for " + player.getKey() + ", code '" + validationCode + "'" );
mailer.send( ra, address, "[automated] Verification of " + cn + " email", para.getText() );
}
catch( ProtocolException e )
{
Log.log( EMAIL_LOG, e.toString() + " while sending email verification for player " + player.getKey() + ", address: " + address );
}
catch( UnknownHostException e )
{
Log.log( EMAIL_LOG, e.toString() + " while sending email verification for player " + player.getKey() + ", address: " + address );
}
catch( IOException e )
{
Log.log( EMAIL_LOG, e.toString() + " while sending email verification for player " + player.getKey() + ", address: " + address );
}
finally
{
cleanup();
}
}
else
cleanup();
}
private void cleanup()
{
player = null;
try
{
Key.instance().ensureAndGetVarEntry( VAR_ENTRY_NAME ).removeInternal( this.getThis() );
}
catch( Exception e )
{
System.out.println( "while removing emailsetters: " + e.toString() );
}
}
}