improved logging

This commit is contained in:
ston1th 2022-09-19 22:52:40 +02:00
commit 05b41cedce
81 changed files with 9802 additions and 279 deletions

View file

@ -3,16 +3,16 @@
package server
import (
"git.giftfish.de/ston1th/docstore/pkg/core"
"git.giftfish.de/ston1th/docstore/pkg/fs"
"git.giftfish.de/ston1th/docstore/pkg/log"
"git.giftfish.de/ston1th/docstore/pkg/otp"
"git.giftfish.de/ston1th/jwt/v3"
"html/template"
"net/http"
"path/filepath"
"strings"
"time"
"git.giftfish.de/ston1th/docstore/pkg/core"
"git.giftfish.de/ston1th/docstore/pkg/fs"
"git.giftfish.de/ston1th/docstore/pkg/otp"
"git.giftfish.de/ston1th/jwt/v3"
)
const noSuchFile = "no such file or directory"
@ -146,10 +146,7 @@ func rawHandler(ctx *Context) {
f, fi, err := ctx.Srv.FS.GetFile(path)
if err != nil {
ctx.Status(http.StatusNotFound)
err = ctx.Write([]byte(noSuchFile))
if err != nil {
log.Println("file:", err)
}
ctx.Err = ctx.Write([]byte(noSuchFile))
return
}
ctx.Response.Header().Del("Content-Security-Policy")
@ -157,6 +154,7 @@ func rawHandler(ctx *Context) {
}
func indexHandler(ctx *Context) {
log := ctx.Srv.Log
switch ctx.Method() {
case "GET":
var (
@ -166,20 +164,28 @@ func indexHandler(ctx *Context) {
)
path := ctx.Path()
if fpath, ok = hasTrimPrefix(path, core.IndexPrefix); ok {
log = log.WithValues("file", fpath)
log.V(2).Info("started indexing file")
err = scanFile(ctx.Srv, fpath)
if err != nil {
ctx.Srv.Log.Printf("index: %s", err)
log.Error(err, "error indexing file")
}
} else if fpath, ok = hasTrimPrefix(path, core.RetagPrefix); ok {
if fpath == "" {
log.V(2).Info("started retagging all files")
go func() {
err := ctx.Srv.DB.RetagAll()
if err != nil {
ctx.Srv.Log.Printf("retagAll: %s", err)
log.Error(err, "error retagging all files")
}
}()
} else {
log = log.WithValues("file", fpath)
log.V(2).Info("started retagging file")
err = ctx.Srv.DB.Retag(fpath, nil)
if err != nil {
log.Error(err, "error retagging file")
}
}
}
p, _ := filepath.Split(fpath)
@ -201,6 +207,7 @@ func indexHandler(ctx *Context) {
return
}
if m, c, ok := ctx.Srv.DB.IndexMutex.Lock(); ok {
log.V(2).Info("started indexing all files")
go func() {
defer ctx.Srv.DB.IndexMutex.Unlock()
files := ctx.Srv.FS.RecursiveFiles("/")
@ -209,14 +216,14 @@ func indexHandler(ctx *Context) {
if !ctx.Srv.DB.IsIndexed(f) {
err := scanFile(ctx.Srv, f)
if err != nil {
ctx.Srv.Log.Printf("indexAll: %s", err)
log.Error(err, "error indexing file", "file", f)
}
}
ctx.Srv.DB.IndexMutex.Inc()
}
}()
} else {
ctx.Srv.Log.Printf("indexAll: indexing already in progress: %d/%d", c, m)
log.Info("indexing of all files is already in progress", "indexed", c, "remaning", m)
}
ctx.Redirect(core.IndexURI, http.StatusFound)
}
@ -276,6 +283,7 @@ func newDirHandler(ctx *Context) {
}
func moveHandler(ctx *Context) {
log := ctx.Srv.Log
path := strings.TrimPrefix(ctx.Path(), core.MovePrefix)
mode, _, err := ctx.Srv.FS.Mode(path)
if err != nil {
@ -320,18 +328,19 @@ func moveHandler(ctx *Context) {
return
}
for _, m := range moved {
log.V(2).Info("moving file", "old", m.Old, "new", m.New)
err = ctx.Srv.DB.MoveFile(m.Old, m.New)
if err != nil {
log.Printf("move: %s: %s", m, err)
log.Error(err, "moving file failed", "old", m.Old, "new", m.New)
continue
}
log.Debugf("move: %s to %s", m.Old, m.New)
}
ctx.Redirect(newfile, http.StatusFound)
}
}
func deleteHandler(ctx *Context) {
log := ctx.Srv.Log
path := strings.TrimPrefix(ctx.Path(), core.DeletePrefix)
mode, enoent, err := ctx.Srv.FS.Mode(path)
if !enoent && err != nil {
@ -374,18 +383,21 @@ func deleteHandler(ctx *Context) {
clean := ctx.Form("clean")
if clean == "true" {
f := fs.Clean(path)
log = log.WithValues("file", f)
log.V(2).Info("deleting file from DB")
id, _, err := ctx.Srv.DB.DeleteFile(f)
if err != nil {
log.Printf("db: delete: %s %s", f, err)
log.Error(err, "delete from DB failed")
}
if id == "" {
ctx.Redirect(p, http.StatusFound)
return
}
log.Debugf("delete %s id: %s from index", f, id)
log = log.WithValues("id", id)
log.V(2).Info("deleting file from index")
err = ctx.Srv.DB.Index.Delete(id)
if err != nil {
log.Printf("index: delete: %s %s", f, err)
log.Error(err, "delete from index failed")
}
ctx.Redirect(p, http.StatusFound)
return
@ -396,17 +408,18 @@ func deleteHandler(ctx *Context) {
return
}
for _, f := range files {
log.V(2).Info("deleting file from DB", "file", f)
id, _, err := ctx.Srv.DB.DeleteFile(f)
if err != nil {
log.Printf("db: delete: %s %s", f, err)
log.Error(err, "delete from DB failed", "file", f)
}
if id == "" {
continue
}
log.Debugf("delete %s id: %s from index", f, id)
log.V(2).Info("deleting file from index", "file", f, "id", id)
err = ctx.Srv.DB.Index.Delete(id)
if err != nil {
log.Printf("index: delete: %s %s", f, err)
log.Error(err, "delete from index failed", "file", f, "id", id)
}
}
ctx.Redirect(p, http.StatusFound)
@ -488,6 +501,7 @@ func loginHandler(ctx *Context) {
Title: "Login",
BodyTitle: "Login",
}
log := ctx.Srv.Log
var data loginData
switch ctx.Method() {
case "GET":
@ -511,12 +525,12 @@ func loginHandler(ctx *Context) {
}
u, err := ctx.Srv.DB.Login(data.User, password)
if err != nil {
log.Println("login:", data.User, err)
log.Error(err, "login failed", "user", data.User)
ctx.Error("bad username or password")
return
}
if u.Secret == "" {
log.Println("login:", u.Username)
log.Info("login successful", "user", u.Username)
ctx.Login(u, ctx.Form("remember"))
ctx.Redirect(data.Referer, http.StatusFound)
return
@ -540,6 +554,7 @@ func loginTotpHandler(ctx *Context) {
Title: "TOTP Verification",
BodyTitle: "TOTP Veriftcation",
}
log := ctx.Srv.Log
switch ctx.Method() {
case "GET":
ctx.Exec()
@ -558,7 +573,7 @@ func loginTotpHandler(ctx *Context) {
return
}
ref := ctx.Referer()
log.Println("login:", u.Username)
log.Info("login successful", "user", u.Username)
ctx.Login(u, ctx.Remember())
ctx.Redirect(ref, http.StatusFound)
}
@ -598,6 +613,7 @@ func userEditHandler(ctx *Context) {
Title: "Edit User",
BodyTitle: "Edit User",
}
log := ctx.Srv.Log
u, err := ctx.Srv.DB.GetUserWithoutPassword()
if err != nil {
ctx.Error(err)
@ -622,7 +638,7 @@ func userEditHandler(ctx *Context) {
ctx.Error(err)
return
}
log.Printf("update: %s updated\n", ctx.User())
log.Info("user updated", "user", ctx.User())
ctx.Redirect(core.IndexURI, http.StatusFound)
}
}
@ -633,6 +649,7 @@ func userTotpHandler(ctx *Context) {
Title: "TOTP",
BodyTitle: "TOTP",
}
log := ctx.Srv.Log
req := otp.Request{Username: ctx.User()}
u, err := ctx.Srv.DB.GetUser()
if err != nil {
@ -686,9 +703,9 @@ func userTotpHandler(ctx *Context) {
return
}
if req.Secret == "" {
log.Printf("totp: disabled for %s\n", user)
log.Info("totp disabled", "user", user)
} else {
log.Printf("totp: enabled for %s\n", user)
log.Info("totp enabled", "user", user)
}
ctx.Redirect("/user/edit", http.StatusFound)
}
@ -701,7 +718,8 @@ func logsHandler(ctx *Context) {
BodyTitle: "Logs",
}
if ctx.Method() == "GET" {
ctx.Data.Data = ctx.Srv.Log.Logs()
// TODO remove
//ctx.Data.Data = ctx.Srv.Log.Logs()
ctx.Exec()
}
}
@ -729,6 +747,7 @@ func tagsNewHandler(ctx *Context) {
Title: "New Tag",
BodyTitle: "New Tag",
}
log := ctx.Srv.Log
switch ctx.Method() {
case "GET":
ctx.Data.Data = core.Tag{}
@ -753,7 +772,7 @@ func tagsNewHandler(ctx *Context) {
ctx.Error(err)
return
}
log.Printf("tag %s created by: %s\n", t.Name, ctx.User())
log.Info("new tag created", "user", ctx.User(), "tag", t.Name)
ctx.Redirect(core.TagsURI, http.StatusFound)
}
}
@ -764,6 +783,7 @@ func tagsEditHandler(ctx *Context) {
Title: "Edit Tag",
BodyTitle: "Edit Tag",
}
log := ctx.Srv.Log
name := ctx.Var("tag")
switch ctx.Method() {
case "GET":
@ -790,7 +810,7 @@ func tagsEditHandler(ctx *Context) {
ctx.Error(err)
return
}
log.Printf("tag %s updated by: %s\n", t.Name, ctx.User())
log.Info("tag updated", "user", ctx.User(), "tag", t.Name)
ctx.Redirect(core.TagsURI, http.StatusFound)
}
}
@ -801,6 +821,7 @@ func tagsDelHandler(ctx *Context) {
Title: "Delete Tag",
BodyTitle: "Delete Tag",
}
log := ctx.Srv.Log
name := ctx.Var("tag")
ctx.Data.Data = name
switch ctx.Method() {
@ -814,7 +835,7 @@ func tagsDelHandler(ctx *Context) {
ctx.Error(err)
return
}
log.Printf("tag %s deleted by: %s\n", name, ctx.User())
log.Info("tag deleted", "user", ctx.User(), "tag", name)
ctx.Redirect(core.TagsURI, http.StatusFound)
}
}
@ -832,11 +853,12 @@ func statsHandler(ctx *Context) {
}
func logoutHandler(ctx *Context) {
log := ctx.Srv.Log
user := ctx.User()
if user == "" {
user = ctx.Totp() + " (totp)"
}
log.Println("logout:", user)
log.Info("user logged out", "user", user)
ctx.Srv.JWT.Invalidate(&ctx.Token)
ctx.SetCookie(nil, 0)
ctx.Redirect(core.LoginURI, http.StatusFound)