Init V4 community edition (#2265)
* Init V4 community edition * Init V4 community edition
This commit is contained in:
90
pkg/filemanager/driver/onedrive/client.go
Normal file
90
pkg/filemanager/driver/onedrive/client.go
Normal file
@@ -0,0 +1,90 @@
|
||||
package onedrive
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"io"
|
||||
|
||||
"github.com/cloudreve/Cloudreve/v4/ent"
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/credmanager"
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs"
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/logging"
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/setting"
|
||||
|
||||
"github.com/cloudreve/Cloudreve/v4/pkg/request"
|
||||
)
|
||||
|
||||
var (
|
||||
// ErrAuthEndpoint 无法解析授权端点地址
|
||||
ErrAuthEndpoint = errors.New("failed to parse endpoint url")
|
||||
// ErrInvalidRefreshToken 上传策略无有效的RefreshToken
|
||||
ErrInvalidRefreshToken = errors.New("no valid refresh token in this policy")
|
||||
// ErrDeleteFile 无法删除文件
|
||||
ErrDeleteFile = errors.New("cannot delete file")
|
||||
// ErrClientCanceled 客户端取消操作
|
||||
ErrClientCanceled = errors.New("client canceled")
|
||||
// Desired thumb size not available
|
||||
ErrThumbSizeNotFound = errors.New("thumb size not found")
|
||||
)
|
||||
|
||||
type Client interface {
|
||||
ListChildren(ctx context.Context, path string) ([]FileInfo, error)
|
||||
Meta(ctx context.Context, id string, path string) (*FileInfo, error)
|
||||
CreateUploadSession(ctx context.Context, dst string, opts ...Option) (string, error)
|
||||
GetSiteIDByURL(ctx context.Context, siteUrl string) (string, error)
|
||||
GetUploadSessionStatus(ctx context.Context, uploadURL string) (*UploadSessionResponse, error)
|
||||
Upload(ctx context.Context, file *fs.UploadRequest) error
|
||||
SimpleUpload(ctx context.Context, dst string, body io.Reader, size int64, opts ...Option) (*UploadResult, error)
|
||||
DeleteUploadSession(ctx context.Context, uploadURL string) error
|
||||
BatchDelete(ctx context.Context, dst []string) ([]string, error)
|
||||
GetThumbURL(ctx context.Context, dst string) (string, error)
|
||||
OAuthURL(ctx context.Context, scopes []string) string
|
||||
ObtainToken(ctx context.Context, opts ...Option) (*Credential, error)
|
||||
}
|
||||
|
||||
// client OneDrive客户端
|
||||
type client struct {
|
||||
endpoints *endpoints
|
||||
policy *ent.StoragePolicy
|
||||
credential credmanager.Credential
|
||||
|
||||
httpClient request.Client
|
||||
cred credmanager.CredManager
|
||||
l logging.Logger
|
||||
settings setting.Provider
|
||||
|
||||
chunkSize int64
|
||||
}
|
||||
|
||||
// endpoints OneDrive客户端相关设置
|
||||
type endpoints struct {
|
||||
oAuthEndpoints *oauthEndpoint
|
||||
endpointURL string // 接口请求的基URL
|
||||
driverResource string // 要使用的驱动器
|
||||
}
|
||||
|
||||
// NewClient 根据存储策略获取新的client
|
||||
func NewClient(policy *ent.StoragePolicy, httpClient request.Client, cred credmanager.CredManager,
|
||||
l logging.Logger, settings setting.Provider, chunkSize int64) Client {
|
||||
client := &client{
|
||||
endpoints: &endpoints{
|
||||
endpointURL: policy.Server,
|
||||
driverResource: policy.Settings.OdDriver,
|
||||
},
|
||||
policy: policy,
|
||||
httpClient: httpClient,
|
||||
cred: cred,
|
||||
l: l,
|
||||
settings: settings,
|
||||
chunkSize: chunkSize,
|
||||
}
|
||||
|
||||
if client.endpoints.driverResource == "" {
|
||||
client.endpoints.driverResource = "me/drive"
|
||||
}
|
||||
|
||||
oauthBase := getOAuthEndpoint(policy.Server)
|
||||
client.endpoints.oAuthEndpoints = oauthBase
|
||||
|
||||
return client
|
||||
}
|
||||
Reference in New Issue
Block a user