1
0
This repository has been archived on 2026-05-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
2026-05-24 19:58:20 -07:00

66 lines
1.4 KiB
Go

package routes
import (
"io"
"log"
"mime"
"net/http"
"os"
"path"
"time"
"bakonpancakz/stickerboard/env"
)
var pathPublic = path.Join("resources", "public")
// Serve Static File from Resource Directory
func serveStaticFilename(w http.ResponseWriter, filepath string) {
// Read File from Disk
f, err := os.Open(filepath)
if err != nil {
if os.IsNotExist(err) {
w.WriteHeader(http.StatusNotFound)
return
}
log.Println("[http] Read Asset Error:", err)
w.WriteHeader(http.StatusInternalServerError)
return
}
defer f.Close()
// Determine Content-Type and Stream Contents
w.Header().Add("Content-Type", mime.TypeByExtension(path.Ext(filepath)))
io.Copy(w, f)
}
func GET_Assets_Filename(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodGet {
w.WriteHeader(http.StatusMethodNotAllowed)
return
}
f := path.Clean(r.PathValue("filename"))
if f == env.STICKERBOARD_FILENAME {
// Wait Until Stickerboard is Ready, this should only occur on startup!
if !env.StickerboardReady.Load() {
for {
if env.StickerboardReady.Load() {
break
}
time.Sleep(time.Second)
}
}
// Serve Stickerboard from Memory
env.StickerboardMtx.RLock()
w.Header().Add("Content-Type", "image/webp")
w.Write(env.Stickerboard)
env.StickerboardMtx.RUnlock()
return
}
// Serve Asset from Disk
serveStaticFilename(w, path.Join(pathPublic, f))
}