[add] app custom admin route support (#176)
* [add] app custom admin route support * [fix] bindata fmt * [fix] adminRoot replace bug * [fix] admin root replace bug * [fix] bindata fmt
This commit is contained in:
parent
7aa198e962
commit
800ae72e8b
11 changed files with 219 additions and 59 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -31,4 +31,5 @@ env.*.sh
|
|||
xgen/v0.9/*
|
||||
xgen/v1.0/*
|
||||
!xgen/v0.9/index.html
|
||||
!xgen/v1.0/index.html
|
||||
!xgen/v1.0/index.html
|
||||
!xgen/v1.0/umi.js
|
||||
32
Makefile
32
Makefile
|
|
@ -6,6 +6,7 @@ VETPACKAGES ?= $(shell $(GO) list ./... | grep -v /examples/)
|
|||
GOFILES := $(shell find . -name "*.go")
|
||||
VERSION := $(shell grep 'const VERSION =' share/const.go |awk '{print $$4}' |sed 's/\"//g')
|
||||
COMMIT := $(shell git log | head -n 1 | awk '{print substr($$2, 0, 12)}')
|
||||
NOW := $(shell date +"%FT%T%z")
|
||||
|
||||
# ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
|
||||
TESTFOLDER := $(shell $(GO) list ./... | grep -vE 'examples|tests*|config|widgets')
|
||||
|
|
@ -155,10 +156,9 @@ artifacts-linux: clean
|
|||
cd ../xgen-v0.9 && npm install && npm run build
|
||||
|
||||
# Building XGEN v1.0
|
||||
export XGEN_BASE=yao
|
||||
export BASE=yao
|
||||
export NODE_ENV=production
|
||||
rm -f ../xgen-v1.0/pnpm-lock.yaml
|
||||
echo "BASE=__yao_admin_root" > ../xgen-v1.0/packages/xgen/.env
|
||||
cd ../xgen-v1.0 && pnpm install && pnpm run build
|
||||
|
||||
# Packing
|
||||
|
|
@ -171,7 +171,7 @@ artifacts-linux: clean
|
|||
rm -rf .tmp/data
|
||||
|
||||
# Replace PRVERSION
|
||||
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}\"/g" share/const.go
|
||||
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-${NOW}\"/g" share/const.go
|
||||
|
||||
# Making artifacts
|
||||
mkdir -p dist
|
||||
|
|
@ -199,10 +199,9 @@ artifacts-macos: clean
|
|||
cd ../xgen-v0.9 && npm install && npm run build
|
||||
|
||||
# Building XGEN v1.0
|
||||
export XGEN_BASE=yao
|
||||
export BASE=yao
|
||||
export NODE_ENV=production
|
||||
rm -f ../xgen-v1.0/pnpm-lock.yaml
|
||||
echo "BASE=__yao_admin_root" > ../xgen-v1.0/packages/xgen/.env
|
||||
cd ../xgen-v1.0 && pnpm install && pnpm run build
|
||||
|
||||
# Packing
|
||||
|
|
@ -215,7 +214,7 @@ artifacts-macos: clean
|
|||
rm -rf .tmp/data
|
||||
|
||||
# Replace PRVERSION
|
||||
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}\"/g" share/const.go
|
||||
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-${NOW}\"/g" share/const.go
|
||||
|
||||
# Making artifacts
|
||||
mkdir -p dist
|
||||
|
|
@ -245,7 +244,7 @@ debug: clean
|
|||
|
||||
|
||||
# Replace PRVERSION
|
||||
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-debug\"/g" share/const.go
|
||||
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-${NOW}-debug\"/g" share/const.go
|
||||
|
||||
# Making artifacts
|
||||
mkdir -p dist
|
||||
|
|
@ -262,31 +261,27 @@ release: clean
|
|||
mkdir .tmp
|
||||
|
||||
# Building XGEN v0.9
|
||||
# git clone https://github.com/YaoApp/xgen.git .tmp/xgen/v0.9
|
||||
# sed -ie "s/url('\/icon/url('\/xiang\/icon/g" .tmp/xgen/v0.9/public/icon/md_icon.css
|
||||
# cd .tmp/xgen/v0.9 && npm install && npm run build
|
||||
mkdir -p .tmp/xgen/v0.9
|
||||
cp -r xgen/v0.9 .tmp/xgen/v0.9/dist
|
||||
mkdir -p .tmp/xgen/v0.9/dist
|
||||
echo "XGEN v0.9" > .tmp/xgen/v0.9/dist/index.html
|
||||
|
||||
# Building XGEN v1.0
|
||||
export XGEN_BASE=yao
|
||||
export BASE=yao
|
||||
export NODE_ENV=production
|
||||
git clone https://github.com/YaoApp/xgen-next.git .tmp/xgen/v1.0
|
||||
echo "BASE=__yao_admin_root" > .tmp/xgen/v1.0/packages/xgen/.env
|
||||
cd .tmp/xgen/v1.0 && pnpm install && pnpm run build
|
||||
|
||||
# Packing
|
||||
mkdir -p .tmp/data/xgen
|
||||
cp -r ./ui .tmp/data/ui
|
||||
cp -r ./yao .tmp/data/yao
|
||||
cp -r .tmp/xgen/v0.9/dist .tmp/data/xgen/v0.9
|
||||
cp -r .tmp/xgen/v1.0/packages/xgen/dist .tmp/data/xgen/v1.0
|
||||
cp -r yao .tmp/data/
|
||||
go-bindata -fs -pkg data -o data/bindata.go -prefix ".tmp/data/" .tmp/data/...
|
||||
rm -rf .tmp/data
|
||||
rm -rf .tmp/xgen
|
||||
|
||||
# Replace PRVERSION
|
||||
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}\"/g" share/const.go
|
||||
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-${NOW}\"/g" share/const.go
|
||||
|
||||
# Making artifacts
|
||||
mkdir -p dist
|
||||
|
|
@ -310,19 +305,18 @@ linux-release: clean
|
|||
cp -r xgen/v0.9 .tmp/xgen/v0.9/dist
|
||||
|
||||
# Building XGEN v1.0
|
||||
export XGEN_BASE=yao
|
||||
export BASE=yao
|
||||
export NODE_ENV=production
|
||||
git clone https://github.com/YaoApp/xgen-next.git .tmp/xgen/v1.0
|
||||
rm -f .tmp/xgen/v1.0/pnpm-lock.yaml
|
||||
echo "BASE=__yao_admin_root" > .tmp/xgen/v1.0/packages/xgen/.env
|
||||
cd .tmp/xgen/v1.0 && pnpm install && pnpm run build
|
||||
|
||||
# Packing
|
||||
mkdir -p .tmp/data/xgen
|
||||
cp -r ./ui .tmp/data/ui
|
||||
cp -r ./yao .tmp/data/yao
|
||||
cp -r .tmp/xgen/v0.9/dist .tmp/data/xgen/v0.9
|
||||
cp -r .tmp/xgen/v1.0/packages/xgen/dist .tmp/data/xgen/v1.0
|
||||
cp -r yao .tmp/data/
|
||||
go-bindata -fs -pkg data -o data/bindata.go -prefix ".tmp/data/" .tmp/data/...
|
||||
rm -rf .tmp/data
|
||||
rm -rf .tmp/xgen
|
||||
|
|
|
|||
14
cmd/start.go
14
cmd/start.go
|
|
@ -69,9 +69,10 @@ var startCmd = &cobra.Command{
|
|||
}
|
||||
|
||||
if share.App.XGen == "1.0" {
|
||||
root, _ := adminRoot()
|
||||
fmt.Println(color.WhiteString(L(" XGen")), color.GreenString(" 1.0"))
|
||||
fmt.Println(color.WhiteString(L("Frontend")), color.GreenString(" http://%s%s/", host, port))
|
||||
fmt.Println(color.WhiteString(L("Dashboard")), color.GreenString(" http://%s%s/yao/login/admin", host, port))
|
||||
fmt.Println(color.WhiteString(L("Dashboard")), color.GreenString(" http://%s%s%slogin/admin", host, port, root))
|
||||
fmt.Println(color.WhiteString(L("API")), color.GreenString(" http://%s%s/api", host, port))
|
||||
fmt.Println(color.WhiteString(L("Listening")), color.GreenString(" %s:%d", config.Conf.Host, config.Conf.Port))
|
||||
|
||||
|
|
@ -125,6 +126,17 @@ var startCmd = &cobra.Command{
|
|||
},
|
||||
}
|
||||
|
||||
func adminRoot() (string, int) {
|
||||
adminRoot := "/yao/"
|
||||
if root, ok := share.App.Optional["adminRoot"].(string); ok && root != "" {
|
||||
root = strings.TrimPrefix(root, "/")
|
||||
root = strings.TrimSuffix(root, "/")
|
||||
adminRoot = fmt.Sprintf("/%s/", root)
|
||||
}
|
||||
adminRootLen := len(adminRoot)
|
||||
return adminRoot, adminRootLen
|
||||
}
|
||||
|
||||
func printConnectors(silent bool) {
|
||||
|
||||
if len(connector.Connectors) == 0 {
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
// .tmp/data/ui/index.html
|
||||
// .tmp/data/xgen/v0.9/index.html
|
||||
// .tmp/data/xgen/v1.0/index.html
|
||||
// .tmp/data/xgen/v1.0/umi.js
|
||||
// .tmp/data/yao/apis/README.md
|
||||
// .tmp/data/yao/apis/chart.http.json
|
||||
// .tmp/data/yao/apis/import.http.json
|
||||
|
|
@ -207,7 +208,7 @@ func uiIndexHtml() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -227,12 +228,12 @@ func xgenV09IndexHtml() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "xgen/v0.9/index.html", size: 14, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "xgen/v0.9/index.html", size: 14, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _xgenV10IndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\x88\x70\x77\xf5\x53\x28\x33\xd4\x33\xd0\x33\xe4\x02\x04\x00\x00\xff\xff\x13\xe4\x6e\x5b\x0e\x00\x00\x00")
|
||||
var _xgenV10IndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\x88\x70\x77\xf5\x53\x28\x33\xd4\x33\xd0\x33\xe4\xe2\xb2\x49\xb2\x53\x56\x56\x08\xf2\xf7\x0f\x51\xd0\x8f\x8f\xaf\x4c\xcc\x8f\x4f\x4c\xc9\xcd\xcc\x8b\x2f\xca\xcf\x2f\xd1\x57\xb0\xd1\x4f\xb2\xe3\x02\x04\x00\x00\xff\xff\xb5\x26\x94\x2e\x32\x00\x00\x00")
|
||||
|
||||
func xgenV10IndexHtmlBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
|
|
@ -247,7 +248,27 @@ func xgenV10IndexHtml() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "xgen/v1.0/index.html", size: 14, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "xgen/v1.0/index.html", size: 50, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
||||
var _xgenV10UmiJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb2\x81\x00\x05\x0f\x57\x47\x17\xae\xb2\xc4\x22\x85\x82\xc4\x92\x0c\x05\x5b\x05\x25\xfd\xf8\xf8\xca\xc4\xfc\xf8\xc4\x94\xdc\xcc\xbc\xf8\xa2\xfc\xfc\x12\x7d\x25\x6b\xb0\x82\xb4\xfc\x7c\x05\x5b\x85\xe4\xfc\xbc\xe4\xc4\x12\x0d\x25\x74\x55\x4a\x9a\xd6\x5c\xb6\x10\x80\xa4\x1a\xb7\x69\x49\x89\x45\x20\x79\x0c\x63\xac\xb9\xec\x20\x40\x21\x25\x25\xd1\x30\xcd\xd0\x52\x41\x23\x3a\x2d\xb3\x22\x56\x01\xac\x46\x01\xa4\x46\xa1\x28\xb5\x20\x27\x31\x39\x55\x21\xa9\x34\x5d\x93\x0b\x10\x00\x00\xff\xff\xcc\x4c\x1b\x91\xc9\x00\x00\x00")
|
||||
|
||||
func xgenV10UmiJsBytes() ([]byte, error) {
|
||||
return bindataRead(
|
||||
_xgenV10UmiJs,
|
||||
"xgen/v1.0/umi.js",
|
||||
)
|
||||
}
|
||||
|
||||
func xgenV10UmiJs() (*asset, error) {
|
||||
bytes, err := xgenV10UmiJsBytes()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "xgen/v1.0/umi.js", size: 201, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -267,7 +288,7 @@ func yaoApisReadmeMd() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/apis/README.md", size: 13, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/apis/README.md", size: 13, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -287,7 +308,7 @@ func yaoApisChartHttpJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/apis/chart.http.json", size: 624, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/apis/chart.http.json", size: 624, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -307,7 +328,7 @@ func yaoApisImportHttpJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/apis/import.http.json", size: 1676, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/apis/import.http.json", size: 1676, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -327,7 +348,7 @@ func yaoApisPageHttpJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/apis/page.http.json", size: 609, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/apis/page.http.json", size: 609, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -347,7 +368,7 @@ func yaoApisStorageHttpJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/apis/storage.http.json", size: 1026, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/apis/storage.http.json", size: 1026, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -367,7 +388,7 @@ func yaoApisTableHttpJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/apis/table.http.json", size: 3213, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/apis/table.http.json", size: 3213, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -387,7 +408,7 @@ func yaoApisUserHttpJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/apis/user.http.json", size: 1453, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/apis/user.http.json", size: 1453, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -407,7 +428,7 @@ func yaoApisXiangHttpJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/apis/xiang.http.json", size: 1239, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/apis/xiang.http.json", size: 1239, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -427,7 +448,7 @@ func yaoDataAppJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/data/app.json", size: 277, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/data/app.json", size: 277, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -447,7 +468,7 @@ func yaoDataIcons404Png() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -467,7 +488,7 @@ func yaoDataIconsIconIcns() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -487,7 +508,7 @@ func yaoDataIconsIconIco() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -507,7 +528,7 @@ func yaoDataIconsIconPng() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -527,7 +548,7 @@ func yaoDataIndexHtml() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -547,7 +568,7 @@ func yaoFlowsReadmeMd() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/flows/README.md", size: 12, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/flows/README.md", size: 12, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -567,7 +588,7 @@ func yaoFlowsAdminGuardFlowJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/flows/admin/guard.flow.json", size: 559, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/flows/admin/guard.flow.json", size: 559, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -587,7 +608,7 @@ func yaoFlowsMenuFlowJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/flows/menu.flow.json", size: 1045, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/flows/menu.flow.json", size: 1045, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -607,7 +628,7 @@ func yaoFlowsUserFindFlowJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/flows/user/find.flow.json", size: 328, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/flows/user/find.flow.json", size: 328, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -627,7 +648,7 @@ func yaoLangsEnUsJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -647,7 +668,7 @@ func yaoModelsReadmeMd() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/models/README.md", size: 15, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/models/README.md", size: 15, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -667,7 +688,7 @@ func yaoModelsMenuModJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/models/menu.mod.json", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/models/menu.mod.json", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -687,7 +708,7 @@ func yaoModelsUserModJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/models/user.mod.json", size: 8826, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/models/user.mod.json", size: 8826, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -707,7 +728,7 @@ func yaoModelsWorkflowModJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/models/workflow.mod.json", size: 3333, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/models/workflow.mod.json", size: 3333, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -727,7 +748,7 @@ func yaoTablesReadmeMd() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/tables/README.md", size: 15, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/tables/README.md", size: 15, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -747,7 +768,7 @@ func yaoTablesMenuTabJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/tables/menu.tab.json", size: 10471, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/tables/menu.tab.json", size: 10471, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -767,7 +788,7 @@ func yaoTablesUserTabJson() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "yao/tables/user.tab.json", size: 2357, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
|
||||
info := bindataFileInfo{name: "yao/tables/user.tab.json", size: 2357, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
@ -827,6 +848,7 @@ var _bindata = map[string]func() (*asset, error){
|
|||
"ui/index.html": uiIndexHtml,
|
||||
"xgen/v0.9/index.html": xgenV09IndexHtml,
|
||||
"xgen/v1.0/index.html": xgenV10IndexHtml,
|
||||
"xgen/v1.0/umi.js": xgenV10UmiJs,
|
||||
"yao/apis/README.md": yaoApisReadmeMd,
|
||||
"yao/apis/chart.http.json": yaoApisChartHttpJson,
|
||||
"yao/apis/import.http.json": yaoApisImportHttpJson,
|
||||
|
|
@ -905,6 +927,7 @@ var _bintree = &bintree{nil, map[string]*bintree{
|
|||
}},
|
||||
"v1.0": {nil, map[string]*bintree{
|
||||
"index.html": {xgenV10IndexHtml, map[string]*bintree{}},
|
||||
"umi.js": {xgenV10UmiJs, map[string]*bintree{}},
|
||||
}},
|
||||
}},
|
||||
"yao": {nil, map[string]*bintree{
|
||||
|
|
|
|||
58
data/data.go
58
data/data.go
|
|
@ -1,7 +1,10 @@
|
|||
package data
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"compress/gzip"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
assetfs "github.com/elazarl/go-bindata-assetfs"
|
||||
)
|
||||
|
|
@ -29,3 +32,58 @@ func XgenV1() *assetfs.AssetFS {
|
|||
}
|
||||
panic("unreachable")
|
||||
}
|
||||
|
||||
// ReplaceXGen bindata file
|
||||
func ReplaceXGen(search, replace string) error {
|
||||
err := replaceXGenIndex(search, replace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return replaceXGenUmi(search, replace)
|
||||
}
|
||||
|
||||
// ReplaceXGenIndex bindata file
|
||||
func replaceXGenIndex(search, replace string) error {
|
||||
|
||||
content, err := bindataRead(_xgenV10IndexHtml, "xgen/v1.0/index.html")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
new := strings.ReplaceAll(string(content), search, replace)
|
||||
var b bytes.Buffer
|
||||
gz := gzip.NewWriter(&b)
|
||||
if _, err := gz.Write([]byte(new)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := gz.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_xgenV10IndexHtml = b.Bytes()
|
||||
return nil
|
||||
}
|
||||
|
||||
// replaceXGenUmi bindata file
|
||||
func replaceXGenUmi(search, replace string) error {
|
||||
|
||||
content, err := bindataRead(_xgenV10UmiJs, "xgen/v1.0/umi.js")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
new := strings.ReplaceAll(string(content), search, replace)
|
||||
var b bytes.Buffer
|
||||
gz := gzip.NewWriter(&b)
|
||||
if _, err := gz.Write([]byte(new)); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if err := gz.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_xgenV10UmiJs = b.Bytes()
|
||||
return nil
|
||||
}
|
||||
|
|
|
|||
25
data/data_test.go
Normal file
25
data/data_test.go
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
package data
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestReplaceXGenIndex(t *testing.T) {
|
||||
err := ReplaceXGen("__yao_admin_root", "Admin-Replaced")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
content, err := bindataRead(_xgenV10IndexHtml, "index.html")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
content, err = bindataRead(_xgenV10UmiJs, "umi.js")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
assert.Contains(t, string(content), "Admin-Replaced")
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
package service
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
|
@ -36,13 +37,18 @@ func BinStatic(c *gin.Context) {
|
|||
c.Next()
|
||||
return
|
||||
|
||||
} else if share.App.XGen == "1.0" && length >= 5 && c.Request.URL.Path[0:5] == "/yao/" {
|
||||
c.Request.URL.Path = strings.TrimPrefix(c.Request.URL.Path, "/yao")
|
||||
XGenFileServerV1.ServeHTTP(c.Writer, c.Request)
|
||||
c.Abort()
|
||||
return
|
||||
} else if share.App.XGen == "1.0" {
|
||||
// Xgen 1.0
|
||||
adminRoot, adminRootLen := adminRoot()
|
||||
if length >= adminRootLen && c.Request.URL.Path[0:adminRootLen] == adminRoot {
|
||||
c.Request.URL.Path = strings.TrimPrefix(c.Request.URL.Path, c.Request.URL.Path[0:adminRootLen-1])
|
||||
XGenFileServerV1.ServeHTTP(c.Writer, c.Request)
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
} else if share.App.XGen == "" && length >= 7 && c.Request.URL.Path[0:7] == "/xiang/" { // 数据管理后台
|
||||
} else if share.App.XGen == "" && length >= 7 && c.Request.URL.Path[0:7] == "/xiang/" {
|
||||
// Xgen 0.9
|
||||
c.Request.URL.Path = strings.TrimPrefix(c.Request.URL.Path, "/xiang")
|
||||
XGenFileServerV0.ServeHTTP(c.Writer, c.Request)
|
||||
c.Abort()
|
||||
|
|
@ -54,3 +60,14 @@ func BinStatic(c *gin.Context) {
|
|||
AppFileServer.ServeHTTP(c.Writer, c.Request)
|
||||
c.Abort()
|
||||
}
|
||||
|
||||
func adminRoot() (string, int) {
|
||||
adminRoot := "/yao/"
|
||||
if root, ok := share.App.Optional["adminRoot"].(string); ok && root != "" {
|
||||
root = strings.TrimPrefix(root, "/")
|
||||
root = strings.TrimSuffix(root, "/")
|
||||
adminRoot = fmt.Sprintf("/%s/", root)
|
||||
}
|
||||
adminRootLen := len(adminRoot)
|
||||
return adminRoot, adminRootLen
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,12 +5,14 @@ import (
|
|||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"github.com/yaoapp/gou"
|
||||
"github.com/yaoapp/gou/lang"
|
||||
"github.com/yaoapp/kun/exception"
|
||||
"github.com/yaoapp/yao/config"
|
||||
"github.com/yaoapp/yao/data"
|
||||
"github.com/yaoapp/yao/share"
|
||||
"github.com/yaoapp/yao/widgets/login"
|
||||
)
|
||||
|
|
@ -52,10 +54,16 @@ func Load(cfg config.Config) error {
|
|||
return err
|
||||
}
|
||||
|
||||
dsl := &DSL{}
|
||||
dsl := &DSL{Optional: OptionalDSL{}}
|
||||
err = jsoniter.Unmarshal(data, dsl)
|
||||
if err != nil {
|
||||
return nil
|
||||
return err
|
||||
}
|
||||
|
||||
// Replace Admin Root
|
||||
err = dsl.replaceAdminRoot()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Apply a language pack
|
||||
|
|
@ -200,3 +208,20 @@ func (dsl *DSL) Lang(trans func(widget string, inst string, value *string) bool)
|
|||
trans(widget, "app", &dsl.Short)
|
||||
trans(widget, "app", &dsl.Description)
|
||||
}
|
||||
|
||||
// replaceAdminRoot
|
||||
func (dsl *DSL) replaceAdminRoot() error {
|
||||
|
||||
if dsl.Optional.AdminRoot == "" {
|
||||
dsl.Optional.AdminRoot = "yao"
|
||||
}
|
||||
|
||||
root := strings.TrimPrefix(dsl.Optional.AdminRoot, "/")
|
||||
root = strings.TrimSuffix(root, "/")
|
||||
err := data.ReplaceXGen("/__yao_admin_root/", fmt.Sprintf("/%s/", root))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return data.ReplaceXGen("\"__yao_admin_root\"", fmt.Sprintf("\"%s\"", root))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,5 +21,6 @@ type MenuDSL struct {
|
|||
type OptionalDSL struct {
|
||||
HideNotification bool `json:"hideNotification,omitempty"`
|
||||
HideSetting bool `json:"hideSetting,omitempty"`
|
||||
AdminRoot string `json:"adminRoot,omitempty"`
|
||||
Setting string `json:"setting,omitempty"` // custom setting process
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1 +1,3 @@
|
|||
# XGEN v1.0.1
|
||||
|
||||
<b>## ROOT /__yao_admin_root/ </b>
|
||||
|
|
|
|||
2
xgen/v1.0/umi.js
Normal file
2
xgen/v1.0/umi.js
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
var path = "/__yao_admin_root/";
|
||||
var foo = concat("__yao_admin_root");
|
||||
Loading…
Add table
Reference in a new issue