diff options
| -rw-r--r-- | go-src/user.go | 88 | ||||
| -rw-r--r-- | go-src/utils/utils.go | 7 | ||||
| -rw-r--r-- | go-src/windowMessages.go | 15 | ||||
| -rw-r--r-- | go-src/windows.go | 44 |
4 files changed, 88 insertions, 66 deletions
diff --git a/go-src/user.go b/go-src/user.go index 1456340..78501c7 100644 --- a/go-src/user.go +++ b/go-src/user.go @@ -14,6 +14,55 @@ type User struct { Name string } +type UserProp int + +const ( + passwordProp UserProp = iota + 1 + nameProp +) + +func (u User) ValidatePassword(password string) bool { + // TODO: Implement hashing + f, _ := os.ReadFile(folderPaths.FileAtUsersFolder(u.Username)) + passHash := bytes.Split(f, []byte("\n"))[1] + return string(passHash) == password +} + +func (u User) updateProp(currentPassword string, newValue string, userProp UserProp) bool { + if !u.ValidatePassword(currentPassword) { + return false + } + var fileContents []byte + + switch userProp { + case passwordProp: + fileContents = []byte(u.Username + "\n" + newValue + "\n" + u.Name) + case nameProp: + fileContents = []byte(u.Username + "\n" + currentPassword + "\n" + newValue) + default: + return false + } + + os.WriteFile( + folderPaths.FileAtUsersFolder(u.Username), + fileContents, + 0644) + return true +} + +func (u User) UpdatePassword(oldPassword string, newPassword string) bool { + return u.updateProp(oldPassword, newPassword, passwordProp) +} + +func (u User) UpdateName(password string, newName string) bool { + return u.updateProp(password, newName, nameProp) +} + +func logoutUser() { + loggedInUser.Username = "" + loggedInUser.Name = "" +} + func createUser(data []string) { // TODO: Password hashing f, _ := os.Create(folderPaths.FileAtUsersFolder(data[0])) @@ -22,50 +71,15 @@ func createUser(data []string) { } func logInUser(username string, password string) bool { - if validatePassword(username, password) { - loggedInUser = getUser(username) + if cu := getUser(username); cu.ValidatePassword(password) { + loggedInUser = cu return true } return false } -func logoutUser() { - loggedInUser.Username = "" - loggedInUser.Name = "" -} - func getUser(username string) User { f, _ := os.ReadFile(folderPaths.FileAtUsersFolder(username)) values := bytes.Split(f, []byte("\n")) return User{string(values[0]), string(values[2])} } - -func validatePassword(username string, password string) bool { - // TODO: Implement hashing - f, _ := os.ReadFile(folderPaths.FileAtUsersFolder(username)) - passHash := bytes.Split(f, []byte("\n"))[1] - return string(passHash) == password -} - -func updatePassword(oldPassword string, newPassword string) bool { - if !validatePassword(loggedInUser.Username, oldPassword) { - return false - } - os.WriteFile( - folderPaths.FileAtUsersFolder(loggedInUser.Username), - []byte(loggedInUser.Username+"\n"+newPassword+"\n"+loggedInUser.Name), - 0644) - return true -} - -func updateName(password string, newName string) bool { - if !validatePassword(loggedInUser.Username, password) { - return false - } - os.WriteFile( - folderPaths.FileAtUsersFolder(loggedInUser.Username), - []byte(loggedInUser.Username+"\n"+password+"\n"+newName), - 0644) - loggedInUser.Name = newName - return true -} diff --git a/go-src/utils/utils.go b/go-src/utils/utils.go index a6aa08f..7b7314e 100644 --- a/go-src/utils/utils.go +++ b/go-src/utils/utils.go @@ -60,3 +60,10 @@ func (c If) Int(a, b int) int { } return b } + +func (c If) String(a, b string) string { + if c { + return a + } + return b +} diff --git a/go-src/windowMessages.go b/go-src/windowMessages.go index 21dd094..e4f2c54 100644 --- a/go-src/windowMessages.go +++ b/go-src/windowMessages.go @@ -9,17 +9,22 @@ const ( logoutNavTitle = "Logout" createChatNavTitle = "Creating a new chat" chatNavTitle = "Chats" + editPasswordNavTitle = "Editing Password" + editNameNavTitle = "Editing Name" // Help messages chatsWindowHelpMsg = "Chats page options: [(D)irect messages/(A)ccount/(L)ogout/(<) for previous page/(>) for next page/(C) for create chat/(name) for go to chat room by name/(number) for go to chat room by number/(H)elp]" chatWindowHelpMsg = "Help info" // Input names - usernameInName = "Username" - passwordInName = "Password" - nameInName = "Name" - chatNameInName = "Chat name" - chatDescInName = "Description" + usernameInName = "Username" + passwordInName = "Password" + nameInName = "Name" + chatNameInName = "Chat name" + chatDescInName = "Description" + currentPasswordInName = "Current password" + newPasswordInName = "New password" + newNameInName = "New name" // Input specifications startupWindowSpec = "[L/R]" diff --git a/go-src/windows.go b/go-src/windows.go index b88c224..7401536 100644 --- a/go-src/windows.go +++ b/go-src/windows.go @@ -237,34 +237,30 @@ func accountWindow(...string) { nextWindow := handleInputActions(input, true) if nextWindow == nil { - editI, _ := strconv.Atoi(input) - switch editI { - case 1: - pass := formWindow("Editing", accountWindow, - []formInput{ - {"Current password", inputBackSpec, nil}, - {"New password", "", stringValidPassword}, - }, + userProp, _ := strconv.Atoi(input) + inputs, updateSuccessful := []formInput{{currentPasswordInName, inputBackSpec, nil}}, false + + switch UserProp(userProp) { + case passwordProp: + values := formWindow(editPasswordNavTitle, accountWindow, + append(inputs, formInput{newPasswordInName, passwordSpec, stringValidPassword}), ) - if !updatePassword(pass[0], pass[1]) { - defer showError(invalidArgument, accountWindow) - } else { - defer accountWindow() - } - case 2: - newName := formWindow("Editing", accountWindow, - []formInput{ - {"Current password", inputBackSpec, nil}, - {"New name", "", stringValidName}, - }, + updateSuccessful = loggedInUser.UpdatePassword(values[0], values[1]) + case nameProp: + values := formWindow(editNameNavTitle, accountWindow, + append(inputs, formInput{newNameInName, nameSpec, stringValidName}), ) - if !updateName(newName[0], newName[1]) { - defer showError(invalidArgument, accountWindow) - } else { - defer accountWindow() - } + updateSuccessful = loggedInUser.UpdateName(values[0], values[1]) + loggedInUser.Name = utils.If(updateSuccessful).String(values[1], loggedInUser.Name) default: defer showError(invalidCommand, accountWindow) + return + } + + if !updateSuccessful { + defer showError(invalidArgument, accountWindow) + } else { + defer accountWindow() } } else { defer nextWindow() |
