diff --git a/addressbook.txt b/addressbook.txt new file mode 100644 index 000000000..1a42da140 --- /dev/null +++ b/addressbook.txt @@ -0,0 +1,11 @@ + + + + John Doe + 98765432 + johnd@gmail.com +
311, Clementi Ave 2, #02-25
+ owesMoney + friends +
+
diff --git a/docs/images/shreyaskp.png b/docs/images/ShreyasKp.png similarity index 100% rename from docs/images/shreyaskp.png rename to docs/images/ShreyasKp.png diff --git a/passwordStorage.txt b/passwordStorage.txt index 5985cd738..7472126b4 100644 --- a/passwordStorage.txt +++ b/passwordStorage.txt @@ -1,2 +1,2 @@ -hqp -795402416 +hqp 834283274 po -1367640577 diff --git a/src/passwordUpdater.java b/src/passwordUpdater.java deleted file mode 100644 index ec79eb3ff..000000000 --- a/src/passwordUpdater.java +++ /dev/null @@ -1,101 +0,0 @@ -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.Scanner; - -public class passwordUpdater { - - public static void main(String args[]) throws IOException { - - Scanner console = new Scanner(System.in); - boolean hasUpdatedPassword = false; - int wrongPasswordCounter=5; - while(!hasUpdatedPassword) { - System.out.print("Enter Current Password : "); - String currentPassword = console.nextLine(); - int enteredCurrentPassword = currentPassword.hashCode(); - - - File originalFile = new File("passwordStorage.txt"); - BufferedReader br = new BufferedReader(new FileReader(originalFile)); - - File tempFile = new File("tempfile.txt"); - PrintWriter pw = new PrintWriter(new FileWriter(tempFile)); - - String line = null; - int numberOfPasswords = 2; - - while (numberOfPasswords > 0) { - line = br.readLine(); - String storedCurrPassword = line.substring(line.lastIndexOf(" ") + 1, line.length()); - - if (storedCurrPassword.equals(Integer.toString(enteredCurrentPassword))) { - System.out.print("Enter New Alphanumeric Password: "); - boolean isValidPassword = false; - String newPassword = null; - while (!isValidPassword) { - String newEnteredPassword = console.nextLine(); - int enteredNewPassword= newEnteredPassword.hashCode(); - if(storedCurrPassword.equals(Integer.toString(enteredNewPassword))){ - System.out.println("Your new password cannot be the same as your old password. Please try again."); - System.out.print("Enter New Alphanumeric Password: "); - } - else if (newEnteredPassword.matches(".*\\d+.*") && !newEnteredPassword.matches(".*[a-zA-Z]+.*")) { - System.out.println("Your new password must contain at least one alphabet. Please try again."); - System.out.print("Enter New Alphanumeric Password: "); - } else if (!newEnteredPassword.matches(".*\\d+.*") && newEnteredPassword.matches(".*[a-zA-Z]+.*")) { - System.out.println("Your new password must contain at least one number. Please try again."); - System.out.print("Enter New Alphanumeric Password: "); - } else if (newEnteredPassword.matches(".*\\d+.*") && newEnteredPassword.matches(".*[a-zA-Z]+.*")) { - newPassword = newEnteredPassword; - isValidPassword = true; - } else { - System.out.println("Your new password can only be alphanumeric"); - System.out.print("Enter New Alphanumeric Password: "); - } - } - int storedNewPassword = newPassword.hashCode(); - if (storedCurrPassword != null || !storedCurrPassword.trim().isEmpty()) { - line = line.substring(0, line.lastIndexOf(" ") + 1) + Integer.toString(storedNewPassword); - System.out.println("You have updated your password to : " + newPassword); - hasUpdatedPassword = true; - } - } - pw.println(line); - pw.flush(); - numberOfPasswords--; - } - pw.close(); - br.close(); - - // Delete the original file - if (!originalFile.delete()) { - System.out.println("Could not delete file"); - return; - } - // Rename the new file to the filename the original file had. - if (!tempFile.renameTo(originalFile)) { - System.out.println("Could not rename file"); - } - if (!hasUpdatedPassword) { - System.out.println("Wrong Password. Please try again."); - if(wrongPasswordCounter==1){ - System.out.println("You have " + wrongPasswordCounter + " attempt left."); - System.out.println("System will shut down if password is incorrect"); - wrongPasswordCounter--; - } - else if (wrongPasswordCounter==0){ - System.out.println("System shutting down."); - return; - } - else { - System.out.println("You have " + wrongPasswordCounter + " attempts left."); - wrongPasswordCounter--; - } - } - } - } -} diff --git a/src/seedu/addressbook/commands/HelpCommand.java b/src/seedu/addressbook/commands/HelpCommand.java index 0318501de..292f32179 100644 --- a/src/seedu/addressbook/commands/HelpCommand.java +++ b/src/seedu/addressbook/commands/HelpCommand.java @@ -21,7 +21,8 @@ public class HelpCommand extends Command { + "\n" + ViewAllCommand.MESSAGE_USAGE + "\n" + HelpCommand.MESSAGE_USAGE + "\n" + LockCommand.MESSAGE_USAGE - + "\n" + ExitCommand.MESSAGE_USAGE; + + "\n" + ExitCommand.MESSAGE_USAGE + + "\n" + UpdatePasswordCommand.MESSAGE_USAGE; public static final String MESSAGE_PO_USAGES = FindCommand.MESSAGE_USAGE //TODO implement this to PO + "\n" + ListCommand.MESSAGE_USAGE diff --git a/src/seedu/addressbook/commands/UpdatePasswordCommand.java b/src/seedu/addressbook/commands/UpdatePasswordCommand.java new file mode 100644 index 000000000..fd8532545 --- /dev/null +++ b/src/seedu/addressbook/commands/UpdatePasswordCommand.java @@ -0,0 +1,9 @@ +package seedu.addressbook.commands; + +public class UpdatePasswordCommand extends Command { + + public static final String COMMAND_WORD = "update password"; + public static final String MESSAGE_USAGE = COMMAND_WORD + ":\n" + "Updates a password\n\t" + + "Example: " + COMMAND_WORD; + +} diff --git a/src/seedu/addressbook/ui/MainWindow.java b/src/seedu/addressbook/ui/MainWindow.java index f4d5a865b..4da8634ba 100644 --- a/src/seedu/addressbook/ui/MainWindow.java +++ b/src/seedu/addressbook/ui/MainWindow.java @@ -7,19 +7,15 @@ import javafx.scene.control.TextField; import seedu.addressbook.commands.ExitCommand; import seedu.addressbook.commands.LockCommand; -import seedu.addressbook.commands.AddCommand; -import seedu.addressbook.commands.DeleteCommand; -import seedu.addressbook.commands.ClearCommand; -import seedu.addressbook.common.Messages; import seedu.addressbook.logic.Logic; import seedu.addressbook.commands.CommandResult; import seedu.addressbook.data.person.ReadOnlyPerson; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileReader; +import java.io.*; import java.util.List; import java.util.Optional; +import java.sql.Timestamp; +import java.text.SimpleDateFormat; import static seedu.addressbook.common.Messages.*; @@ -42,12 +38,31 @@ public void setMainApp(Stoppable mainApp){ this.mainApp = mainApp; } - public boolean isHQP = false; - public boolean isPO = false; - public boolean isLocked(){ + private boolean isHQP = false; + private boolean isPO = false; + private boolean isLocked(){ return !(isHQP || isPO); } - public int wrongPasswordCounter=5; + private boolean isUpdatingPassword=false; + private boolean isLogin(){ + return (isLoginHQP || isLoginPO); + } + private boolean isLoginHQP = false; + private boolean isLoginPO = false; + private boolean isPasswordMissingAlphabet = false; + private boolean isPasswordMissingNumber = false; + private boolean isOldPassword = false; + private boolean isInvalidNewPassword(){ + return (isPasswordMissingAlphabet || isPasswordMissingNumber || isOldPassword); + } + private int wrongPasswordCounter=5; + private boolean shutDown= false; + private String loginEntered = null; + + private static Timestamp currentDAT = new Timestamp(System.currentTimeMillis()); + private SimpleDateFormat timeStampFormatter = new SimpleDateFormat("dd/MM/yyyy HHmm"); + private String outputDAT = timeStampFormatter.format(currentDAT); + private String outputDATHrs = outputDAT + "hrs"; @FXML private TextArea outputConsole; @@ -59,10 +74,24 @@ public boolean isLocked(){ void onCommand(ActionEvent event) { try { String userCommandText = commandInput.getText(); - if(isLocked()) { - File originalFile = new File("passwordStorage.txt"); - BufferedReader br = new BufferedReader(new FileReader(originalFile)); + File originalFile = new File("passwordStorage.txt"); + BufferedReader br = new BufferedReader(new FileReader(originalFile)); + + File tempFile = new File("tempfile.txt"); + PrintWriter pw = new PrintWriter(new FileWriter(tempFile)); + if(userCommandText.equals("exit")){ + mainApp.stop(); + } + else if(userCommandText.equals("lock")){ + isHQP=false; + isPO=false; + wrongPasswordCounter=5; + clearCommandInput(); + clearOutputConsole(); + display(LockCommand.MESSAGE_LOCK); + } + else if(isLocked()) { int hashedEnteredPassword= userCommandText.hashCode(); String line = null; @@ -92,54 +121,115 @@ else if (user.equals("po") && storedCurrPassword.equals(Integer.toString(hashedE numberOfPasswords--; } if(isLocked()){ - if(wrongPasswordCounter>1) { - clearCommandInput(); - clearOutputConsole(); - display("Password is incorrect. Please try again."); - display("You have " + wrongPasswordCounter + " attempts left. \n"); - display(MESSAGE_ENTER_PASSWORD); - wrongPasswordCounter--; - } - else if(wrongPasswordCounter==1){ - clearCommandInput(); - clearOutputConsole(); - display("Password is incorrect. Please try again."); - display("You have " + wrongPasswordCounter + " attempt left. \n"); - display("System will shut down if password is incorrect."); - display(MESSAGE_ENTER_PASSWORD); - wrongPasswordCounter--; + wrongPasswordShutDown(); + } + pw.close(); + br.close(); + } + else if(isHQP && userCommandText.equals("update password")){ + clearCommandInput(); + clearOutputConsole(); + display("Please enter current password : "); + isUpdatingPassword=true; + wrongPasswordCounter=5; + } + else if(isUpdatingPassword){ + clearCommandInput(); + clearOutputConsole(); + + String line = null; + + if(!isLogin()){ + int enteredCurrentPassword = userCommandText.hashCode(); + + int numberOfPasswords =2; + + while(numberOfPasswords>0) { + line = br.readLine(); + String storedCurrPassword = line.substring(line.lastIndexOf(" ") + 1, line.length()); + String user = line.substring(0,line.lastIndexOf(" ")); + + if(storedCurrPassword.equals(Integer.toString(enteredCurrentPassword))){ + loginEntered=userCommandText; + wrongPasswordCounter=5; + if (user.equals("hqp")) { + isLoginHQP = true; + display("Enter New Alphanumeric Password for HQP: "); + } + else if(user.equals("po")){ + isLoginPO = true; + display("Enter New Alphanumeric Password for PO: "); + } + break; + } + numberOfPasswords--; } - else if(wrongPasswordCounter==0){ - clearCommandInput(); - clearOutputConsole(); - display("Password is incorrect. System is shutting down."); - mainApp.stop(); + pw.close(); + br.close(); + + if(!isLogin()){ + wrongPasswordShutDown(); + if (shutDown){ + mainApp.stop(); + } } } + else{ + passwordValidityChecker(userCommandText); + existingPassword(userCommandText); + if(!isInvalidNewPassword()) { //TODO problem updating password + int storedNewPassword = userCommandText.hashCode(); + if (isLoginHQP) { + line = br.readLine(); + line = line.substring(0, line.lastIndexOf(" ") + 1) + Integer.toString(storedNewPassword); + pw.println(line); //TODO loop this + pw.flush(); + line = br.readLine(); + pw.println(line); + pw.flush(); + display("You have updated HQP password to : " + userCommandText); + isUpdatingPassword = false; + isLoginHQP = false; + } else if (isLoginPO) { + line = br.readLine(); //TODO loop this 2 + pw.println(line); + pw.flush(); + line = br.readLine(); + line = line.substring(0, line.lastIndexOf(" ") + 1) + Integer.toString(storedNewPassword); + pw.println(line); + pw.flush(); + display("You have updated PO password to : " + userCommandText); + isUpdatingPassword = false; + isLoginHQP = false; + } + pw.close(); + br.close(); + + if (!originalFile.delete()) { + display("Could not delete file"); + return; + } + if (!tempFile.renameTo(originalFile)) { + display("Could not rename file"); + } + } + } } + else if(isPO && isUnauthorizedPOCommand(userCommandText)){ clearCommandInput(); clearOutputConsole(); - display("You are unauthorized to " + userCommandText , "Please try a different command."); + display("You are unauthorized to " + userCommandText +".", "Please try a different command."); //TODO maybe change output message } else{ CommandResult result = logic.execute(userCommandText); - if (isExitCommand(result)) { - exitApp(); - } - else if (isLockCommand(result)) { - isHQP=false; - isPO=false; - wrongPasswordCounter=5; - displayResult(result); - clearCommandInput(); - } else { - displayResult(result); - clearCommandInput(); - } + displayResult(result); + clearCommandInput(); } + pw.close(); + br.close(); } catch (Exception e) { e.printStackTrace(); display(e.getMessage()); @@ -151,8 +241,62 @@ private void exitApp() throws Exception { mainApp.stop(); } + private void existingPassword (String newEnteredPassword){ //TODO password can be each other's password + if(loginEntered.equals(newEnteredPassword)){ + isOldPassword=true; + display("Your new password cannot be the same as your old password. Please try again."); + display("Enter New Alphanumeric Password: "); + } + } + + private void passwordValidityChecker(String newEnteredPassword){ + if (newEnteredPassword.matches(".*\\d+.*") && newEnteredPassword.matches(".*[a-zA-Z]+.*")) { + isPasswordMissingNumber =false; + isPasswordMissingAlphabet =false; + } + else if (newEnteredPassword.matches(".*\\d+.*") && !newEnteredPassword.matches(".*[a-zA-Z]+.*")) { + isPasswordMissingAlphabet =true; + display("Your new password must contain at least one alphabet. Please try again."); + display("Enter New Alphanumeric Password: "); + } else if (!newEnteredPassword.matches(".*\\d+.*") && newEnteredPassword.matches(".*[a-zA-Z]+.*")) { + isPasswordMissingNumber = true; + display("Your new password must contain at least one number. Please try again."); + display("Enter New Alphanumeric Password: "); + } else { + isPasswordMissingNumber =true; + isPasswordMissingAlphabet =true; + display("Your new password can only be alphanumeric"); + display("Enter New Alphanumeric Password: "); + } + } + private void wrongPasswordShutDown(){ + if(wrongPasswordCounter>1) { + clearCommandInput(); + clearOutputConsole(); + display("Password is incorrect. Please try again."); + display("You have " + wrongPasswordCounter + " attempts left. \n"); + display(MESSAGE_ENTER_PASSWORD); + wrongPasswordCounter--; + } + else if(wrongPasswordCounter==1){ + clearCommandInput(); + clearOutputConsole(); + display("Password is incorrect. Please try again."); + display("You have " + wrongPasswordCounter + " attempt left."); + display("System will shut down if password is incorrect."); + display(MESSAGE_ENTER_PASSWORD); + wrongPasswordCounter--; + } + else if(wrongPasswordCounter==0){ + clearCommandInput(); + clearOutputConsole(); + display("Password is incorrect. System is shutting down."); + shutDown=true; + } + } + private boolean isUnauthorizedPOCommand(String input){ - return (input.contains("add") || input.contains("delete") || input.contains("clear") || input.contains("edit")); + return (input.contains("add ") || input.contains("delete") || input.contains("clear") || input.contains("edit") || input.equals("update password")); } /** Returns true if the result given is the result of an exit command */ @@ -186,7 +330,7 @@ public void displayResult(CommandResult result) { public void displayWelcomeMessage(String version, String storageFilePath) { String storageFileInfo = String.format(MESSAGE_USING_STORAGE_FILE, storageFilePath); - display(MESSAGE_WELCOME, version, storageFileInfo + '\n', MESSAGE_ENTER_PASSWORD); + display(MESSAGE_WELCOME, version, storageFileInfo, outputDATHrs + "\n" , MESSAGE_ENTER_PASSWORD); } /**