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})
}