Skip to content

Commit

Permalink
feat: Added SubFolder and localAssets configuration(#1324)
Browse files Browse the repository at this point in the history
Co-authored-by: eaglexmw <[email protected]>
  • Loading branch information
eaglexmw-gmail and eaglexmw authored Jul 14, 2022
1 parent eb15bce commit 7e40aca
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 8 deletions.
4 changes: 4 additions & 0 deletions conf/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ type Config struct {
Address string `json:"address" env:"ADDR"`
Port int `json:"port" env:"PORT"`
Assets string `json:"assets" env:"ASSETS"`
LocalAssets string `json:"localassets" env:"LOCALASSETS"`
SubFolder string `json:"subfolder" env:"SUBFOLDER"`
Database Database `json:"database"`
Scheme Scheme `json:"scheme"`
Cache CacheConfig `json:"cache"`
Expand All @@ -39,6 +41,8 @@ func DefaultConfig() *Config {
Address: "0.0.0.0",
Port: 5244,
Assets: "https://npm.elemecdn.com/alist-web@$version/dist",
SubFolder: "",
LocalAssets: "",
TempDir: "data/temp",
Database: Database{
Type: "sqlite3",
Expand Down
53 changes: 45 additions & 8 deletions server/static.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,14 @@ package server

import (
"io/fs"
"os"
"io/ioutil"
"net/http"
"net/http/pprof"
"strings"
"path/filepath"

"github.com/Xhofe/alist/utils"
"github.com/Xhofe/alist/conf"
"github.com/Xhofe/alist/public"
"github.com/gin-gonic/gin"
Expand All @@ -19,31 +22,65 @@ func InitIndex() {
if !strings.Contains(conf.Conf.Assets, "/") {
conf.Conf.Assets = conf.DefaultConfig().Assets
}
index, err = public.Public.Open("index.html")
// if LocalAssets is local path, read local index.html.
if (utils.IsDir(filepath.Dir(conf.Conf.LocalAssets))) && utils.Exists(filepath.Join(conf.Conf.LocalAssets, "index.html")) {
index, err = os.Open(filepath.Join(conf.Conf.LocalAssets, "index.html"))
defer index.Close()
log.Infof("used local index.html")
} else {
index, err = public.Public.Open("index.html")
}
if err != nil {
log.Fatal(err.Error())
}
data, _ := ioutil.ReadAll(index)
data, _ := ioutil.ReadAll(index)
conf.RawIndexHtml = string(data)
// if exist SUB_FOLDER, replace it by config: SubFolder
subfolder := strings.Trim(conf.Conf.SubFolder, "/")
if strings.Contains(conf.RawIndexHtml, "SUB_FOLDER") {
conf.RawIndexHtml = strings.ReplaceAll(conf.RawIndexHtml, "SUB_FOLDER", subfolder)
}
cdnUrl := strings.ReplaceAll(conf.Conf.Assets, "$version", conf.WebTag)
cdnUrl = strings.TrimRight(cdnUrl, "/")
conf.RawIndexHtml = string(data)
if strings.Contains(conf.RawIndexHtml, "CDN_URL") {
conf.RawIndexHtml = strings.ReplaceAll(conf.RawIndexHtml, "/CDN_URL", cdnUrl)
conf.RawIndexHtml = strings.ReplaceAll(conf.RawIndexHtml, "assets/", cdnUrl+"/assets/")
if (cdnUrl == "") && (subfolder != "") {
conf.RawIndexHtml = strings.ReplaceAll(conf.RawIndexHtml, "CDN_URL", subfolder)
conf.RawIndexHtml = strings.ReplaceAll(conf.RawIndexHtml, "assets/", "/" + subfolder+"/assets/")
} else {
conf.RawIndexHtml = strings.ReplaceAll(conf.RawIndexHtml, "/CDN_URL", cdnUrl)
conf.RawIndexHtml = strings.ReplaceAll(conf.RawIndexHtml, "assets/", cdnUrl+"/assets/")
}
}
}

func Static(r *gin.Engine) {
var assets fs.FS
var pub fs.FS
var err error
var fsys fs.FS
//InitIndex()
assets, err := fs.Sub(public.Public, "assets")
// if LocalAssets is local path, read local assets.
fsys = os.DirFS(conf.Conf.LocalAssets)
if (utils.IsDir(filepath.Dir(conf.Conf.LocalAssets))) && utils.Exists(filepath.Join(conf.Conf.LocalAssets, "assets")) {
assets, err = fs.Sub(fsys, "assets")
log.Infof("used local assets")
} else {
assets, err = fs.Sub(public.Public, "assets")
}
if err != nil {
log.Fatalf("can't find assets folder")
}
pub, err := fs.Sub(public.Public, "public")
r.StaticFS("/assets/", http.FS(assets))
// if LocalAssets is local path, read local assets.
if (utils.IsDir(filepath.Dir(conf.Conf.LocalAssets))) && utils.Exists(filepath.Join(conf.Conf.LocalAssets, "public")) {
pub, err = fs.Sub(fsys, "public")
log.Infof("used local public")
} else {
pub, err = fs.Sub(public.Public, "public")
}
if err != nil {
log.Fatalf("can't find public folder")
}
r.StaticFS("/assets/", http.FS(assets))
r.StaticFS("/public/", http.FS(pub))
r.NoRoute(func(c *gin.Context) {
c.Header("Content-Type", "text/html")
Expand Down

0 comments on commit 7e40aca

Please sign in to comment.