mirror of
https://github.com/OpenListTeam/OpenList.git
synced 2025-09-20 04:36:09 +08:00

提供一种类似大多数网盘的文件分享操作,这种分享方式可以通过强制 Web 代理隐藏文件源路径,可以设置分享码、最大访问数和过期时间,并且不需要启用 guest 用户。 在全局设置中可以调整: - 是否强制 Web 代理 - 是否允许预览 - 是否允许预览压缩文件 - 分享文件后,点击“复制链接”按钮复制的内容 前端部分:OpenListTeam/OpenList-Frontend#156 文档部分:OpenListTeam/OpenList-Docs#130 Close #183 Close #526 Close #860 Close #892 Close #1079 * feat(share): support more secure file sharing * feat(share): add archive preview * fix(share): fix some bugs * feat(openlist_share): add openlist share driver * fix(share): lack unwrap when get virtual path * fix: use unwrapPath instead of path for virtual file name comparison * fix(share): change request method of /api/share/list from GET to Any * fix(share): path traversal vulnerability in sharing path check * 修复分享alias驱动的文件 没开代理时无法获取URL * fix(sharing): update error message for sharing root link extraction --------- Co-authored-by: Suyunmeng <69945917+Suyunmeng@users.noreply.github.com> Co-authored-by: j2rong4cn <j2rong@qq.com>
59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
package sharing
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/OpenListTeam/OpenList/v4/internal/model"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func List(ctx context.Context, sid, path string, args model.SharingListArgs) (*model.Sharing, []model.Obj, error) {
|
|
sharing, res, err := list(ctx, sid, path, args)
|
|
if err != nil {
|
|
log.Errorf("failed list sharing %s/%s: %+v", sid, path, err)
|
|
return nil, nil, err
|
|
}
|
|
return sharing, res, nil
|
|
}
|
|
|
|
func Get(ctx context.Context, sid, path string, args model.SharingListArgs) (*model.Sharing, model.Obj, error) {
|
|
sharing, res, err := get(ctx, sid, path, args)
|
|
if err != nil {
|
|
log.Warnf("failed get sharing %s/%s: %s", sid, path, err)
|
|
return nil, nil, err
|
|
}
|
|
return sharing, res, nil
|
|
}
|
|
|
|
func ArchiveMeta(ctx context.Context, sid, path string, args model.SharingArchiveMetaArgs) (*model.Sharing, *model.ArchiveMetaProvider, error) {
|
|
sharing, res, err := archiveMeta(ctx, sid, path, args)
|
|
if err != nil {
|
|
log.Warnf("failed get sharing archive meta %s/%s: %s", sid, path, err)
|
|
return nil, nil, err
|
|
}
|
|
return sharing, res, nil
|
|
}
|
|
|
|
func ArchiveList(ctx context.Context, sid, path string, args model.SharingArchiveListArgs) (*model.Sharing, []model.Obj, error) {
|
|
sharing, res, err := archiveList(ctx, sid, path, args)
|
|
if err != nil {
|
|
log.Warnf("failed list sharing archive %s/%s: %s", sid, path, err)
|
|
return nil, nil, err
|
|
}
|
|
return sharing, res, nil
|
|
}
|
|
|
|
type LinkArgs struct {
|
|
model.SharingListArgs
|
|
model.LinkArgs
|
|
}
|
|
|
|
func Link(ctx context.Context, sid, path string, args *LinkArgs) (*model.Sharing, *model.Link, model.Obj, error) {
|
|
sharing, res, file, err := link(ctx, sid, path, args)
|
|
if err != nil {
|
|
log.Errorf("failed get sharing link %s/%s: %+v", sid, path, err)
|
|
return nil, nil, nil, err
|
|
}
|
|
return sharing, res, file, nil
|
|
}
|