From 66f843735139e727b2e489e0ae4bdf7e00937b15 Mon Sep 17 00:00:00 2001 From: juls0730 <62722391+juls0730@users.noreply.github.com> Date: Mon, 23 Sep 2024 01:21:28 -0500 Subject: [PATCH] bug fixes, half-finished admin ui, and a more --- README.md | 2 +- go.mod | 1 + go.sum | 2 + main.go | 52 ++------ middleware/admin.go | 22 ++++ middleware/route.go | 4 + models/user.go | 12 +- routes/admin.go | 172 ++++++++++++++++++++++++++ routes/auth.go | 17 +++ server.go | 41 ++++++ ui/app.vue | 4 +- ui/assets/css/main.css | 4 +- ui/bun.lockb | Bin 297787 -> 310989 bytes ui/components/Breadcrumbs.vue | 2 +- ui/components/Checkbox.vue | 2 +- ui/components/FileNav.vue | 7 +- ui/components/Nav/index.vue | 98 ++++++++++++--- ui/components/Nav/userDropdown.vue | 62 ++++++---- ui/components/Popup.vue | 2 +- ui/components/UploadPane.vue | 6 +- ui/components/vlAccordion/content.vue | 39 ++++++ ui/components/vlAccordion/index.vue | 139 +++++++++++++++++++++ ui/components/vlAccordion/item.vue | 19 +++ ui/components/vlAccordion/trigger.vue | 29 +++++ ui/layouts/admin.vue | 82 ++++++++++++ ui/middleware/admin.ts | 15 +++ ui/nuxt.config.ts | 13 +- ui/package.json | 6 +- ui/pages/admin/config/settings.vue | 10 ++ ui/pages/admin/index.vue | 156 +++++++++++++++++++++++ ui/pages/admin/users/index.vue | 92 ++++++++++++++ ui/pages/home/[...name].vue | 50 ++++---- ui/pages/login.vue | 7 +- ui/pages/signup.vue | 7 +- ui/types/user.ts | 4 +- 35 files changed, 1039 insertions(+), 141 deletions(-) create mode 100644 middleware/admin.go create mode 100644 routes/admin.go create mode 100755 ui/components/vlAccordion/content.vue create mode 100755 ui/components/vlAccordion/index.vue create mode 100755 ui/components/vlAccordion/item.vue create mode 100755 ui/components/vlAccordion/trigger.vue create mode 100644 ui/layouts/admin.vue create mode 100644 ui/middleware/admin.ts create mode 100644 ui/pages/admin/config/settings.vue create mode 100644 ui/pages/admin/index.vue create mode 100644 ui/pages/admin/users/index.vue diff --git a/README.md b/README.md index c19826f..8d62a73 100644 --- a/README.md +++ b/README.md @@ -20,5 +20,5 @@ DB_HOST=localhost:5432 DB_NAME=filething DB_USER=postgres STORAGE_PATH=data ./fi To run filething in dev mode with a hot reloading Ui server and auto rebuilding backend server, run ```BASH -DB_HOST=localhost:5432 DB_NAME=filething DB_USER=postgres STORAGE_PATH=data CompileDaemon --build="go build -tags netgo,dev -ldflags=-s" --command=./filething --exclude-dir=data/ --exclude-dir=ui. --graceful-kill +DB_HOST=localhost:5432 DB_NAME=filething DB_USER=postgres STORAGE_PATH=data CompileDaemon --build="go build -tags netgo,dev -ldflags=-s" --command=./filething --exclude-dir=data/ --exclude-dir=ui/ --graceful-kill ``` diff --git a/go.mod b/go.mod index 0865568..9502d2c 100644 --- a/go.mod +++ b/go.mod @@ -5,6 +5,7 @@ go 1.23.0 require github.com/google/uuid v1.6.0 require ( + github.com/dustin/go-humanize v1.0.1 github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/labstack/echo/v4 v4.12.0 diff --git a/go.sum b/go.sum index 85cbdf6..ff881e2 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= diff --git a/main.go b/main.go index 1c6b7d7..063f99b 100644 --- a/main.go +++ b/main.go @@ -8,11 +8,10 @@ import ( "filething/middleware" "filething/models" "filething/routes" - "filething/ui" "fmt" "net/http" "os" - "strings" + "time" "github.com/labstack/echo/v4" echoMiddleware "github.com/labstack/echo/v4/middleware" @@ -84,61 +83,32 @@ func main() { api.GET("/files/get/*", routes.GetFiles) api.GET("/files/download*", routes.GetFile) api.POST("/files/delete*", routes.DeleteFiles) + + admin := api.Group("/admin") + { + admin.Use(middleware.AdminMiddleware()) + admin.GET("/system-status", routes.SystemStatus) + admin.GET("/get-users/:page", routes.GetUsers) + admin.GET("/get-total-users", routes.GetUsersCount) + } } // redirects to the proper pages if you are trying to access one that expects you have/dont have an api key // this isnt explicitly required, but it provides a better experience than doing this same thing clientside e.Use(middleware.AuthCheckMiddleware) - // calls out to a function set by either server.go server_dev.go based on the value of the dev tag, and hosts + // calls out to a function set by either server.go server_dev.go based on the presence of the dev tag, and hosts // either the static files that get embedded into the binary in ui/embed.go or proxies the dev server that gets // run in the provided function initUi(e) - e.HTTPErrorHandler = customHTTPErrorHandler + routes.AppStartTime = time.Now().UTC() if err := e.Start(":1323"); err != nil && err != http.ErrServerClosed { fmt.Println("Error starting HTTP server:", err) } } -// Custom Error handling since Nuxt relies on the 404 page for dynamic pages we still want api routes to use the default -// error handling built into echo -func customHTTPErrorHandler(err error, c echo.Context) { - if he, ok := err.(*echo.HTTPError); ok && he.Code == http.StatusNotFound { - path := c.Request().URL.Path - - if !strings.HasPrefix(path, "/api") { - file, err := ui.DistDirFS.Open("404.html") - if err != nil { - c.Logger().Error(err) - } - - fileInfo, err := file.Stat() - if err != nil { - c.Logger().Error(err) - } - - fileBuf := make([]byte, fileInfo.Size()) - _, err = file.Read(fileBuf) - defer func() { - if err := file.Close(); err != nil { - panic(err) - } - }() - if err != nil { - c.Logger().Error(err) - panic(err) - } - - c.HTML(http.StatusNotFound, string(fileBuf)) - return - } - } - - c.Echo().DefaultHTTPErrorHandler(err, c) -} - // creates tables in the db if they dont already exist func createSchema(db *bun.DB) error { models := []interface{}{ diff --git a/middleware/admin.go b/middleware/admin.go new file mode 100644 index 0000000..440c16d --- /dev/null +++ b/middleware/admin.go @@ -0,0 +1,22 @@ +package middleware + +import ( + "filething/models" + "net/http" + + "github.com/labstack/echo/v4" +) + +func AdminMiddleware() echo.MiddlewareFunc { + return func(next echo.HandlerFunc) echo.HandlerFunc { + return func(c echo.Context) error { + user := c.Get("user").(*models.User) + + if !user.Admin { + return echo.NewHTTPError(http.StatusForbidden, "You are not an administrator") + } + + return next(c) + } + } +} diff --git a/middleware/route.go b/middleware/route.go index ec1483c..48b7553 100644 --- a/middleware/route.go +++ b/middleware/route.go @@ -41,6 +41,10 @@ func AuthCheckMiddleware(next echo.HandlerFunc) echo.HandlerFunc { return c.Redirect(http.StatusFound, "/login") } + if strings.Contains(path, "/admin") && !authenticated { + return c.Redirect(http.StatusFound, "/login") + } + return next(c) } } diff --git a/models/user.go b/models/user.go index cd4dd10..5baa656 100644 --- a/models/user.go +++ b/models/user.go @@ -1,6 +1,8 @@ package models import ( + "time" + "github.com/google/uuid" "github.com/uptrace/bun" ) @@ -18,13 +20,15 @@ type SignupData struct { type User struct { bun.BaseModel `bun:"table:users"` - ID uuid.UUID `bun:"id,pk,type:uuid,default:uuid_generate_v4()" json:"id"` - Username string `bun:"username,notnull,unique" json:"username"` - Email string `bun:"email,notnull,unique" json:"email"` - PasswordHash string `bun:"passwordHash,notnull" json:"-"` + ID uuid.UUID `bun:",pk,type:uuid,default:uuid_generate_v4()" json:"id"` + Username string `bun:",notnull,unique" json:"username"` + Email string `bun:",notnull,unique" json:"email"` + PasswordHash string `bun:",notnull" json:"-"` PlanID int64 `bun:"plan_id,notnull" json:"-"` Plan Plan `bun:"rel:belongs-to,join:plan_id=id" json:"plan"` Usage int64 `bun:"-" json:"usage"` + CreatedAt time.Time `bun:",nullzero,notnull,default:current_timestamp" json:"created_at"` + Admin bool `bin:"admin,type:bool" json:"is_admin"` } type Session struct { diff --git a/routes/admin.go b/routes/admin.go new file mode 100644 index 0000000..41606cb --- /dev/null +++ b/routes/admin.go @@ -0,0 +1,172 @@ +package routes + +import ( + "context" + "filething/models" + "fmt" + "net/http" + "runtime" + "strconv" + "time" + + "github.com/dustin/go-humanize" + "github.com/labstack/echo/v4" + "github.com/uptrace/bun" +) + +func GetUsers(c echo.Context) error { + db := c.Get("db").(*bun.DB) + + pageStr := c.Param("page") + page, err := strconv.Atoi(pageStr) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, "Invalid page number") + } + + offset := page * 30 + limit := 30 + + var users []models.User + err = db.NewSelect(). + Model(&users). + Limit(limit). + Offset(offset). + Scan(context.Background()) + if err != nil { + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to retrieve users") + } + + return c.JSON(http.StatusOK, users) +} + +func GetUsersCount(c echo.Context) error { + db := c.Get("db").(*bun.DB) + + count, err := db.NewSelect().Model(&models.User{}).Count(context.Background()) + + if err != nil { + fmt.Println(err) + return echo.NewHTTPError(http.StatusInternalServerError, "Failed to retrieve users") + } + + return c.JSON(http.StatusOK, map[string]int{"total_users": count}) +} + +// Stolen from Gitea https://github.com/go-gitea/gitea +func SystemStatus(c echo.Context) error { + updateSystemStatus() + return c.JSON(http.StatusOK, map[string]interface{}{ + "uptime": sysStatus.StartTime, + "num_goroutine": sysStatus.NumGoroutine, + "cur_mem_usage": sysStatus.MemAllocated, + "total_mem_usage": sysStatus.MemTotal, + "mem_obtained": sysStatus.MemSys, + "ptr_lookup_times": sysStatus.Lookups, + "mem_allocations": sysStatus.MemMallocs, + "mem_frees": sysStatus.MemFrees, + "cur_heap_usage": sysStatus.HeapAlloc, + "heap_mem_obtained": sysStatus.HeapSys, + "heap_mem_idle": sysStatus.HeapIdle, + "heap_mem_inuse": sysStatus.HeapInuse, + "heap_mem_release": sysStatus.HeapReleased, + "heap_objects": sysStatus.HeapObjects, + "bootstrap_stack_usage": sysStatus.StackInuse, + "stack_mem_obtained": sysStatus.StackSys, + "mspan_structures_usage": sysStatus.MSpanInuse, + "mspan_structures_obtained": sysStatus.MSpanSys, + "mcache_structures_usage": sysStatus.MSpanInuse, + "mcache_structures_obtained": sysStatus.MCacheSys, + "buck_hash_sys": sysStatus.BuckHashSys, + "gc_sys": sysStatus.GCSys, + "other_sys": sysStatus.OtherSys, + "next_gc": sysStatus.NextGC, + "last_gc_time": sysStatus.LastGCTime, + "pause_total_ns": sysStatus.PauseTotalNs, + "pause_ns": sysStatus.PauseNs, + "num_gc": sysStatus.NumGC, + }) +} + +var AppStartTime time.Time +var sysStatus struct { + StartTime string + NumGoroutine int + + // General statistics. + MemAllocated string // bytes allocated and still in use + MemTotal string // bytes allocated (even if freed) + MemSys string // bytes obtained from system (sum of XxxSys below) + Lookups uint64 // number of pointer lookups + MemMallocs uint64 // number of mallocs + MemFrees uint64 // number of frees + + // Main allocation heap statistics. + HeapAlloc string // bytes allocated and still in use + HeapSys string // bytes obtained from system + HeapIdle string // bytes in idle spans + HeapInuse string // bytes in non-idle span + HeapReleased string // bytes released to the OS + HeapObjects uint64 // total number of allocated objects + + // Low-level fixed-size structure allocator statistics. + // Inuse is bytes used now. + // Sys is bytes obtained from system. + StackInuse string // bootstrap stacks + StackSys string + MSpanInuse string // mspan structures + MSpanSys string + MCacheInuse string // mcache structures + MCacheSys string + BuckHashSys string // profiling bucket hash table + GCSys string // GC metadata + OtherSys string // other system allocations + + // Garbage collector statistics. + NextGC string // next run in HeapAlloc time (bytes) + LastGCTime string // last run time + PauseTotalNs string + PauseNs string // circular buffer of recent GC pause times, most recent at [(NumGC+255)%256] + NumGC uint32 +} + +func updateSystemStatus() { + sysStatus.StartTime = AppStartTime.Format(time.RFC3339) + + m := new(runtime.MemStats) + runtime.ReadMemStats(m) + sysStatus.NumGoroutine = runtime.NumGoroutine() + + sysStatus.MemAllocated = FileSize(int64(m.Alloc)) + sysStatus.MemTotal = FileSize(int64(m.TotalAlloc)) + sysStatus.MemSys = FileSize(int64(m.Sys)) + sysStatus.Lookups = m.Lookups + sysStatus.MemMallocs = m.Mallocs + sysStatus.MemFrees = m.Frees + + sysStatus.HeapAlloc = FileSize(int64(m.HeapAlloc)) + sysStatus.HeapSys = FileSize(int64(m.HeapSys)) + sysStatus.HeapIdle = FileSize(int64(m.HeapIdle)) + sysStatus.HeapInuse = FileSize(int64(m.HeapInuse)) + sysStatus.HeapReleased = FileSize(int64(m.HeapReleased)) + sysStatus.HeapObjects = m.HeapObjects + + sysStatus.StackInuse = FileSize(int64(m.StackInuse)) + sysStatus.StackSys = FileSize(int64(m.StackSys)) + sysStatus.MSpanInuse = FileSize(int64(m.MSpanInuse)) + sysStatus.MSpanSys = FileSize(int64(m.MSpanSys)) + sysStatus.MCacheInuse = FileSize(int64(m.MCacheInuse)) + sysStatus.MCacheSys = FileSize(int64(m.MCacheSys)) + sysStatus.BuckHashSys = FileSize(int64(m.BuckHashSys)) + sysStatus.GCSys = FileSize(int64(m.GCSys)) + sysStatus.OtherSys = FileSize(int64(m.OtherSys)) + + sysStatus.NextGC = FileSize(int64(m.NextGC)) + sysStatus.LastGCTime = time.Unix(0, int64(m.LastGC)).Format(time.RFC3339) + sysStatus.PauseTotalNs = fmt.Sprintf("%.1fs", float64(m.PauseTotalNs)/1000/1000/1000) + sysStatus.PauseNs = fmt.Sprintf("%.3fs", float64(m.PauseNs[(m.NumGC+255)%256])/1000/1000/1000) + sysStatus.NumGC = m.NumGC +} + +func FileSize(s int64) string { + return humanize.IBytes(uint64(s)) +} diff --git a/routes/auth.go b/routes/auth.go index cda6654..e704f4b 100644 --- a/routes/auth.go +++ b/routes/auth.go @@ -64,6 +64,8 @@ func LoginHandler(c echo.Context) error { return c.JSON(http.StatusOK, user) } +var firstUserCreated *bool + func SignupHandler(c echo.Context) error { var signupData models.SignupData @@ -87,11 +89,22 @@ func SignupHandler(c echo.Context) error { return c.JSON(http.StatusInternalServerError, map[string]string{"message": "An unknown error occoured!"}) } + if firstUserCreated == nil { + count, err := db.NewSelect().Model((*models.User)(nil)).Count(context.Background()) + if err != nil { + return fmt.Errorf("failed to count plans: %w", err) + } + + firstUserCreated = new(bool) + *firstUserCreated = count != 0 + } + user := &models.User{ Username: signupData.Username, Email: signupData.Email, PasswordHash: string(hash), PlanID: 1, // basic 10GB plan + Admin: !*firstUserCreated, } _, err = db.NewInsert().Model(user).Exec(context.Background()) @@ -99,6 +112,10 @@ func SignupHandler(c echo.Context) error { return c.JSON(http.StatusConflict, map[string]string{"message": "A user with that email or username already exists!"}) } + if !*firstUserCreated { + *firstUserCreated = true + } + err = db.NewSelect().Model(user).WherePK().Relation("Plan").Scan(context.Background()) if err != nil { return c.JSON(http.StatusNotFound, map[string]string{"message": "An unknown error occoured!"}) diff --git a/server.go b/server.go index 37c3bde..ba25e6c 100644 --- a/server.go +++ b/server.go @@ -5,6 +5,8 @@ package main import ( "filething/ui" + "net/http" + "strings" "github.com/labstack/echo/v4" ) @@ -12,5 +14,44 @@ import ( func init() { initUi = func(e *echo.Echo) { e.GET("/*", echo.StaticDirectoryHandler(ui.DistDirFS, false)) + + e.HTTPErrorHandler = customHTTPErrorHandler } } + +// Custom Error handling since Nuxt relies on the 404 page for dynamic pages we still want api routes to use the default +// error handling built into echo +func customHTTPErrorHandler(err error, c echo.Context) { + if he, ok := err.(*echo.HTTPError); ok && he.Code == http.StatusNotFound { + path := c.Request().URL.Path + + if !strings.HasPrefix(path, "/api") { + file, err := ui.DistDirFS.Open("404.html") + if err != nil { + c.Logger().Error(err) + } + + fileInfo, err := file.Stat() + if err != nil { + c.Logger().Error(err) + } + + fileBuf := make([]byte, fileInfo.Size()) + _, err = file.Read(fileBuf) + defer func() { + if err := file.Close(); err != nil { + panic(err) + } + }() + if err != nil { + c.Logger().Error(err) + panic(err) + } + + c.HTML(http.StatusNotFound, string(fileBuf)) + return + } + } + + c.Echo().DefaultHTTPErrorHandler(err, c) +} diff --git a/ui/app.vue b/ui/app.vue index cc25a49..548ef22 100644 --- a/ui/app.vue +++ b/ui/app.vue @@ -1,5 +1,7 @@ diff --git a/ui/assets/css/main.css b/ui/assets/css/main.css index 6a997b6..63b63d9 100644 --- a/ui/assets/css/main.css +++ b/ui/assets/css/main.css @@ -48,8 +48,10 @@ } html, body { - overflow: hidden !important; + min-height: 100vh; + overflow-x: hidden !important; background-color: rgb(var(--color-base)); + overflow-wrap: break-word; color: rgb(var(--color-text)); } diff --git a/ui/bun.lockb b/ui/bun.lockb index c2c912fa2dca3bda838971ffffc92c6e2692623f..5a7c897fd042ac01a552d1c981a2635fe1d971ef 100755 GIT binary patch delta 53752 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 delta 45715 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 Yl3K+lBuz2~Z6`qlI$x&|a|?gqKR { - {{ crumb.name }} diff --git a/ui/components/Checkbox.vue b/ui/components/Checkbox.vue index 9d6d918..311535d 100644 --- a/ui/components/Checkbox.vue +++ b/ui/components/Checkbox.vue @@ -1,6 +1,6 @@