Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/drivers/123_link/driver.go
1987 views
1
package _123Link
2
3
import (
4
"context"
5
stdpath "path"
6
"time"
7
8
"github.com/alist-org/alist/v3/internal/driver"
9
"github.com/alist-org/alist/v3/internal/errs"
10
"github.com/alist-org/alist/v3/internal/model"
11
"github.com/alist-org/alist/v3/pkg/utils"
12
)
13
14
type Pan123Link struct {
15
model.Storage
16
Addition
17
root *Node
18
}
19
20
func (d *Pan123Link) Config() driver.Config {
21
return config
22
}
23
24
func (d *Pan123Link) GetAddition() driver.Additional {
25
return &d.Addition
26
}
27
28
func (d *Pan123Link) Init(ctx context.Context) error {
29
node, err := BuildTree(d.OriginURLs)
30
if err != nil {
31
return err
32
}
33
node.calSize()
34
d.root = node
35
return nil
36
}
37
38
func (d *Pan123Link) Drop(ctx context.Context) error {
39
return nil
40
}
41
42
func (d *Pan123Link) Get(ctx context.Context, path string) (model.Obj, error) {
43
node := GetNodeFromRootByPath(d.root, path)
44
return nodeToObj(node, path)
45
}
46
47
func (d *Pan123Link) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {
48
node := GetNodeFromRootByPath(d.root, dir.GetPath())
49
if node == nil {
50
return nil, errs.ObjectNotFound
51
}
52
if node.isFile() {
53
return nil, errs.NotFolder
54
}
55
return utils.SliceConvert(node.Children, func(node *Node) (model.Obj, error) {
56
return nodeToObj(node, stdpath.Join(dir.GetPath(), node.Name))
57
})
58
}
59
60
func (d *Pan123Link) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
61
node := GetNodeFromRootByPath(d.root, file.GetPath())
62
if node == nil {
63
return nil, errs.ObjectNotFound
64
}
65
if node.isFile() {
66
signUrl, err := SignURL(node.Url, d.PrivateKey, d.UID, time.Duration(d.ValidDuration)*time.Minute)
67
if err != nil {
68
return nil, err
69
}
70
return &model.Link{
71
URL: signUrl,
72
}, nil
73
}
74
return nil, errs.NotFile
75
}
76
77
var _ driver.Driver = (*Pan123Link)(nil)
78
79