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  }