84 lines
1.7 KiB
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
|
|
}
|