From fa900b166a95827ee381e77ebe72f254cb50c76f Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Wed, 8 Apr 2020 10:00:03 +0800 Subject: [PATCH] Feat: check static files version --- assets | 2 +- bootstrap/static.go | 42 ++++++++++++++++++++++++++++++++++++++++++ pkg/conf/version.go | 3 +++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/assets b/assets index f544486..43c9ce1 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit f544486b6ae2440df197630601b1827ed6977c0b +Subproject commit 43c9ce1d266050637a247113db54883ce2218291 diff --git a/bootstrap/static.go b/bootstrap/static.go index f40ffe2..39cf5bc 100644 --- a/bootstrap/static.go +++ b/bootstrap/static.go @@ -1,10 +1,13 @@ package bootstrap import ( + "encoding/json" + "github.com/HFO4/cloudreve/pkg/conf" "github.com/HFO4/cloudreve/pkg/util" _ "github.com/HFO4/cloudreve/statik" "github.com/gin-contrib/static" "github.com/rakyll/statik/fs" + "io/ioutil" "net/http" ) @@ -12,6 +15,11 @@ type GinFS struct { FS http.FileSystem } +type staticVersion struct { + Name string `json:"name"` + Version string `json:"version"` +} + // StaticFS 内置静态文件资源 var StaticFS static.ServeFileSystem @@ -45,4 +53,38 @@ func InitStatic() { } } + // 检查静态资源的版本 + f, err := StaticFS.Open("version.json") + if err != nil { + util.Log().Warning("静态资源版本标识文件不存在,请重新构建或删除 statics 目录") + return + } + + b, err := ioutil.ReadAll(f) + if err != nil { + util.Log().Warning("无法读取静态资源文件版本,请重新构建或删除 statics 目录") + return + } + + var v staticVersion + if err := json.Unmarshal(b, &v); err != nil { + util.Log().Warning("无法解析静态资源文件版本, %s", err) + return + } + + staticName := "cloudreve-frontend" + if conf.IsPro == "true" { + staticName += "-pro" + } + + if v.Name != staticName { + util.Log().Warning("静态资源版本不匹配,请重新构建或删除 statics 目录") + return + } + + if v.Version != conf.RequiredStaticVersion { + util.Log().Warning("静态资源版本不匹配 [当前 %s, 需要: %s],请重新构建或删除 statics 目录", v.Version, conf.RequiredStaticVersion) + return + } + } diff --git a/pkg/conf/version.go b/pkg/conf/version.go index a53d309..ac9e404 100644 --- a/pkg/conf/version.go +++ b/pkg/conf/version.go @@ -6,6 +6,9 @@ var BackendVersion = "3.0.0-beta1" // RequiredDBVersion 与当前版本匹配的数据库版本 var RequiredDBVersion = "3.0.0-rc1" +// RequiredStaticVersion 与当前版本匹配的静态资源版本 +var RequiredStaticVersion = "3.0.0" + // IsPro 是否为Pro版本 var IsPro = "false"