From c90da29b09616ddc23ed5ed8ead1631d6ce8fce8 Mon Sep 17 00:00:00 2001 From: Project_IO Date: Mon, 17 Mar 2025 18:07:44 +0900 Subject: [PATCH] feat: add version and hash --- app.go | 6 +++++ internal/middleware/cors.go | 17 +++++++++++++ internal/routes/mod.go | 3 +++ package.json | 2 +- src/App.scss | 15 +++++++++++ src/App.tsx | 40 +++++++++++++++++++----------- src/components/file-view/index.tsx | 8 ++++++ 7 files changed, 76 insertions(+), 15 deletions(-) create mode 100644 internal/middleware/cors.go diff --git a/app.go b/app.go index c098904..ed4c330 100644 --- a/app.go +++ b/app.go @@ -12,7 +12,13 @@ import ( "github.com/gin-gonic/gin" ) +var ( + hash = "unknown" + version = "unknown" +) + func main() { + fmt.Printf("Kuma Archive %s-%s\n", version, hash) command := commando.NewCommando(os.Args[1:]) cnf := config.Get() diff --git a/internal/middleware/cors.go b/internal/middleware/cors.go new file mode 100644 index 0000000..5de17f8 --- /dev/null +++ b/internal/middleware/cors.go @@ -0,0 +1,17 @@ +package middleware + +import "github.com/gin-gonic/gin" + +func CORS(ctx *gin.Context) { + ctx.Writer.Header().Set("Access-Control-Allow-Origin", ctx.Request.Header.Get("Origin")) + ctx.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") + ctx.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization") + ctx.Writer.Header().Set("Access-Control-Allow-Credentials", "true") + + if ctx.Request.Method == "OPTIONS" { + ctx.AbortWithStatus(204) + return + } + + ctx.Next() +} diff --git a/internal/routes/mod.go b/internal/routes/mod.go index 29334b5..09be457 100644 --- a/internal/routes/mod.go +++ b/internal/routes/mod.go @@ -5,12 +5,15 @@ import ( "os" "path/filepath" + "git.wh64.net/devproje/kuma-archive/internal/middleware" "git.wh64.net/devproje/kuma-archive/internal/service" "github.com/gin-contrib/static" "github.com/gin-gonic/gin" ) func New(app *gin.Engine, apiOnly bool) { + app.Use(middleware.CORS) + api := app.Group("/api") { api.GET("/path/*path", func(ctx *gin.Context) { diff --git a/package.json b/package.json index 4d448ea..251213a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "license": "MIT", "scripts": { "build:view": "tsc -b && vite build", - "build:server": "go build -o kuma-archive", + "build:server": "go build -ldflags \"-X main.version=$(jq -r .version package.json) -X main.hash=$(git rev-parse --short=6 HEAD)\" -o kuma-archive", "build": "bun run build:view && bun run build:server", "dev:view": "vite", "dev:server": "go run ./app.go daemon -d --api-only", diff --git a/src/App.scss b/src/App.scss index 5d30321..35eba0f 100644 --- a/src/App.scss +++ b/src/App.scss @@ -31,15 +31,22 @@ top: 0; left: 0; height: 100%; + display: flex; position: fixed; min-width: 300px; + flex-direction: column; transform: translateX(-100%); + justify-content: space-between; background-color: var(--nav-color); transition: transform 0.3s ease-in-out; &.open { transform: translateX(0); } + + .ka-menu-group { + width: 100%; + } .ka-menu-item { width: 100%; @@ -61,6 +68,14 @@ } } + .ka-menu-footer { + display: flex; + align-items: center; + flex-direction: row; + padding: 1rem 1.5rem; + justify-content: space-between; + } + @media (max-width: 640px) { width: 100%; } diff --git a/src/App.tsx b/src/App.tsx index dac90fa..f98a1a0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -57,7 +57,7 @@ function Dashboard() { } function Header() { - // const [open, setOpen] = useState(false); + const [open, setOpen] = useState(false); return ( ); } -// TODO: create menu modal -// function MenuView({ open, setOpen }: { open: boolean; setOpen: (value: boolean) => void }) { -// return ( -//
-// { -// setOpen(false); -// }} /> -//
-// ); -// } +function MenuView({ open, setOpen }: { open: boolean; setOpen: (value: boolean) => void }) { + return ( +
+
+
+
+ + + + + + + { + ev.preventDefault(); + setOpen(false); + }}> + + +
+
+
+ ); +} // function MenuItem({ icon, name, block }: { icon: IconName, name: string, block?: () => void }) { // return ( diff --git a/src/components/file-view/index.tsx b/src/components/file-view/index.tsx index e3c56ee..7db6d73 100644 --- a/src/components/file-view/index.tsx +++ b/src/components/file-view/index.tsx @@ -30,6 +30,14 @@ function FileView() { + { + ev.preventDefault(); + navigator.clipboard.writeText(`${document.location.origin}/api/raw${location.pathname}`) + .then(() => alert("url copied to clipboard")) + .catch(err => console.error("Failed to copy text: ", err)); + }}> + + { ev.preventDefault(); fetch(`/api/download${location.pathname}`)