From 9d28fde00c1a2f6ddb3fce0cdde19a204598c846 Mon Sep 17 00:00:00 2001 From: WintBit Date: Mon, 16 Jun 2025 16:34:47 +0800 Subject: [PATCH] feat: fileshare custom password support (#2493) * feat: fileshare custom password support * fix: blank password check * feat: backend share link password check * Revert "feat: backend share link password check" This reverts commit 22c7bb0b355235b48b29938eb995b3986b1122f1. * feat: use go-playground/validator binding rule --- pkg/filemanager/manager/manager.go | 1 + pkg/filemanager/manager/operation.go | 6 +++++- service/share/manage.go | 2 ++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/pkg/filemanager/manager/manager.go b/pkg/filemanager/manager/manager.go index b53f78e..5dcda16 100644 --- a/pkg/filemanager/manager/manager.go +++ b/pkg/filemanager/manager/manager.go @@ -111,6 +111,7 @@ type ( CreateShareArgs struct { ExistedShareID int IsPrivate bool + Password string RemainDownloads int Expire *time.Time ShareView bool diff --git a/pkg/filemanager/manager/operation.go b/pkg/filemanager/manager/operation.go index 1b44b62..fe97b4c 100644 --- a/pkg/filemanager/manager/operation.go +++ b/pkg/filemanager/manager/operation.go @@ -4,6 +4,7 @@ import ( "context" "encoding/gob" "fmt" + "strings" "time" "github.com/cloudreve/Cloudreve/v4/application/constants" @@ -259,7 +260,10 @@ func (l *manager) CreateOrUpdateShare(ctx context.Context, path *fs.URI, args *C password := "" if args.IsPrivate { - password = util.RandString(8, util.RandomLowerCases) + password = args.Password + if strings.TrimSpace(password) == "" { + password = util.RandString(8, util.RandomLowerCases) + } } props := &types.ShareProps{ diff --git a/service/share/manage.go b/service/share/manage.go index 715fc00..f3c3fdf 100644 --- a/service/share/manage.go +++ b/service/share/manage.go @@ -20,6 +20,7 @@ type ( ShareCreateService struct { Uri string `json:"uri" binding:"required"` IsPrivate bool `json:"is_private"` + Password string `json:"password" binding:"max=32,alphanum,omitempty"` RemainDownloads int `json:"downloads"` Expire int `json:"expire"` ShareView bool `json:"share_view"` @@ -52,6 +53,7 @@ func (service *ShareCreateService) Upsert(c *gin.Context, existed int) (string, share, err := m.CreateOrUpdateShare(c, uri, &manager.CreateShareArgs{ IsPrivate: service.IsPrivate, + Password: service.Password, RemainDownloads: service.RemainDownloads, Expire: expires, ExistedShareID: existed,