57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
//go:build !headless
|
|
// +build !headless
|
|
|
|
/*
|
|
YetAnotherToDoList
|
|
Copyright © 2023 gilex-dev gilex-dev@proton.me
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, version 3.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package server
|
|
|
|
import (
|
|
"embed"
|
|
"io/fs"
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/go-chi/chi"
|
|
)
|
|
|
|
//go:embed dist/*
|
|
var frontend embed.FS
|
|
|
|
func handleFrontend(router *chi.Mux) {
|
|
stripped, err := fs.Sub(frontend, "dist")
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
frontendFS := http.FileServer(http.FS(stripped))
|
|
router.Handle("/assets/*", frontendFS)
|
|
router.HandleFunc("/", indexHandler)
|
|
// TODO: redirect from vue to 404 page (on go/proxy server)
|
|
}
|
|
|
|
// Following Nathan Tsao's implementation on https://betterprogramming.pub/how-to-serve-a-single-page-application-using-go-4b9a38d92987
|
|
func indexHandler(w http.ResponseWriter, r *http.Request) {
|
|
// TODO: add map with path:type
|
|
if r.URL.Path == "/vite.svg" {
|
|
rawFile, _ := frontend.ReadFile("dist/vite.svg")
|
|
w.Header().Add("Content-Type", "image/svg+xml")
|
|
w.Write(rawFile)
|
|
return
|
|
}
|
|
rawFile, _ := frontend.ReadFile("dist/index.html")
|
|
w.Write(rawFile)
|
|
}
|