aboutsummaryrefslogtreecommitdiff
path: root/cmd/web
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/web')
-rw-r--r--cmd/web/handlers/blog.go8
-rw-r--r--cmd/web/handlers/fs.go60
-rw-r--r--cmd/web/handlers/routes.go18
-rw-r--r--cmd/web/main.go4
-rw-r--r--cmd/web/types/application.go8
5 files changed, 89 insertions, 9 deletions
diff --git a/cmd/web/handlers/blog.go b/cmd/web/handlers/blog.go
index da3aec2..d995583 100644
--- a/cmd/web/handlers/blog.go
+++ b/cmd/web/handlers/blog.go
@@ -12,15 +12,16 @@ type blogContext struct {
Name string
}
-func (ctx blogContext) index(w http.ResponseWriter, r *http.Request) {
+func (ctx *blogContext) index(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
files := []string{
- "./ui/html/base.tmpl.html",
- "./ui/html/pages/index.tmpl.html",
+ "ui/html/base.tmpl.html",
+ "ui/html/music_player.tmpl.html",
+ "ui/html/pages/index.tmpl.html",
}
compiled, err := template.ParseFiles(files...)
@@ -34,5 +35,6 @@ func (ctx blogContext) index(w http.ResponseWriter, r *http.Request) {
if err != nil {
ctx.err.Print(err.Error())
http.Error(w, "Internal Server Error", 500)
+ return
}
}
diff --git a/cmd/web/handlers/fs.go b/cmd/web/handlers/fs.go
new file mode 100644
index 0000000..96f11d0
--- /dev/null
+++ b/cmd/web/handlers/fs.go
@@ -0,0 +1,60 @@
+package handlers
+
+import (
+ "encoding/json"
+ "log"
+ "net/http"
+ "os"
+ "path/filepath"
+)
+
+type fsContext struct {
+ err *log.Logger
+ path string
+ contentType string
+}
+
+func (ctx *fsContext) readdir(w http.ResponseWriter, r *http.Request) {
+ entries, err := os.ReadDir(ctx.path)
+ if err != nil {
+ ctx.err.Print(err.Error())
+ http.Error(w, "Internal Server Error", 500)
+ return
+ }
+
+ files := make([]string, len(entries))
+ for index, value := range entries {
+ files[index] = value.Name()
+ }
+
+ w.Header().Set("Content-Type", "application/json")
+ json.NewEncoder(w).Encode(files)
+}
+
+func (ctx *fsContext) get(w http.ResponseWriter, r *http.Request) {
+ name := r.URL.Query().Get("file")
+
+ file, err := os.ReadFile(ctx.path + "/" + name)
+ if err != nil {
+ ctx.err.Print(err.Error())
+ http.Error(w, "Internal Server Error", 500)
+ return
+ }
+
+ if ctx.contentType != "" {
+ w.Header().Set("Content-Type", ctx.contentType)
+ } else {
+ switch filepath.Ext(name) {
+ case ".css":
+ w.Header().Set("Content-Type", "text/css")
+ case ".js":
+ w.Header().Set("Content-Type", "text/javascript")
+ case ".svg":
+ w.Header().Set("Content-Type", "image/svg+xml")
+ case ".png":
+ w.Header().Set("Content-Type", "image/png")
+ }
+ }
+
+ w.Write(file)
+}
diff --git a/cmd/web/handlers/routes.go b/cmd/web/handlers/routes.go
index 5c927c4..31fe401 100644
--- a/cmd/web/handlers/routes.go
+++ b/cmd/web/handlers/routes.go
@@ -6,13 +6,27 @@ import (
)
func RegisterEndpoints(app types.Application) *mux.Router {
- ctx := blogContext{
+ blog := blogContext{
err: app.Err,
Name: app.Env.Webmaster,
}
+ audio := fsContext{
+ err: app.Err,
+ path: app.AudioDir,
+ contentType: "audio/mpeg",
+ }
+ static := fsContext{
+ err: app.Err,
+ path: "static",
+ }
blogRouter := mux.NewRouter()
- blogRouter.HandleFunc("/", ctx.index)
+ blogRouter.HandleFunc("/", blog.index)
+
+ blogRouter.HandleFunc("/audio", audio.readdir)
+ blogRouter.HandleFunc("/audio/get", audio.get)
+
+ blogRouter.HandleFunc("/static/get", static.get)
return blogRouter
}
diff --git a/cmd/web/main.go b/cmd/web/main.go
index e260b42..246abeb 100644
--- a/cmd/web/main.go
+++ b/cmd/web/main.go
@@ -23,7 +23,9 @@ func main() {
if err != nil {
app.Err.Fatal("Failed to load env")
}
-
+
+ app.AudioDir = os.Getenv("audio_dir")
+
app.Env.Webmaster = os.Getenv("webmaster")
app.Env.Db.Username = os.Getenv("db_user")
app.Env.Db.Password = os.Getenv("db_pass")
diff --git a/cmd/web/types/application.go b/cmd/web/types/application.go
index c981d64..8bc6a73 100644
--- a/cmd/web/types/application.go
+++ b/cmd/web/types/application.go
@@ -7,9 +7,11 @@ import (
)
type Application struct {
- Err *log.Logger
- Info *log.Logger
+ Err *log.Logger
+ Info *log.Logger
- Env context.Environment
+ AudioDir string
+
+ Env context.Environment
}