diff --git a/assets/template/login.html b/assets/template/login.html index 0ff8dee..8128c80 100644 --- a/assets/template/login.html +++ b/assets/template/login.html @@ -30,7 +30,7 @@
- +
diff --git a/web/auth.go b/web/auth.go index b714474..68b0b28 100644 --- a/web/auth.go +++ b/web/auth.go @@ -10,7 +10,8 @@ import ( ) const ( - userkey = "authorized_user" + userKey = "authorized_user" + nameKey = "last_login" loginKey = "login_msg" ) @@ -41,7 +42,8 @@ func login(c *gin.Context) { } // Save the username in the session - session.Set(userkey, username) + session.Set(userKey, username) + session.Set(nameKey, username) if err := session.Save(); err != nil { leftLoginMsg(c, "Failed to save session data") @@ -55,9 +57,9 @@ func login(c *gin.Context) { func logout(c *gin.Context) { session := sessions.Default(c) - user := session.Get(userkey) + user := session.Get(userKey) if user != nil { - session.Delete(userkey) + session.Delete(userKey) session.Save() } @@ -68,7 +70,7 @@ func logout(c *gin.Context) { // AuthRequired is a simple middleware to check the session func AuthRequired(c *gin.Context) { session := sessions.Default(c) - user := session.Get(userkey) + user := session.Get(userKey) if user == nil { leftLoginMsg(c, "Not authorized, login first") @@ -88,9 +90,15 @@ func loginPage(c *gin.Context) { msg = "Login first" } + username := session.Get(nameKey) + if username == nil { + username = "" + } + c.HTML(http.StatusOK, "login.html", gin.H{ "msg": msg, + "username": username, "csrfField": csrf.TemplateField(c.Request), }, ) diff --git a/web/user.go b/web/user.go index fd80851..8ff8b16 100644 --- a/web/user.go +++ b/web/user.go @@ -13,7 +13,7 @@ import ( ) const ( - userFileName = "user.db" + userFileName = "./user.db" ) type UserRecord struct { @@ -37,18 +37,27 @@ func addUser(username []byte, passwd []byte) { exist := false file, err := os.ReadFile(userFileName) - if (err == nil) && (json.Unmarshal(file, users) == nil) { - // update the existing user if it exists - for _, u := range users { - if bytes.Equal(u.User, username) { - u.Seed = seed - u.Passwd = hashed - exist = true - break - } + if err != nil { + log.Println("Failed to read user.db file", err) + goto nonexist + } + + if err = json.Unmarshal(file, &users); err != nil { + log.Println("Failed to unmarsh file", err) + goto nonexist + } + + // update the existing user if it exists + for i, u := range users { + if bytes.Equal(u.User, username) { + users[i].Seed = seed + users[i].Passwd = hashed + exist = true + break } } +nonexist: if !exist { users = append(users, UserRecord{username, seed, hashed}) }