From a5b2f998ab74aa5f10dcabdffd34f8a2abbc688f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E5=87=89?= <927625802@qq.com> Date: Tue, 16 Mar 2021 23:15:37 +0800 Subject: [PATCH] =?UTF-8?q?:sparkler:=20=E6=94=AF=E6=8C=81mysql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- alidrive/auth.go | 2 +- alidrive/request.go | 2 +- bootstrap/model.go | 42 +++++++++++++++++++++++++++++----- conf.yml.example | 36 ++++++++++++++++------------- conf/const.go | 2 +- go.mod | 3 ++- go.sum | 6 +++++ server/controllers/down.go | 2 +- server/controllers/get.go | 2 +- server/controllers/path.go | 7 +++++- server/models/create.go | 2 +- test/alidrive_test.go | 47 -------------------------------------- test/string_test.go | 16 ++++++------- test/utils_test.go | 3 --- utils/md5.go | 2 +- 15 files changed, 85 insertions(+), 89 deletions(-) delete mode 100644 test/alidrive_test.go diff --git a/alidrive/auth.go b/alidrive/auth.go index 202e3a71..82f75bd9 100644 --- a/alidrive/auth.go +++ b/alidrive/auth.go @@ -42,4 +42,4 @@ func RefreshTokenAll() string { return res[:len(res)-1] } return "" -} \ No newline at end of file +} diff --git a/alidrive/request.go b/alidrive/request.go index 40e85ec6..fd677b41 100644 --- a/alidrive/request.go +++ b/alidrive/request.go @@ -155,7 +155,7 @@ func DoPost(url string, request interface{}, auth string) (body []byte, err erro return } if auth != "" { - req.Header.Set("authorization", conf.Bearer + auth) + req.Header.Set("authorization", conf.Bearer+auth) } req.Header.Add("content-type", "application/json") req.Header.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36") diff --git a/bootstrap/model.go b/bootstrap/model.go index 913b7c22..950c676d 100644 --- a/bootstrap/model.go +++ b/bootstrap/model.go @@ -1,26 +1,34 @@ package bootstrap import ( + "fmt" "github.com/Xhofe/alist/conf" "github.com/Xhofe/alist/server/models" "github.com/Xhofe/alist/utils" log "github.com/sirupsen/logrus" + "gorm.io/driver/mysql" "gorm.io/driver/sqlite" "gorm.io/gorm" + "gorm.io/gorm/schema" "strings" ) func InitModel() bool { log.Infof("初始化数据库...") - switch conf.Conf.Database.Type { + dbConfig := conf.Conf.Database + switch dbConfig.Type { case "sqlite3": { - if !(strings.HasSuffix(conf.Conf.Database.DBFile, ".db") && len(conf.Conf.Database.DBFile) > 3) { + if !(strings.HasSuffix(dbConfig.DBFile, ".db") && len(dbConfig.DBFile) > 3) { log.Errorf("db名称不正确.") return false } - needMigrate := !utils.Exists(conf.Conf.Database.DBFile) - db, err := gorm.Open(sqlite.Open(conf.Conf.Database.DBFile), &gorm.Config{}) + needMigrate := !utils.Exists(dbConfig.DBFile) + db, err := gorm.Open(sqlite.Open(dbConfig.DBFile), &gorm.Config{ + NamingStrategy: schema.NamingStrategy{ + TablePrefix: dbConfig.TablePrefix, + }, + }) if err != nil { log.Errorf("连接数据库出现错误:%s", err.Error()) return false @@ -33,12 +41,34 @@ func InitModel() bool { log.Errorf("数据库迁移失败:%s", err.Error()) return false } - models.BuildTreeAll() + //models.BuildTreeAll() + } + return true + } + case "mysql": + { + dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", + dbConfig.User, dbConfig.Password, dbConfig.Host, dbConfig.Port, dbConfig.Name) + db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{ + NamingStrategy: schema.NamingStrategy{ + TablePrefix: dbConfig.TablePrefix, + }, + }) + if err != nil { + log.Errorf("连接数据库出现错误:%s", err.Error()) + return false + } + conf.DB = db + log.Infof("迁移数据库...") + err = conf.DB.AutoMigrate(&models.File{}) + if err != nil { + log.Errorf("数据库迁移失败:%s", err.Error()) + return false } return true } default: - log.Errorf("不支持的数据库类型:%s", conf.Conf.Database.Type) + log.Errorf("不支持的数据库类型:%s", dbConfig.Type) return false } } diff --git a/conf.yml.example b/conf.yml.example index ec4279ac..f14df09b 100644 --- a/conf.yml.example +++ b/conf.yml.example @@ -8,23 +8,27 @@ info: script: #自定义脚本,可以是脚本的链接,也可以直接是脚本内容,如document.querySelector('body').style="background-image:url('https://api.mtyqx.cn/api/random.php');background-attachment:fixed" autoplay: true #视频是否自动播放 preview: - url: https://view.alist.nn.ci/onlinePreview?url= #extensions中包含的后缀名预览的地址,默认使用了kkFileView,可以自行搭建 - pre_process: [base64,encodeURIComponent] #对地址的处理,支持base64,encodeURIComponent,encodeURI - extensions: [zip,rar,jar,tar,gzip] #使用上面的url预览的文件后缀,这是只是示例 text: [txt,htm,html,xml,java,properties,sql,js,md,json,conf,ini,vue,php,py,bat,gitignore,yml,go,sh,c,cpp,h,hpp] #要预览的文本文件的后缀,可以自行添加 - max_size: 5242880 server: - port: "5244" #程序监听端口 - search: true #是否开启搜索接口,开启搜索之后密码和根目录都会失效,所以前端暂时不做搜索 - static: dist #前端文件目录 - site_url: '*' #建议直接填*,若有信任域名要求,可填写其他,逗号分割 -cache: - enable: true #是否开启缓存 - expiration: 60 #缓存失效时间(单位:分钟) - cleanup_interval: 120 #清理失效缓存间隔 - refresh_password: password #手动清理缓存密码 + port: "5244" + search: true + static: dist + site_url: '*' + password: password #用于重建目录 ali_drive: - api_url: https://api.aliyundrive.com/v2 #阿里云盘api,无需修改 - root_folder: root #根目录 - refresh_token: need + api_url: https://api.aliyundrive.com/v2 max_files_count: 3000 + drives: + - refresh_token: xxx #refresh_token + root_folder: root #根目录的file_id + name: drive0 #盘名,多个盘不可重复 + password: pass #该盘密码,空则不设密码,修改需要重建生效 + hide: false #是否在主页隐藏该盘,不可全部隐藏,至少暴露一个 + - refresh_token: xxx + root_folder: root + name: drive1 + password: pass + hide: false +database: + type: sqlite3 + dBFile: alist.db diff --git a/conf/const.go b/conf/const.go index feb9c12c..277002d3 100644 --- a/conf/const.go +++ b/conf/const.go @@ -12,7 +12,7 @@ var ( ConfigFile string // config file SkipUpdate bool // skip update - Client *http.Client // request client + Client *http.Client // request client DB *gorm.DB diff --git a/go.mod b/go.mod index b0c8af31..63ba031d 100644 --- a/go.mod +++ b/go.mod @@ -19,6 +19,7 @@ require ( golang.org/x/sys v0.0.0-20201218084310-7d0127a74742 // indirect google.golang.org/protobuf v1.25.0 // indirect gopkg.in/yaml.v2 v2.4.0 + gorm.io/driver/mysql v1.0.5 gorm.io/driver/sqlite v1.1.4 - gorm.io/gorm v1.21.1 + gorm.io/gorm v1.21.3 ) diff --git a/go.sum b/go.sum index bb6fb587..fa050a0d 100644 --- a/go.sum +++ b/go.sum @@ -27,6 +27,8 @@ github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1 github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE= github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4= +github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -166,10 +168,14 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/mysql v1.0.5 h1:WAAmvLK2rG0tCOqrf5XcLi2QUwugd4rcVJ/W3aoon9o= +gorm.io/driver/mysql v1.0.5/go.mod h1:N1OIhHAIhx5SunkMGqWbGFVeh4yTNWKmMo1GOAsohLI= gorm.io/driver/sqlite v1.1.4 h1:PDzwYE+sI6De2+mxAneV9Xs11+ZyKV6oxD3wDGkaNvM= gorm.io/driver/sqlite v1.1.4/go.mod h1:mJCeTFr7+crvS+TRnWc5Z3UvwxUN1BGBLMrf5LA9DYw= gorm.io/gorm v1.20.7/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= gorm.io/gorm v1.21.1 h1:ACwUZ+jzH8eG8zxgqTnMIdgWd+lGfCKZTUxL/uQ1ZQo= gorm.io/gorm v1.21.1/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= +gorm.io/gorm v1.21.3 h1:qDFi55ZOsjZTwk5eN+uhAmHi8GysJ/qCTichM/yO7ME= +gorm.io/gorm v1.21.3/go.mod h1:0HFTzE/SqkGTzK6TlDPPQbAYCluiVvhzoA1+aVyzenw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/server/controllers/down.go b/server/controllers/down.go index 7a505ae7..4ca416db 100644 --- a/server/controllers/down.go +++ b/server/controllers/down.go @@ -45,7 +45,7 @@ func Down(c *gin.Context) { c.JSON(200, MetaResponse(406, "无法下载目录.")) return } - drive := utils.GetDriveByName(strings.Split(dir,"/")[0]) + drive := utils.GetDriveByName(strings.Split(dir, "/")[0]) if drive == nil { c.JSON(200, MetaResponse(500, "找不到drive.")) return diff --git a/server/controllers/get.go b/server/controllers/get.go index 9b253a64..727dd140 100644 --- a/server/controllers/get.go +++ b/server/controllers/get.go @@ -42,7 +42,7 @@ func Get(c *gin.Context) { } return } - drive := utils.GetDriveByName(strings.Split(dir,"/")[0]) + drive := utils.GetDriveByName(strings.Split(dir, "/")[0]) if drive == nil { c.JSON(200, MetaResponse(500, "找不到drive.")) return diff --git a/server/controllers/path.go b/server/controllers/path.go index 93004c46..09369d10 100644 --- a/server/controllers/path.go +++ b/server/controllers/path.go @@ -44,6 +44,11 @@ func Path(c *gin.Context) { } // file if file.Type == "file" { + if file.Password == "" { + file.Password = "n" + } else { + file.Password = "y" + } c.JSON(200, DataResponse(file)) return } @@ -57,7 +62,7 @@ func Path(c *gin.Context) { for i, _ := range *files { if (*files)[i].Password == "" { (*files)[i].Password = "n" - }else { + } else { (*files)[i].Password = "y" } } diff --git a/server/models/create.go b/server/models/create.go index 30da27e1..3b4ea1db 100644 --- a/server/models/create.go +++ b/server/models/create.go @@ -13,7 +13,7 @@ func BuildTreeAll() { for i, _ := range conf.Conf.AliDrive.Drives { if err := BuildTree(&conf.Conf.AliDrive.Drives[i]); err != nil { log.Errorf("盘[%s]构建目录树失败:%s", err.Error()) - }else { + } else { log.Infof("盘[%s]构建目录树成功") } } diff --git a/test/alidrive_test.go b/test/alidrive_test.go deleted file mode 100644 index 2dc1994b..00000000 --- a/test/alidrive_test.go +++ /dev/null @@ -1,47 +0,0 @@ -package test - -import ( - "fmt" - "github.com/Xhofe/alist/alidrive" - "github.com/Xhofe/alist/bootstrap" - "github.com/Xhofe/alist/conf" - "os" - "testing" -) - -func setup() { - bootstrap.InitLog() - bootstrap.ReadConf("../conf.yml") - bootstrap.InitClient() - bootstrap.InitAliDrive() -} - -func TestGetUserInfo(t *testing.T) { - user, err := alidrive.GetUserInfo() - fmt.Println(err) - fmt.Println(user) -} - -func TestGetRoot(t *testing.T) { - files, err := alidrive.GetRoot(50, "", conf.OrderUpdatedAt, conf.DESC) - fmt.Println(err) - fmt.Println(files) -} - -func TestSearch(t *testing.T) { - files, err := alidrive.Search("测试文件", 50, "") - fmt.Println(err) - fmt.Println(files) -} - -func TestGet(t *testing.T) { - file, err := alidrive.GetFile("5fb7c80e85e4f335cd344008be1b1b5349f74414") - fmt.Println(err) - fmt.Println(file) -} - -func TestMain(m *testing.M) { - setup() - code := m.Run() - os.Exit(code) -} diff --git a/test/string_test.go b/test/string_test.go index bd5a533a..bc96ceff 100644 --- a/test/string_test.go +++ b/test/string_test.go @@ -15,18 +15,18 @@ func TestSplit(t *testing.T) { } func TestPassword(t *testing.T) { - fullName:="hello.password-xhf" - index:=strings.Index(fullName,".password-") - name:=fullName[:index] - password:=fullName[index+10:] - fmt.Printf("name:%s, password:%s\n",name,password) + fullName := "hello.password-xhf" + index := strings.Index(fullName, ".password-") + name := fullName[:index] + password := fullName[index+10:] + fmt.Printf("name:%s, password:%s\n", name, password) } func TestDir(t *testing.T) { - dir,file:=filepath.Split("root") - fmt.Printf("dir:%s\nfile:%s\n",dir,file) + dir, file := filepath.Split("root") + fmt.Printf("dir:%s\nfile:%s\n", dir, file) } func TestMD5(t *testing.T) { fmt.Printf("%s\n", utils.Get16MD5Encode("123456")) -} \ No newline at end of file +} diff --git a/test/utils_test.go b/test/utils_test.go index 56059585..d0745702 100644 --- a/test/utils_test.go +++ b/test/utils_test.go @@ -2,7 +2,6 @@ package test import ( "fmt" - "github.com/Xhofe/alist/alidrive" "github.com/Xhofe/alist/conf" "github.com/Xhofe/alist/utils" "testing" @@ -13,7 +12,5 @@ func TestStr(t *testing.T) { } func TestWriteYml(t *testing.T) { - alidrive.RefreshToken() utils.WriteToYml("../conf.yml", conf.Conf) } - diff --git a/utils/md5.go b/utils/md5.go index 32b5d37c..7d254cc9 100644 --- a/utils/md5.go +++ b/utils/md5.go @@ -13,6 +13,6 @@ func GetMD5Encode(data string) string { } //返回一个16位md5加密后的字符串 -func Get16MD5Encode(data string) string{ +func Get16MD5Encode(data string) string { return GetMD5Encode(data)[8:24] }