yao/service/static.go

84 lines
1.7 KiB
Go

package service
import (
"fmt"
"net/http"
"path/filepath"
"strings"
"github.com/yaoapp/yao/data"
"github.com/yaoapp/yao/service/fs"
"github.com/yaoapp/yao/share"
)
// AppFileServer static file server
var AppFileServer http.Handler
// spaFileServers spa static file server
var spaFileServers map[string]http.Handler = map[string]http.Handler{}
// SpaRoots SPA static file server
var SpaRoots map[string]int = map[string]int{}
// XGenFileServerV1 XGen v1.0
var XGenFileServerV1 http.Handler = http.FileServer(data.XgenV1())
// AdminRoot cache
var AdminRoot = ""
// AdminRootLen cache
var AdminRootLen = 0
// SetupStatic setup static file server
func SetupStatic() error {
// SetAdmin Root
adminRoot()
if isPWA() {
AppFileServer = http.FileServer(fs.DirPWA("public"))
return nil
}
for _, root := range spaApps() {
spaFileServers[root] = http.FileServer(fs.DirPWA(filepath.Join("public", root)))
SpaRoots[root] = len(root)
}
AppFileServer = http.FileServer(fs.Dir("public"))
return nil
}
// rewrite path
func isPWA() bool {
if share.App.Static == nil {
return false
}
return share.App.Static.PWA
}
// rewrite path
func spaApps() []string {
if share.App.Static == nil {
return []string{}
}
return share.App.Static.Apps
}
// SetupAdmin setup admin static root
func adminRoot() (string, int) {
if AdminRoot != "" {
return AdminRoot, AdminRootLen
}
adminRoot := "/yao/"
if share.App.AdminRoot != "" {
root := strings.TrimPrefix(share.App.AdminRoot, "/")
root = strings.TrimSuffix(root, "/")
adminRoot = fmt.Sprintf("/%s/", root)
}
adminRootLen := len(adminRoot)
AdminRoot = adminRoot
AdminRootLen = adminRootLen
return AdminRoot, AdminRootLen
}