This commit is contained in:
Zhi Wang 2022-01-23 13:19:49 -05:00
parent d7e3bfd4e9
commit 85452df40f
3 changed files with 33 additions and 16 deletions

View File

@ -30,7 +30,7 @@
<img class="mb-4" src="/assets/img/keyboard.svg" alt="" width="64"> <img class="mb-4" src="/assets/img/keyboard.svg" alt="" width="64">
<div class="form-floating"> <div class="form-floating">
<input type="text" class="form-control" id="username" name="username" placeholder="User Name"> <input type="text" class="form-control" id="username" name="username" placeholder="User Name" value="{{.username}}">
<label for="username">User Name</label> <label for="username">User Name</label>
</div> </div>
<div class="form-floating"> <div class="form-floating">

View File

@ -10,7 +10,8 @@ import (
) )
const ( const (
userkey = "authorized_user" userKey = "authorized_user"
nameKey = "last_login"
loginKey = "login_msg" loginKey = "login_msg"
) )
@ -41,7 +42,8 @@ func login(c *gin.Context) {
} }
// Save the username in the session // Save the username in the session
session.Set(userkey, username) session.Set(userKey, username)
session.Set(nameKey, username)
if err := session.Save(); err != nil { if err := session.Save(); err != nil {
leftLoginMsg(c, "Failed to save session data") leftLoginMsg(c, "Failed to save session data")
@ -55,9 +57,9 @@ func login(c *gin.Context) {
func logout(c *gin.Context) { func logout(c *gin.Context) {
session := sessions.Default(c) session := sessions.Default(c)
user := session.Get(userkey) user := session.Get(userKey)
if user != nil { if user != nil {
session.Delete(userkey) session.Delete(userKey)
session.Save() session.Save()
} }
@ -68,7 +70,7 @@ func logout(c *gin.Context) {
// AuthRequired is a simple middleware to check the session // AuthRequired is a simple middleware to check the session
func AuthRequired(c *gin.Context) { func AuthRequired(c *gin.Context) {
session := sessions.Default(c) session := sessions.Default(c)
user := session.Get(userkey) user := session.Get(userKey)
if user == nil { if user == nil {
leftLoginMsg(c, "Not authorized, login first") leftLoginMsg(c, "Not authorized, login first")
@ -88,9 +90,15 @@ func loginPage(c *gin.Context) {
msg = "Login first" msg = "Login first"
} }
username := session.Get(nameKey)
if username == nil {
username = ""
}
c.HTML(http.StatusOK, "login.html", c.HTML(http.StatusOK, "login.html",
gin.H{ gin.H{
"msg": msg, "msg": msg,
"username": username,
"csrfField": csrf.TemplateField(c.Request), "csrfField": csrf.TemplateField(c.Request),
}, },
) )

View File

@ -13,7 +13,7 @@ import (
) )
const ( const (
userFileName = "user.db" userFileName = "./user.db"
) )
type UserRecord struct { type UserRecord struct {
@ -37,18 +37,27 @@ func addUser(username []byte, passwd []byte) {
exist := false exist := false
file, err := os.ReadFile(userFileName) file, err := os.ReadFile(userFileName)
if (err == nil) && (json.Unmarshal(file, users) == nil) { if err != nil {
// update the existing user if it exists log.Println("Failed to read user.db file", err)
for _, u := range users { goto nonexist
if bytes.Equal(u.User, username) { }
u.Seed = seed
u.Passwd = hashed if err = json.Unmarshal(file, &users); err != nil {
exist = true log.Println("Failed to unmarsh file", err)
break 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 { if !exist {
users = append(users, UserRecord{username, seed, hashed}) users = append(users, UserRecord{username, seed, hashed})
} }