/* ** j###t ########## #### #### ** j###t ########## #### #### ** j###T "###L J###" ** ######P' ########## ######### ** ######k, ########## T######T ** ####~###L #### ** #### q###L ########## .##### ** #### \###L ########## #####" ** ** $Id$ ** ** Class History ** ** Date Name Description ** ---------|------------|----------------------------------------------- ** 24Aug98 subtle start of recorded history ** */ package key.commands; import key.*; import java.io.*; import java.util.StringTokenizer; public class Password extends Command { public static final AtomicElement[] ELEMENTS = { AtomicElement.construct( Password.class, String.class, "noPasswordMessage", AtomicElement.PUBLIC_FIELD, "the message sent when there is no password at the moment" ), AtomicElement.construct( Password.class, String.class, "currentPasswordPrompt", AtomicElement.PUBLIC_FIELD, "the prompt for the users current password" ), AtomicElement.construct( Password.class, String.class, "incorrectMessage", AtomicElement.PUBLIC_FIELD, "the message sent when the player gets the message wrong" ), AtomicElement.construct( Password.class, String.class, "newPasswordPrompt", AtomicElement.PUBLIC_FIELD, "the first prompt for the new password" ), AtomicElement.construct( Password.class, String.class, "retypePasswordPrompt", AtomicElement.PUBLIC_FIELD, "the second prompt for the new password" ), AtomicElement.construct( Password.class, String.class, "passwordChangedMessage", AtomicElement.PUBLIC_FIELD, "the message sent when the password was successfully changed" ), AtomicElement.construct( Password.class, String.class, "differentPasswords", AtomicElement.PUBLIC_FIELD, "the message sent when the password was not changed" ) }; public static final AtomicStructure STRUCTURE = new AtomicStructure( Command.STRUCTURE, ELEMENTS ); static final int MIN=3; public String noPasswordMessage = " You have no password at the moment. " + "You will now be asked to enter a password twice for your character " + "(just to make sure you didn't type it wrong).\n"; public String currentPasswordPrompt = "Please enter your current password: "; public String incorrectMessage = "That is incorrect."; public String newPasswordPrompt = "Please enter the new password: "; public String retypePasswordPrompt = "Re-type it, just in case: "; public String passwordChangedMessage = "Password changed."; public String differentPasswords = "Password NOT changed. (You didn't type the same word both times)"; public Password() { setKey( "password" ); usage = ""; } public AtomicStructure getDeclaredStructure() { return( STRUCTURE ); } public void run( Player p, StringTokenizer args, String fullLine, CategoryCommand caller, InteractiveConnection ic, Flags flags ) throws IOException { key.primitive.Password cpass = p.getActualPassword(); boolean ds = p.willSync(); if( !cpass.isSet() ) { ic.sendFeedback( noPasswordMessage ); } else { String e = ic.hiddenInput( currentPasswordPrompt ); if( !cpass.check( e ) ) { ic.sendError( incorrectMessage ); return; } } String e = ""; while( e.length() <= MIN ) { e = ic.hiddenInput( newPasswordPrompt ); if( e.length() <= MIN ) ic.sendFeedback( "Password must be longer than 3 characters." ); } String f = ic.hiddenInput( retypePasswordPrompt ); if( e.equals( f ) ) { p.setPassword( e ); ic.sendFeedback( passwordChangedMessage ); } else ic.sendFeedback( differentPasswords ); if( !ds ) p.sync(); } }