github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/filesystem/driver/onedrive/client.go (about) 1 package onedrive 2 3 import ( 4 "errors" 5 "github.com/cloudreve/Cloudreve/v3/pkg/cluster" 6 7 model "github.com/cloudreve/Cloudreve/v3/models" 8 "github.com/cloudreve/Cloudreve/v3/pkg/request" 9 ) 10 11 var ( 12 // ErrAuthEndpoint 无法解析授权端点地址 13 ErrAuthEndpoint = errors.New("failed to parse endpoint url") 14 // ErrInvalidRefreshToken 上传策略无有效的RefreshToken 15 ErrInvalidRefreshToken = errors.New("no valid refresh token in this policy") 16 // ErrDeleteFile 无法删除文件 17 ErrDeleteFile = errors.New("cannot delete file") 18 // ErrClientCanceled 客户端取消操作 19 ErrClientCanceled = errors.New("client canceled") 20 // Desired thumb size not available 21 ErrThumbSizeNotFound = errors.New("thumb size not found") 22 ) 23 24 // Client OneDrive客户端 25 type Client struct { 26 Endpoints *Endpoints 27 Policy *model.Policy 28 Credential *Credential 29 30 ClientID string 31 ClientSecret string 32 Redirect string 33 34 Request request.Client 35 ClusterController cluster.Controller 36 } 37 38 // Endpoints OneDrive客户端相关设置 39 type Endpoints struct { 40 OAuthURL string // OAuth认证的基URL 41 OAuthEndpoints *oauthEndpoint 42 EndpointURL string // 接口请求的基URL 43 isInChina bool // 是否为世纪互联 44 DriverResource string // 要使用的驱动器 45 } 46 47 // NewClient 根据存储策略获取新的client 48 func NewClient(policy *model.Policy) (*Client, error) { 49 client := &Client{ 50 Endpoints: &Endpoints{ 51 OAuthURL: policy.BaseURL, 52 EndpointURL: policy.Server, 53 DriverResource: policy.OptionsSerialized.OdDriver, 54 }, 55 Credential: &Credential{ 56 RefreshToken: policy.AccessKey, 57 }, 58 Policy: policy, 59 ClientID: policy.BucketName, 60 ClientSecret: policy.SecretKey, 61 Redirect: policy.OptionsSerialized.OauthRedirect, 62 Request: request.NewClient(), 63 ClusterController: cluster.DefaultController, 64 } 65 66 if client.Endpoints.DriverResource == "" { 67 client.Endpoints.DriverResource = "me/drive" 68 } 69 70 oauthBase := client.getOAuthEndpoint() 71 if oauthBase == nil { 72 return nil, ErrAuthEndpoint 73 } 74 client.Endpoints.OAuthEndpoints = oauthBase 75 76 return client, nil 77 }