From c59654fcaa141d0b9eafcb68a28f324e42184828 Mon Sep 17 00:00:00 2001 From: Fendy Date: Wed, 26 Aug 2026 23:34:30 +0800 Subject: [PATCH] feat: route registration --- internal/server/server.go | 35 +++++++++++++++++++++++++++++++++++ web/alpine.min.js | 1 + web/app.js | 1 + web/index.html | 2 ++ web/login.html | 2 ++ web/style.css | 1 + web/web.go | 6 ++++++ 7 files changed, 48 insertions(+) create mode 100644 web/alpine.min.js create mode 100644 web/app.js create mode 100644 web/index.html create mode 100644 web/login.html create mode 100644 web/style.css create mode 100644 web/web.go diff --git a/internal/server/server.go b/internal/server/server.go index 030e73a..ed8e8cd 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -3,9 +3,11 @@ package server import ( "crypto/rand" "encoding/hex" + "net/http" "sync" "time" "yoresee_dropbox/internal/store" + "yoresee_dropbox/web" ) type Server struct { @@ -36,3 +38,36 @@ func generateUUID() string { rand.Read(b) return hex.EncodeToString(b) } + +func (s *Server) Handler() http.Handler { + mux := http.NewServeMux() + + mux.HandleFunc("POST /api/login", s.handleLogin) + mux.HandleFunc("POST /api/logout", s.requireAuth(s.handleLogout)) + mux.HandleFunc("POST /api/upload", s.requireAuth(s.handleUpload)) + mux.HandleFunc("GET /api/files", s.requireAuth(s.handleListFiles)) + mux.HandleFunc("GET /api/files/{id}/download", s.requireAuth(s.handleDownload)) + mux.HandleFunc("DELETE /api/files/{id}", s.requireAuth(s.handleDeleteFile)) + mux.HandleFunc("POST /api/files/{id}/share", s.requireAuth(s.handleCreateShare)) + mux.HandleFunc("GET /api/shares", s.requireAuth(s.handleListShares)) + mux.HandleFunc("DELETE /api/shares/{id}", s.requireAuth(s.handleDeleteShare)) + + mux.HandleFunc("GET /s/{token}", s.handleShareAccess) + mux.HandleFunc("POST /s/{token}", s.handleSharePassword) + + mux.HandleFunc("GET /login", func(w http.ResponseWriter, r *http.Request) { + data, _ := web.FS.ReadFile("login.html") + w.Write(data) + }) + + mux.HandleFunc("GET /{$}", s.requireAuthPage(func(w http.ResponseWriter, r *http.Request) { + data, _ := web.FS.ReadFile("index.html") + w.Write(data) + })) + + mux.Handle("GET /style.css", http.FileServerFS(web.FS)) + mux.Handle("GET /app.js", http.FileServerFS(web.FS)) + mux.Handle("GET /alpine.min.js", http.FileServerFS(web.FS)) + + return mux +} diff --git a/web/alpine.min.js b/web/alpine.min.js new file mode 100644 index 0000000..ff7bd09 --- /dev/null +++ b/web/alpine.min.js @@ -0,0 +1 @@ +// placeholder diff --git a/web/app.js b/web/app.js new file mode 100644 index 0000000..ff7bd09 --- /dev/null +++ b/web/app.js @@ -0,0 +1 @@ +// placeholder diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..79590be --- /dev/null +++ b/web/index.html @@ -0,0 +1,2 @@ + +yDropbox

yDropbox

diff --git a/web/login.html b/web/login.html new file mode 100644 index 0000000..ae72d2f --- /dev/null +++ b/web/login.html @@ -0,0 +1,2 @@ + +Login

Login

diff --git a/web/style.css b/web/style.css new file mode 100644 index 0000000..545eb34 --- /dev/null +++ b/web/style.css @@ -0,0 +1 @@ +/* placeholder */ diff --git a/web/web.go b/web/web.go new file mode 100644 index 0000000..3ffd520 --- /dev/null +++ b/web/web.go @@ -0,0 +1,6 @@ +package web + +import "embed" + +//go:embed login.html index.html style.css app.js alpine.min.js +var FS embed.FS