From ddbfc32fb1afb743aa451116137b8ddbb255b55d Mon Sep 17 00:00:00 2001 From: Henri Burau Date: Thu, 6 Jun 2024 21:30:29 +0200 Subject: [PATCH] Add stuff --- .env | 3 ++- Dockerfile | 13 +++++++++++++ main.go | 11 ++++++++--- models/capture.go | 10 +++++++--- routes/auth_middleware.go | 9 ++++++--- routes/log_middleware.go | 15 +++++++++++++++ script/index.ts | 11 +++++++++++ views/capture/capture.templ | 2 +- views/capture/capture_templ.go | 2 +- views/components/navbar.templ | 6 +++++- views/components/navbar_templ.go | 9 +++++---- views/components/server_address.templ | 4 ++-- views/components/server_address_templ.go | 2 +- 13 files changed, 77 insertions(+), 20 deletions(-) create mode 100644 Dockerfile create mode 100644 routes/log_middleware.go diff --git a/.env b/.env index 710ffd7..be12782 100644 --- a/.env +++ b/.env @@ -1 +1,2 @@ -LISTEN_ADDR=":8080" \ No newline at end of file +LISTEN_ADDR=":8080" +DB_LOC="local.db" \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bdd6034 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM golang:1.22 AS build-stage +WORKDIR /app +COPY go.mod go.sum ./ +RUN go mod download +COPY . /app +RUN CGO_ENABLED=0 GOOS=linux go build -o /entrypoint + +FROM gcr.io/distroless/static-debian11 AS release-stage +WORKDIR / +COPY --from=build-stage /entrypoint /entrypoint +COPY --from=build-stage /app/assets /assets +EXPOSE 8080 +ENTRYPOINT ["/entrypoint"] \ No newline at end of file diff --git a/main.go b/main.go index 8612543..012e80b 100644 --- a/main.go +++ b/main.go @@ -1,6 +1,7 @@ package main import ( + "errors" "fmt" "log" "log/slog" @@ -17,12 +18,16 @@ import ( func main() { if err := godotenv.Load(); err != nil { - log.Fatal(err) + if errors.Is(err, os.ErrNotExist) { + slog.Info(".env not found using env") + } else { + log.Fatal(err) + } } router := chi.NewMux() - persistence, err := models.NewSQLitePersistence("local.db") + persistence, err := models.NewSQLitePersistence(os.Getenv("DB_LOC")) if err != nil { log.Fatal(err) } @@ -51,7 +56,7 @@ func main() { go scanner.Scan() - router.Use(routes.PathMiddleware, routes.AuthMiddleware) + router.Use(routes.LogMiddleware, routes.PathMiddleware, routes.AuthMiddleware) router.Handle("/*", public()) router.Get("/health", routes.Make(server.HandleHealth)) router.Get("/server/status", routes.Make(server.HandleServerStatus)) diff --git a/models/capture.go b/models/capture.go index ff0c47d..7c9bdb9 100644 --- a/models/capture.go +++ b/models/capture.go @@ -58,11 +58,15 @@ func (msl MapScoreList) BuildTable() *ResultTable { userMapRows := make(map[string]int) + rt.Header = append(rt.Header, make([]ResultTableHeader, len(msl))...) + for mapIndex, mapScore := range msl { - rt.Header = append(rt.Header, ResultTableHeader{ + reversedIndex := len(msl) - 1 - mapIndex + + rt.Header[reversedIndex+2] = ResultTableHeader{ Title: mapScore.Map, Subtitle: timediff.TimeDiff(mapScore.StartTime), - }) + } for _, score := range mapScore.ScoreList { if score.Ping > 0 { if _, ok := userMapRows[score.Name]; !ok { @@ -77,7 +81,7 @@ func (msl MapScoreList) BuildTable() *ResultTable { row := userMapRows[score.Name] rt.Rows[row].Total = rt.Rows[row].Total + score.Score - rt.Rows[row].Individual[mapIndex] = score.Score + rt.Rows[row].Individual[reversedIndex] = score.Score } } } diff --git a/routes/auth_middleware.go b/routes/auth_middleware.go index 3efa66f..379ee66 100644 --- a/routes/auth_middleware.go +++ b/routes/auth_middleware.go @@ -2,6 +2,7 @@ package routes import ( "context" + "errors" "log/slog" "net/http" @@ -27,10 +28,12 @@ func OnlyAuthenticatedMiddleware(next http.Handler) http.Handler { func AuthMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { session, err := getSession(r) - if err != nil { - slog.Error("error getting token", "err", err) - } username := "" + if err != nil { + if !errors.Is(err, http.ErrNoCookie) { + slog.Error("error getting token", "err", err) + } + } if session != nil { username = session.Username } diff --git a/routes/log_middleware.go b/routes/log_middleware.go new file mode 100644 index 0000000..20ba245 --- /dev/null +++ b/routes/log_middleware.go @@ -0,0 +1,15 @@ +package routes + +import ( + "log/slog" + "net/http" +) + +func LogMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + slog.Info("request", "method", r.Method, "path", r.URL.Path, "origin", r.RemoteAddr) + + next.ServeHTTP(w, r) + }) +} diff --git a/script/index.ts b/script/index.ts index b019e8f..8503a52 100644 --- a/script/index.ts +++ b/script/index.ts @@ -1 +1,12 @@ import 'htmx.org' + +export function copyToClipboard(text: string): void { + navigator.clipboard.writeText(text).then( + () => { + + }, + (er) => { + console.log("failed to write to clipboard", er) + } + ) +} diff --git a/views/capture/capture.templ b/views/capture/capture.templ index b9a263d..d7163d4 100644 --- a/views/capture/capture.templ +++ b/views/capture/capture.templ @@ -25,7 +25,7 @@ templ Capture(capture *models.Capture, table models.ResultTable) {
if len(table.Rows) >= 1 { - @Medal("1. Platz", table.Rows[0].Name, "text-yellow-600") + @Medal("1. Platz", table.Rows[0].Name, "text-yellow-400") } if len(table.Rows) >= 2 { @Medal("2. Platz", table.Rows[1].Name, "text-gray-500") diff --git a/views/capture/capture_templ.go b/views/capture/capture_templ.go index 5f7e65f..e0fe6a7 100644 --- a/views/capture/capture_templ.go +++ b/views/capture/capture_templ.go @@ -74,7 +74,7 @@ func Capture(capture *models.Capture, table models.ResultTable) templ.Component return templ_7745c5c3_Err } if len(table.Rows) >= 1 { - templ_7745c5c3_Err = Medal("1. Platz", table.Rows[0].Name, "text-yellow-600").Render(ctx, templ_7745c5c3_Buffer) + templ_7745c5c3_Err = Medal("1. Platz", table.Rows[0].Name, "text-yellow-400").Render(ctx, templ_7745c5c3_Buffer) if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/views/components/navbar.templ b/views/components/navbar.templ index 2753ba6..7044cdf 100644 --- a/views/components/navbar.templ +++ b/views/components/navbar.templ @@ -2,6 +2,7 @@ package components import "gitea.henriburau.de/haw-lan/cod4watcher/views" import "strings" +import "fmt" templ Nagivation() {
if views.Username(ctx) != "" { - { strings.ToUpper(views.Username(ctx)) } +
+ { fmt.Sprintf("%c", strings.ToUpper(views.Username(ctx))[0]) } +
+ Logout } else { Login } diff --git a/views/components/navbar_templ.go b/views/components/navbar_templ.go index 1fcfccc..75cf033 100644 --- a/views/components/navbar_templ.go +++ b/views/components/navbar_templ.go @@ -12,6 +12,7 @@ import "bytes" import "gitea.henriburau.de/haw-lan/cod4watcher/views" import "strings" +import "fmt" func Nagivation() templ.Component { return templ.ComponentFunc(func(ctx context.Context, templ_7745c5c3_W io.Writer) (templ_7745c5c3_Err error) { @@ -46,20 +47,20 @@ func Nagivation() templ.Component { return templ_7745c5c3_Err } if views.Username(ctx) != "" { - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("") + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("Logout") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } diff --git a/views/components/server_address.templ b/views/components/server_address.templ index 0b750e2..44009af 100644 --- a/views/components/server_address.templ +++ b/views/components/server_address.templ @@ -7,9 +7,9 @@ templ ServerAddress(host, port string) { { host }:{ port } - + diff --git a/views/components/server_address_templ.go b/views/components/server_address_templ.go index f20fa34..8ce3e3a 100644 --- a/views/components/server_address_templ.go +++ b/views/components/server_address_templ.go @@ -51,7 +51,7 @@ func ServerAddress(host, port string) templ.Component { if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err } - _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString("