thunder

package
v4.1.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 10, 2025 License: AGPL-3.0 Imports: 26 Imported by: 2

Documentation

Index

Constants

View Source
const (
	API_URL             = "https://api-pan.xunlei.com/drive/v1"
	FILE_API_URL        = API_URL + "/files"
	TASK_API_URL        = API_URL + "/tasks"
	XLUSER_API_BASE_URL = "https://xluser-ssl.xunlei.com"
	XLUSER_API_URL      = XLUSER_API_BASE_URL + "/v1"
)
View Source
const (
	FOLDER    = "drive#folder"
	FILE      = "drive#file"
	RESUMABLE = "drive#resumable"
)
View Source
const (
	UPLOAD_TYPE_UNKNOWN = "UPLOAD_TYPE_UNKNOWN"
	//UPLOAD_TYPE_FORM      = "UPLOAD_TYPE_FORM"
	UPLOAD_TYPE_RESUMABLE = "UPLOAD_TYPE_RESUMABLE"
	UPLOAD_TYPE_URL       = "UPLOAD_TYPE_URL"
)
View Source
const (
	SignProvider = "access_end_point_token"
	APPID        = "40"
	APPKey       = "34a062aaa22f906fca4fefe9fb3a3021"
)

Variables

This section is empty.

Functions

func GetAction

func GetAction(method string, url string) string

Types

type Addition

type Addition struct {
	driver.RootID
	Username     string `json:"username" required:"true"`
	Password     string `json:"password" required:"true"`
	CaptchaToken string `json:"captcha_token"`
	// 信任密钥
	CreditKey string `json:"credit_key" help:"credit key,used for login"`
	// 登录设备ID
	DeviceID string `json:"device_id" default:""`

	Space string `json:"space" default:"" help:"device id for remote device"`
}

func (*Addition) GetIdentity

func (i *Addition) GetIdentity() string

登录特征,用于判断是否重新登录

type CaptchaTokenRequest

type CaptchaTokenRequest struct {
	Action       string            `json:"action"`
	CaptchaToken string            `json:"captcha_token"`
	ClientID     string            `json:"client_id"`
	DeviceID     string            `json:"device_id"`
	Meta         map[string]string `json:"meta"`
	RedirectUri  string            `json:"redirect_uri"`
}

* 验证码Token *

type CaptchaTokenResponse

type CaptchaTokenResponse struct {
	CaptchaToken string `json:"captcha_token"`
	ExpiresIn    int64  `json:"expires_in"`
	Url          string `json:"url"`
}

type Common

type Common struct {

	// 签名相关,二选一
	Algorithms             []string
	Timestamp, CaptchaSign string

	// 必要值,签名相关
	DeviceID          string
	ClientID          string
	ClientSecret      string
	ClientVersion     string
	PackageName       string
	UserAgent         string
	DownloadUserAgent string
	UseVideoUrl       bool
	Space             string
	// contains filtered or unexported fields
}

func (*Common) GetCaptchaSign

func (c *Common) GetCaptchaSign() (timestamp, sign string)

获取验证码签名

func (*Common) GetCaptchaToken

func (c *Common) GetCaptchaToken() string

func (*Common) GetCreditKey

func (c *Common) GetCreditKey() string

func (*Common) RefreshCaptchaTokenAtLogin

func (c *Common) RefreshCaptchaTokenAtLogin(action, userID string) error

刷新验证码token(登录后)

func (*Common) RefreshCaptchaTokenInLogin

func (c *Common) RefreshCaptchaTokenInLogin(action, username string) error

刷新验证码token(登录时)

func (*Common) Request

func (c *Common) Request(url, method string, callback base.ReqCallback, resp interface{}) ([]byte, error)

只有基础信息的请求

func (*Common) SetCaptchaToken

func (c *Common) SetCaptchaToken(captchaToken string)

func (*Common) SetCreditKey

func (c *Common) SetCreditKey(creditKey string)

type CoreLoginRequest

type CoreLoginRequest struct {
	ProtocolVersion string `json:"protocolVersion"`
	SequenceNo      string `json:"sequenceNo"`
	PlatformVersion string `json:"platformVersion"`
	IsCompressed    string `json:"isCompressed"`
	Appid           string `json:"appid"`
	ClientVersion   string `json:"clientVersion"`
	PeerID          string `json:"peerID"`
	AppName         string `json:"appName"`
	SdkVersion      string `json:"sdkVersion"`
	Devicesign      string `json:"devicesign"`
	NetWorkType     string `json:"netWorkType"`
	ProviderName    string `json:"providerName"`
	DeviceModel     string `json:"deviceModel"`
	DeviceName      string `json:"deviceName"`
	OSVersion       string `json:"OSVersion"`
	Creditkey       string `json:"creditkey"`
	Hl              string `json:"hl"`
	UserName        string `json:"userName"`
	PassWord        string `json:"passWord"`
	VerifyKey       string `json:"verifyKey"`
	VerifyCode      string `json:"verifyCode"`
	IsMd5Pwd        string `json:"isMd5Pwd"`
}

type CoreLoginResp

type CoreLoginResp struct {
	Account   string `json:"account"`
	Creditkey string `json:"creditkey"`
	/*	Error              string `json:"error"`
		ErrorCode          string `json:"errorCode"`
		ErrorDescription   string `json:"error_description"`*/
	ExpiresIn          int    `json:"expires_in"`
	IsCompressed       string `json:"isCompressed"`
	IsSetPassWord      string `json:"isSetPassWord"`
	KeepAliveMinPeriod string `json:"keepAliveMinPeriod"`
	KeepAlivePeriod    string `json:"keepAlivePeriod"`
	LoginKey           string `json:"loginKey"`
	NickName           string `json:"nickName"`
	PlatformVersion    string `json:"platformVersion"`
	ProtocolVersion    string `json:"protocolVersion"`
	SecureKey          string `json:"secureKey"`
	SequenceNo         string `json:"sequenceNo"`
	SessionID          string `json:"sessionID"`
	Timestamp          string `json:"timestamp"`
	UserID             string `json:"userID"`
	UserName           string `json:"userName"`
	UserNewNo          string `json:"userNewNo"`
	Version            string `json:"version"`
}

type ErrResp

type ErrResp struct {
	ErrorCode        int64  `json:"error_code"`
	ErrorMsg         string `json:"error"`
	ErrorDescription string `json:"error_description"`
}

func (*ErrResp) Error

func (e *ErrResp) Error() string

func (*ErrResp) IsError

func (e *ErrResp) IsError() bool

type ExpertAddition

type ExpertAddition struct {
	driver.RootID

	LoginType string `json:"login_type" type:"select" options:"user,refresh_token" default:"user"`
	SignType  string `json:"sign_type" type:"select" options:"algorithms,captcha_sign" default:"algorithms"`

	// 登录方式1
	Username string `json:"username" required:"true" help:"login type is user,this is required"`
	Password string `json:"password" required:"true" help:"login type is user,this is required"`
	// 登录方式2
	RefreshToken string `json:"refresh_token" required:"true" help:"login type is refresh_token,this is required"`

	// 签名方法1
	Algorithms string `` /* 352-byte string literal not displayed */
	// 签名方法2
	CaptchaSign string `json:"captcha_sign" required:"true" help:"sign type is captcha_sign,this is required"`
	Timestamp   string `json:"timestamp" required:"true" help:"sign type is captcha_sign,this is required"`

	// 验证码
	CaptchaToken string `json:"captcha_token"`
	// 信任密钥
	CreditKey string `json:"credit_key" help:"credit key,used for login"`

	// 必要且影响登录,由签名决定
	DeviceID      string `json:"device_id" default:""`
	ClientID      string `json:"client_id"  required:"true" default:"Xp6vsxz_7IYVw2BB"`
	ClientSecret  string `json:"client_secret"  required:"true" default:"Xp6vsy4tN9toTVdMSpomVdXpRmES"`
	ClientVersion string `json:"client_version"  required:"true" default:"8.31.0.9726"`
	PackageName   string `json:"package_name"  required:"true" default:"com.xunlei.downloadprovider"`

	//不影响登录,影响下载速度
	UserAgent         string `` /* 298-byte string literal not displayed */
	DownloadUserAgent string `json:"download_user_agent"  required:"true" default:"Dalvik/2.1.0 (Linux; U; Android 12; M2004J7AC Build/SP1A.210812.016)"`

	//优先使用视频链接代替下载链接
	UseVideoUrl bool `json:"use_video_url"`

	Space string `json:"space" default:"" help:"device id for remote device"`
}

高级设置

func (*ExpertAddition) GetIdentity

func (i *ExpertAddition) GetIdentity() string

登录特征,用于判断是否重新登录

type FileList

type FileList struct {
	Kind            string  `json:"kind"`
	NextPageToken   string  `json:"next_page_token"`
	Files           []Files `json:"files"`
	Version         string  `json:"version"`
	VersionOutdated bool    `json:"version_outdated"`
}

* 文件 *

type Files

type Files struct {
	Kind     string `json:"kind"`
	ID       string `json:"id"`
	ParentID string `json:"parent_id"`
	Name     string `json:"name"`
	//UserID         string    `json:"user_id"`
	Size string `json:"size"`
	//Revision       string    `json:"revision"`
	//FileExtension  string    `json:"file_extension"`
	//MimeType       string    `json:"mime_type"`
	//Starred        bool      `json:"starred"`
	WebContentLink string    `json:"web_content_link"`
	CreatedTime    time.Time `json:"created_time"`
	ModifiedTime   time.Time `json:"modified_time"`
	IconLink       string    `json:"icon_link"`
	ThumbnailLink  string    `json:"thumbnail_link"`
	// Md5Checksum    string    `json:"md5_checksum"`
	Hash string `json:"hash"`
	// Links map[string]Link `json:"links"`
	// Phase string          `json:"phase"`
	// Audit struct {
	// 	Status  string `json:"status"`
	// 	Message string `json:"message"`
	// 	Title   string `json:"title"`
	// } `json:"audit"`
	Medias []struct {
		//Category       string `json:"category"`
		//IconLink       string `json:"icon_link"`
		//IsDefault      bool   `json:"is_default"`
		//IsOrigin       bool   `json:"is_origin"`
		//IsVisible      bool   `json:"is_visible"`
		Link Link `json:"link"`
	} `json:"medias"`
	Trashed     bool   `json:"trashed"`
	DeleteTime  string `json:"delete_time"`
	OriginalURL string `json:"original_url"`
}

func (*Files) CreateTime

func (c *Files) CreateTime() time.Time

func (*Files) GetHash

func (c *Files) GetHash() utils.HashInfo

func (*Files) GetID

func (c *Files) GetID() string

func (*Files) GetName

func (c *Files) GetName() string

func (*Files) GetPath

func (c *Files) GetPath() string

func (*Files) GetSize

func (c *Files) GetSize() int64

func (*Files) IsDir

func (c *Files) IsDir() bool

func (*Files) ModTime

func (c *Files) ModTime() time.Time

func (*Files) Thumb

func (c *Files) Thumb() string
type Link struct {
	URL    string    `json:"url"`
	Token  string    `json:"token"`
	Expire time.Time `json:"expire"`
	Type   string    `json:"type"`
}

type LoginReviewResp

type LoginReviewResp struct {
	Creditkey        string `json:"creditkey"`
	Error            string `json:"error"`
	ErrorCode        string `json:"errorCode"`
	ErrorDesc        string `json:"errorDesc"`
	ErrorDescURL     string `json:"errorDescUrl"`
	ErrorIsRetry     int    `json:"errorIsRetry"`
	ErrorDescription string `json:"error_description"`
	IsCompressed     string `json:"isCompressed"`
	PlatformVersion  string `json:"platformVersion"`
	ProtocolVersion  string `json:"protocolVersion"`
	Reviewurl        string `json:"reviewurl"`
	SequenceNo       string `json:"sequenceNo"`
	UserID           string `json:"userID"`
	VerifyType       string `json:"verifyType"`
}

LoginReviewResp 登录验证响应

type OfflineDownloadResp

type OfflineDownloadResp struct {
	File       *string     `json:"file"`
	Task       OfflineTask `json:"task"`
	UploadType string      `json:"upload_type"`
	URL        struct {
		Kind string `json:"kind"`
	} `json:"url"`
}

添加离线下载响应

type OfflineListResp

type OfflineListResp struct {
	ExpiresIn     int64         `json:"expires_in"`
	NextPageToken string        `json:"next_page_token"`
	Tasks         []OfflineTask `json:"tasks"`
}

离线下载列表

type OfflineTask

type OfflineTask struct {
	Callback    string   `json:"callback"`
	CreatedTime string   `json:"created_time"`
	FileID      string   `json:"file_id"`
	FileName    string   `json:"file_name"`
	FileSize    string   `json:"file_size"`
	IconLink    string   `json:"icon_link"`
	ID          string   `json:"id"`
	Kind        string   `json:"kind"`
	Message     string   `json:"message"`
	Name        string   `json:"name"`
	Params      Params   `json:"params"`
	Phase       string   `json:"phase"` // PHASE_TYPE_RUNNING, PHASE_TYPE_ERROR, PHASE_TYPE_COMPLETE, PHASE_TYPE_PENDING
	Progress    int64    `json:"progress"`
	Space       string   `json:"space"`
	StatusSize  int64    `json:"status_size"`
	Statuses    []string `json:"statuses"`
	ThirdTaskID string   `json:"third_task_id"`
	Type        string   `json:"type"`
	UpdatedTime string   `json:"updated_time"`
	UserID      string   `json:"user_id"`
}

offlineTask

type Params

type Params struct {
	FolderType   string `json:"folder_type"`
	PredictSpeed string `json:"predict_speed"`
	PredictType  string `json:"predict_type"`
}

type ReviewData

type ReviewData struct {
	Creditkey  string `json:"creditkey"`
	Reviewurl  string `json:"reviewurl"`
	Deviceid   string `json:"deviceid"`
	Devicesign string `json:"devicesign"`
}

ReviewData 验证数据

type SignInRequest

type SignInRequest struct {
	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret"`

	Provider    string `json:"provider"`
	SigninToken string `json:"signin_token"`
}

type Thunder

type Thunder struct {
	*XunLeiCommon
	model.Storage
	Addition
	// contains filtered or unexported fields
}

func (*Thunder) Config

func (x *Thunder) Config() driver.Config

func (*Thunder) Drop

func (x *Thunder) Drop(ctx context.Context) error

func (*Thunder) GetAddition

func (x *Thunder) GetAddition() driver.Additional

func (*Thunder) Init

func (x *Thunder) Init(ctx context.Context) (err error)

type ThunderExpert

type ThunderExpert struct {
	*XunLeiCommon
	model.Storage
	ExpertAddition
	// contains filtered or unexported fields
}

func (*ThunderExpert) Config

func (x *ThunderExpert) Config() driver.Config

func (*ThunderExpert) Drop

func (x *ThunderExpert) Drop(ctx context.Context) error

func (*ThunderExpert) GetAddition

func (x *ThunderExpert) GetAddition() driver.Additional

func (*ThunderExpert) Init

func (x *ThunderExpert) Init(ctx context.Context) (err error)

func (*ThunderExpert) SetTokenResp

func (x *ThunderExpert) SetTokenResp(token *TokenResp)

type TokenResp

type TokenResp struct {
	TokenType    string `json:"token_type"`
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
	ExpiresIn    int64  `json:"expires_in"`

	Sub    string `json:"sub"`
	UserID string `json:"user_id"`
}

* 登录 *

func (*TokenResp) Token

func (t *TokenResp) Token() string

type UploadTaskResponse

type UploadTaskResponse struct {
	UploadType string `json:"upload_type"`

	//UPLOAD_TYPE_RESUMABLE
	Resumable struct {
		Kind   string `json:"kind"`
		Params struct {
			AccessKeyID     string    `json:"access_key_id"`
			AccessKeySecret string    `json:"access_key_secret"`
			Bucket          string    `json:"bucket"`
			Endpoint        string    `json:"endpoint"`
			Expiration      time.Time `json:"expiration"`
			Key             string    `json:"key"`
			SecurityToken   string    `json:"security_token"`
		} `json:"params"`
		Provider string `json:"provider"`
	} `json:"resumable"`

	File Files `json:"file"`
}

* 上传 *

type XunLeiCommon

type XunLeiCommon struct {
	*Common
	*TokenResp     // 登录信息
	*CoreLoginResp // core登录信息
	// contains filtered or unexported fields
}

func (*XunLeiCommon) Copy

func (xc *XunLeiCommon) Copy(ctx context.Context, srcObj, dstDir model.Obj) error

func (*XunLeiCommon) CoreLogin

func (xc *XunLeiCommon) CoreLogin(username string, password string) (sessionID string, err error)

func (*XunLeiCommon) DeleteOfflineTasks

func (xc *XunLeiCommon) DeleteOfflineTasks(ctx context.Context, taskIDs []string, deleteFiles bool) error

func (*XunLeiCommon) IsLogin

func (xc *XunLeiCommon) IsLogin() bool
func (xc *XunLeiCommon) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error)

func (*XunLeiCommon) List

func (xc *XunLeiCommon) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error)

func (*XunLeiCommon) Login

func (xc *XunLeiCommon) Login(username, password string) (*TokenResp, error)

登录

func (*XunLeiCommon) MakeDir

func (xc *XunLeiCommon) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error

func (*XunLeiCommon) Move

func (xc *XunLeiCommon) Move(ctx context.Context, srcObj, dstDir model.Obj) error

func (*XunLeiCommon) OfflineDownload

func (xc *XunLeiCommon) OfflineDownload(ctx context.Context, fileUrl string, parentDir model.Obj, fileName string) (*OfflineTask, error)

离线下载文件

func (*XunLeiCommon) OfflineList

func (xc *XunLeiCommon) OfflineList(ctx context.Context, nextPageToken string) ([]OfflineTask, error)

获取离线下载任务列表

func (*XunLeiCommon) Put

func (*XunLeiCommon) RefreshToken

func (xc *XunLeiCommon) RefreshToken(refreshToken string) (*TokenResp, error)

刷新Token

func (*XunLeiCommon) Remove

func (xc *XunLeiCommon) Remove(ctx context.Context, obj model.Obj) error

func (*XunLeiCommon) Rename

func (xc *XunLeiCommon) Rename(ctx context.Context, srcObj model.Obj, newName string) error

func (*XunLeiCommon) Request

func (xc *XunLeiCommon) Request(url string, method string, callback base.ReqCallback, resp interface{}) ([]byte, error)

携带Authorization和CaptchaToken的请求

func (*XunLeiCommon) SetCoreTokenResp

func (xc *XunLeiCommon) SetCoreTokenResp(tr *CoreLoginResp)

func (*XunLeiCommon) SetRefreshTokenFunc

func (xc *XunLeiCommon) SetRefreshTokenFunc(fn func() error)

设置刷新Token的方法

func (*XunLeiCommon) SetTokenResp

func (xc *XunLeiCommon) SetTokenResp(tr *TokenResp)

设置Token

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL