Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alist-org
GitHub Repository: alist-org/alist
Path: blob/main/drivers/febbox/driver.go
1986 views
1
package febbox
2
3
import (
4
"context"
5
"github.com/alist-org/alist/v3/internal/op"
6
"github.com/alist-org/alist/v3/pkg/utils"
7
"golang.org/x/oauth2"
8
"golang.org/x/oauth2/clientcredentials"
9
10
"github.com/alist-org/alist/v3/internal/driver"
11
"github.com/alist-org/alist/v3/internal/errs"
12
"github.com/alist-org/alist/v3/internal/model"
13
)
14
15
type FebBox struct {
16
model.Storage
17
Addition
18
accessToken string
19
oauth2Token oauth2.TokenSource
20
}
21
22
func (d *FebBox) Config() driver.Config {
23
return config
24
}
25
26
func (d *FebBox) GetAddition() driver.Additional {
27
return &d.Addition
28
}
29
30
func (d *FebBox) Init(ctx context.Context) error {
31
// 初始化 oauth2Config
32
oauth2Config := &clientcredentials.Config{
33
ClientID: d.ClientID,
34
ClientSecret: d.ClientSecret,
35
AuthStyle: oauth2.AuthStyleInParams,
36
TokenURL: "https://api.febbox.com/oauth/token",
37
}
38
39
d.initializeOAuth2Token(ctx, oauth2Config, d.Addition.RefreshToken)
40
41
token, err := d.oauth2Token.Token()
42
if err != nil {
43
return err
44
}
45
d.accessToken = token.AccessToken
46
d.Addition.RefreshToken = token.RefreshToken
47
op.MustSaveDriverStorage(d)
48
49
return nil
50
}
51
52
func (d *FebBox) Drop(ctx context.Context) error {
53
return nil
54
}
55
56
func (d *FebBox) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) {
57
files, err := d.getFilesList(dir.GetID())
58
if err != nil {
59
return nil, err
60
}
61
return utils.SliceConvert(files, func(src File) (model.Obj, error) {
62
return fileToObj(src), nil
63
})
64
}
65
66
func (d *FebBox) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) {
67
var ip string
68
if d.Addition.UserIP != "" {
69
ip = d.Addition.UserIP
70
} else {
71
ip = args.IP
72
}
73
74
url, err := d.getDownloadLink(file.GetID(), ip)
75
if err != nil {
76
return nil, err
77
}
78
return &model.Link{
79
URL: url,
80
}, nil
81
}
82
83
func (d *FebBox) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) (model.Obj, error) {
84
err := d.makeDir(parentDir.GetID(), dirName)
85
if err != nil {
86
return nil, err
87
}
88
89
return nil, nil
90
}
91
92
func (d *FebBox) Move(ctx context.Context, srcObj, dstDir model.Obj) (model.Obj, error) {
93
err := d.move(srcObj.GetID(), dstDir.GetID())
94
if err != nil {
95
return nil, err
96
}
97
98
return nil, nil
99
}
100
101
func (d *FebBox) Rename(ctx context.Context, srcObj model.Obj, newName string) (model.Obj, error) {
102
err := d.rename(srcObj.GetID(), newName)
103
if err != nil {
104
return nil, err
105
}
106
107
return nil, nil
108
}
109
110
func (d *FebBox) Copy(ctx context.Context, srcObj, dstDir model.Obj) (model.Obj, error) {
111
err := d.copy(srcObj.GetID(), dstDir.GetID())
112
if err != nil {
113
return nil, err
114
}
115
116
return nil, nil
117
}
118
119
func (d *FebBox) Remove(ctx context.Context, obj model.Obj) error {
120
err := d.remove(obj.GetID())
121
if err != nil {
122
return err
123
}
124
125
return nil
126
}
127
128
func (d *FebBox) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) (model.Obj, error) {
129
return nil, errs.NotImplement
130
}
131
132
var _ driver.Driver = (*FebBox)(nil)
133
134