From 5db1ad4adf66cfc9f2e012d9ec6fc154cd8aaa49 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BE=AE=E5=87=89?= <927625802@qq.com>
Date: Wed, 17 Nov 2021 22:19:11 +0800
Subject: [PATCH] :sparkler: resolved #160
---
README.md | 1 +
bootstrap/setting.go | 17 +++++++++++++++--
conf/var.go | 1 +
model/setting.go | 4 ++++
server/check.go | 25 +++++++++++++++++++++++++
server/down.go | 12 +++++++++++-
6 files changed, 57 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 3b29e8e1..16f87d16 100644
--- a/README.md
+++ b/README.md
@@ -34,6 +34,7 @@
- Onedrive/世纪互联
- 天翼云盘
- GoogleDrive
+- 123pan
- ...
### 如何使用
diff --git a/bootstrap/setting.go b/bootstrap/setting.go
index 567b0e21..c0bd2b15 100644
--- a/bootstrap/setting.go
+++ b/bootstrap/setting.go
@@ -57,7 +57,7 @@ func InitSettings() {
},
{
Key: "text types",
- Value: "txt,htm,html,xml,java,properties,sql,js,md,json,conf,ini,vue,php,py,bat,gitignore,yml,go,sh,c,cpp,h,hpp",
+ Value: "txt,htm,html,xml,java,properties,sql,js,md,json,conf,ini,vue,php,py,bat,gitignore,yml,go,sh,c,cpp,h,hpp,tsx",
Type: "string",
Description: "text type extensions",
},
@@ -98,35 +98,48 @@ func InitSettings() {
Key: "autoplay video",
Value: "false",
Type: "bool",
+ Group: model.PUBLIC,
},
{
Key: "autoplay audio",
Value: "false",
Type: "bool",
+ Group: model.PUBLIC,
},
{
Key: "check parent folder",
Value: "false",
Type: "bool",
Description: "check parent folder password",
+ Group: model.PRIVATE,
},
{
Key: "customize style",
Value: "",
Type: "text",
Description: "customize style, don't need add ",
+ Group: model.PRIVATE,
},
{
Key: "customize script",
Value: "",
Type: "text",
Description: "customize script, don't need add ",
+ Group: model.PRIVATE,
},
{
Key: "animation",
Value: "true",
Type: "bool",
Description: "when there are a lot of files, the animation will freeze when opening",
+ Group: model.PUBLIC,
+ },
+ {
+ Key: "check down link",
+ Value: "false",
+ Type: "bool",
+ Description: "check down link password, your link will be 'https://alist.com/d/filename?pw=xxx'",
+ Group: model.PUBLIC,
},
}
for _, v := range settings {
@@ -139,4 +152,4 @@ func InitSettings() {
}
}
model.LoadSettings()
-}
\ No newline at end of file
+}
diff --git a/conf/var.go b/conf/var.go
index f141cf57..f672d8a0 100644
--- a/conf/var.go
+++ b/conf/var.go
@@ -44,4 +44,5 @@ var (
//CustomizeStyle string
//CustomizeScript string
//Favicon string
+ CheckDown bool
)
diff --git a/model/setting.go b/model/setting.go
index 96c95e13..b42132ae 100644
--- a/model/setting.go
+++ b/model/setting.go
@@ -61,6 +61,10 @@ func LoadSettings() {
if err == nil {
conf.CheckParent = checkParent.Value == "true"
}
+ checkDown,err := GetSettingByKey("check down link")
+ if err == nil {
+ conf.CheckDown = checkDown.Value == "true"
+ }
favicon, err := GetSettingByKey("favicon")
if err == nil {
//conf.Favicon = favicon.Value
diff --git a/server/check.go b/server/check.go
index d2551d30..234be581 100644
--- a/server/check.go
+++ b/server/check.go
@@ -2,9 +2,11 @@ package server
import (
"fmt"
+ "github.com/Xhofe/alist/conf"
"github.com/Xhofe/alist/model"
"github.com/Xhofe/alist/utils"
"github.com/gin-gonic/gin"
+ log "github.com/sirupsen/logrus"
"gorm.io/gorm"
"path/filepath"
)
@@ -53,3 +55,26 @@ func CheckParent(path string, password string) bool {
return CheckParent(filepath.Dir(path), password)
}
}
+
+func CheckDownLink(path string, passwordMd5 string) bool {
+ if !conf.CheckDown {
+ return true
+ }
+ meta, err := model.GetMetaByPath(path)
+ log.Debugf("check down path: %s", path)
+ if err == nil {
+ log.Debugf("check down link: %s,%s", meta.Password, passwordMd5)
+ if meta.Password != "" && utils.Get16MD5Encode(meta.Password) != passwordMd5 {
+ return false
+ }
+ return true
+ } else {
+ if !conf.CheckParent {
+ return true
+ }
+ if path == "/" {
+ return true
+ }
+ return CheckDownLink(filepath.Dir(path), passwordMd5)
+ }
+}
diff --git a/server/down.go b/server/down.go
index 3b6d028b..5269b63b 100644
--- a/server/down.go
+++ b/server/down.go
@@ -21,6 +21,11 @@ func Down(c *gin.Context) {
}
rawPath = utils.ParsePath(rawPath)
log.Debugf("down: %s", rawPath)
+ pw := c.Query("pw")
+ if !CheckDownLink(filepath.Dir(rawPath), pw) {
+ ErrorResp(c, fmt.Errorf("wrong password"), 401)
+ return
+ }
account, path, driver, err := ParsePath(rawPath)
if err != nil {
ErrorResp(c, err, 500)
@@ -52,6 +57,11 @@ func Proxy(c *gin.Context) {
}
rawPath = utils.ParsePath(rawPath)
log.Debugf("proxy: %s", rawPath)
+ pw := c.Query("pw")
+ if !CheckDownLink(filepath.Dir(rawPath), pw) {
+ ErrorResp(c, fmt.Errorf("wrong password"), 401)
+ return
+ }
account, path, driver, err := ParsePath(rawPath)
if err != nil {
ErrorResp(c, err, 500)
@@ -74,7 +84,7 @@ func Proxy(c *gin.Context) {
Text(c, link)
return
}
- driver.Proxy(c,account)
+ driver.Proxy(c, account)
r := c.Request
w := c.Writer
target, err := url.Parse(link)