add(crust): support assets loading for webapps
This commit is contained in:
parent
e0de29c201
commit
f79e02903f
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,5 +1,6 @@
|
|||||||
/*.iml
|
/*.iml
|
||||||
/.env*
|
/.env*
|
||||||
/.cover*
|
/.cover*
|
||||||
|
/public_html
|
||||||
/build
|
/build
|
||||||
/var
|
/var
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"os"
|
"os"
|
||||||
|
"path"
|
||||||
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
@ -20,12 +21,27 @@ import (
|
|||||||
"github.com/crusttech/crust/internal/auth"
|
"github.com/crusttech/crust/internal/auth"
|
||||||
"github.com/crusttech/crust/internal/config"
|
"github.com/crusttech/crust/internal/config"
|
||||||
"github.com/crusttech/crust/internal/metrics"
|
"github.com/crusttech/crust/internal/metrics"
|
||||||
|
"github.com/crusttech/crust/internal/middleware"
|
||||||
"github.com/crusttech/crust/internal/rbac"
|
"github.com/crusttech/crust/internal/rbac"
|
||||||
"github.com/crusttech/crust/internal/routes"
|
"github.com/crusttech/crust/internal/routes"
|
||||||
"github.com/crusttech/crust/internal/subscription"
|
"github.com/crusttech/crust/internal/subscription"
|
||||||
"github.com/crusttech/crust/internal/version"
|
"github.com/crusttech/crust/internal/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Serves index.html in case the requested file isn't found (or some other os.Stat error)
|
||||||
|
func serveIndex(assetPath string, indexPath string, serve http.Handler) http.HandlerFunc {
|
||||||
|
return func(w http.ResponseWriter, r *http.Request) {
|
||||||
|
indexPage := path.Join(assetPath, indexPath)
|
||||||
|
requestedPage := path.Join(assetPath, r.URL.Path)
|
||||||
|
_, err := os.Stat(requestedPage)
|
||||||
|
if err != nil {
|
||||||
|
http.ServeFile(w, r, indexPage)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
serve.ServeHTTP(w, r)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// log to stdout not stderr
|
// log to stdout not stderr
|
||||||
log.SetOutput(os.Stdout)
|
log.SetOutput(os.Stdout)
|
||||||
@ -86,6 +102,10 @@ func main() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
r := chi.NewRouter()
|
r := chi.NewRouter()
|
||||||
|
|
||||||
|
// logging, cors and such
|
||||||
|
middleware.Mount(ctx, r, flags.http)
|
||||||
|
|
||||||
r.Route("/api", func(r chi.Router) {
|
r.Route("/api", func(r chi.Router) {
|
||||||
r.Route("/crm", func(r chi.Router) {
|
r.Route("/crm", func(r chi.Router) {
|
||||||
crm.MountRoutes(ctx, r)
|
crm.MountRoutes(ctx, r)
|
||||||
@ -96,9 +116,16 @@ func main() {
|
|||||||
r.Route("/system", func(r chi.Router) {
|
r.Route("/system", func(r chi.Router) {
|
||||||
system.MountRoutes(ctx, r)
|
system.MountRoutes(ctx, r)
|
||||||
})
|
})
|
||||||
system.MountSystemRoutes(r, flags.http)
|
middleware.MountSystemRoutes(ctx, r, flags.http)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
fileserver := http.FileServer(http.Dir("public_html"))
|
||||||
|
|
||||||
|
for _, service := range []string{"system", "messaging", "crm"} {
|
||||||
|
r.HandleFunc("/"+service+"*", serveIndex("public_html", "crm/index.html", fileserver))
|
||||||
|
}
|
||||||
|
r.HandleFunc("/*", serveIndex("public_html", "index.html", fileserver))
|
||||||
|
|
||||||
routes.Print(r)
|
routes.Print(r)
|
||||||
|
|
||||||
go http.Serve(listener, r)
|
go http.Serve(listener, r)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user