aboutsummaryrefslogtreecommitdiff
path: root/go-src
diff options
context:
space:
mode:
authorSyndamia <kamen.d.mladenov@protonmail.com>2021-07-23 10:19:42 +0300
committerSyndamia <kamen.d.mladenov@protonmail.com>2021-07-23 10:19:42 +0300
commit803099c73e6b1f4a5fb84c204ebb071ee1e350b8 (patch)
tree4720a40e84fe828de8cbe48f6e4518e455311786 /go-src
parent0b281b813a9ab00d7c69eb140ab5ac2952987316 (diff)
downloadctfc-803099c73e6b1f4a5fb84c204ebb071ee1e350b8.tar
ctfc-803099c73e6b1f4a5fb84c204ebb071ee1e350b8.tar.gz
ctfc-803099c73e6b1f4a5fb84c204ebb071ee1e350b8.zip
Reworked user functions into methods, properly implemented account updating
Diffstat (limited to 'go-src')
-rw-r--r--go-src/user.go88
-rw-r--r--go-src/utils/utils.go7
-rw-r--r--go-src/windowMessages.go15
-rw-r--r--go-src/windows.go44
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()