thunder_browser

package
v3.37.1 Latest Latest
Warning

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

Go to latest
Published: Sep 8, 2024 License: AGPL-3.0 Imports: 23 Imported by: 0

Documentation

Index

Constants

View Source
const (
	API_URL        = "https://x-api-pan.xunlei.com/drive/v1"
	FILE_API_URL   = API_URL + "/files"
	XLUSER_API_URL = "https://xluser-ssl.xunlei.com/v1"
)
View Source
const (
	ClientID          = "ZUBzD9J_XPXfn7f7"
	ClientSecret      = "yESVmHecEe6F0aou69vl-g"
	ClientVersion     = "1.10.0.2633"
	PackageName       = "com.xunlei.browser"
	DownloadUserAgent = "AndroidDownloadManager/13 (Linux; U; Android 13; M2004J7AC Build/SP1A.210812.016)"
	SdkVersion        = "233100"
)
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 (
	ThunderDriveSpace                 = ""
	ThunderDriveSafeSpace             = "SPACE_SAFE"
	ThunderBrowserDriveSpace          = "SPACE_BROWSER"
	ThunderBrowserDriveSafeSpace      = "SPACE_BROWSER_SAFE"
	ThunderDriveFolderType            = "DEFAULT_ROOT"
	ThunderBrowserDriveSafeFolderType = "BROWSER_SAFE"
)

Variables

View Source
var Algorithms = []string{
	"uWRwO7gPfdPB/0NfPtfQO+71",
	"F93x+qPluYy6jdgNpq+lwdH1ap6WOM+nfz8/V",
	"0HbpxvpXFsBK5CoTKam",
	"dQhzbhzFRcawnsZqRETT9AuPAJ+wTQso82mRv",
	"SAH98AmLZLRa6DB2u68sGhyiDh15guJpXhBzI",
	"unqfo7Z64Rie9RNHMOB",
	"7yxUdFADp3DOBvXdz0DPuKNVT35wqa5z0DEyEvf",
	"RBG",
	"ThTWPG5eC0UBqlbQ+04nZAptqGCdpv9o55A",
}

Functions

func BuildCustomUserAgent

func BuildCustomUserAgent(deviceID, appName, sdkVersion, clientVersion, packageName string) string

func EncryptPassword

func EncryptPassword(password string) string

EncryptPassword 超级保险箱 加密

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"`
	SafePassword string `json:"safe_password" required:"true"` // 超级保险箱密码
	CaptchaToken string `json:"captcha_token"`
	UseVideoUrl  bool   `json:"use_video_url" default:"false"`
	RemoveWay    string `json:"remove_way" required:"true" type:"select" options:"trash,delete"`
}

func (*Addition) GetIdentity

func (i *Addition) GetIdentity() string

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

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
	RemoveWay         string
	// contains filtered or unexported fields
}

func (*Common) GetCaptchaSign

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

GetCaptchaSign 获取验证码签名

func (*Common) GetCaptchaToken

func (c *Common) GetCaptchaToken() string

func (*Common) RefreshCaptchaTokenAtLogin

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

RefreshCaptchaTokenAtLogin 刷新验证码token(登录后)

func (*Common) RefreshCaptchaTokenInLogin

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

RefreshCaptchaTokenInLogin 刷新验证码token(登录时)

func (*Common) Request

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

Request 只有基础信息的请求

func (*Common) SetCaptchaToken

func (c *Common) SetCaptchaToken(captchaToken string)

func (*Common) SetDeviceID

func (c *Common) SetDeviceID(deviceID string)

type CustomTime

type CustomTime struct {
	time.Time
}

func (*CustomTime) UnmarshalJSON

func (ct *CustomTime) UnmarshalJSON(b []byte) error

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"`

	SafePassword string `json:"safe_password" required:"true" help:"super safe password"` // 超级保险箱密码

	// 签名方法1
	Algorithms string `` /* 350-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"`

	// 必要且影响登录,由签名决定
	DeviceID      string `json:"device_id"  required:"false" default:""`
	ClientID      string `json:"client_id"  required:"true" default:"ZUBzD9J_XPXfn7f7"`
	ClientSecret  string `json:"client_secret"  required:"true" default:"yESVmHecEe6F0aou69vl-g"`
	ClientVersion string `json:"client_version"  required:"true" default:"1.10.0.2633"`
	PackageName   string `json:"package_name"  required:"true" default:"com.xunlei.browser"`

	// 不影响登录,影响下载速度
	UserAgent         string `json:"user_agent"  required:"false" default:""`
	DownloadUserAgent string `json:"download_user_agent"  required:"false" default:""`

	// 优先使用视频链接代替下载链接
	UseVideoUrl bool `json:"use_video_url"`
	// 移除方式
	RemoveWay string `json:"remove_way" required:"true" type:"select" options:"trash,delete"`
}

ExpertAddition 高级设置

func (*ExpertAddition) GetIdentity

func (i *ExpertAddition) GetIdentity() string

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

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"`
	FolderType      int8
}

* 文件 *

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    CustomTime `json:"created_time"`
	ModifiedTime   CustomTime `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"`
	//Params            struct{} `json:"params"`
	//OriginalFileIndex int    `json:"original_file_index"`
	Space string `json:"space"`
	//Apps              []interface{} `json:"apps"`
	//Writable   bool   `json:"writable"`
	FolderType string `json:"folder_type"`
	//Collection interface{} `json:"collection"`
	SortName         string     `json:"sort_name"`
	UserModifiedTime CustomTime `json:"user_modified_time"`
}

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) GetSpace added in v3.37.0

func (c *Files) GetSpace() string

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 SignInRequest

type SignInRequest struct {
	CaptchaToken string `json:"captcha_token"`

	ClientID     string `json:"client_id"`
	ClientSecret string `json:"client_secret"`

	Username string `json:"username"`
	Password string `json:"password"`
}

type ThunderBrowser

type ThunderBrowser struct {
	*XunLeiBrowserCommon
	model.Storage
	Addition
	// contains filtered or unexported fields
}

func (*ThunderBrowser) Config

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

func (*ThunderBrowser) Drop

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

func (*ThunderBrowser) GetAddition

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

func (*ThunderBrowser) Init

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

type ThunderBrowserExpert

type ThunderBrowserExpert struct {
	*XunLeiBrowserCommon
	model.Storage
	ExpertAddition
	// contains filtered or unexported fields
}

func (*ThunderBrowserExpert) Config

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

func (*ThunderBrowserExpert) Drop

func (*ThunderBrowserExpert) GetAddition

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

func (*ThunderBrowserExpert) Init

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

func (*ThunderBrowserExpert) SetTokenResp

func (x *ThunderBrowserExpert) 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"`

	Token string `json:"token"` // "超级保险箱" 访问Token
}

* 登录 *

func (*TokenResp) GetSpaceToken

func (t *TokenResp) GetSpaceToken() string

GetSpaceToken 获取"超级保险箱" 访问Token

func (*TokenResp) GetToken

func (t *TokenResp) GetToken() 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 XunLeiBrowserCommon

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

func (*XunLeiBrowserCommon) Copy

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

func (*XunLeiBrowserCommon) GetSafeAccessToken

func (xc *XunLeiBrowserCommon) GetSafeAccessToken(safePassword string) (string, error)

GetSafeAccessToken 获取 超级保险柜 AccessToken

func (*XunLeiBrowserCommon) IsLogin

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

func (*XunLeiBrowserCommon) List

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

func (*XunLeiBrowserCommon) Login

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

Login 登录

func (*XunLeiBrowserCommon) MakeDir

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

func (*XunLeiBrowserCommon) Move

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

func (*XunLeiBrowserCommon) Put

func (*XunLeiBrowserCommon) RefreshToken

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

RefreshToken 刷新Token

func (*XunLeiBrowserCommon) Remove

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

func (*XunLeiBrowserCommon) Rename

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

func (*XunLeiBrowserCommon) Request

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

Request 携带Authorization和CaptchaToken的请求

func (*XunLeiBrowserCommon) SetRefreshTokenFunc

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

SetRefreshTokenFunc 设置刷新Token的方法

func (*XunLeiBrowserCommon) SetSpaceTokenResp

func (xc *XunLeiBrowserCommon) SetSpaceTokenResp(spaceToken string)

SetSpaceTokenResp 设置Token

func (*XunLeiBrowserCommon) SetTokenResp

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

SetTokenResp 设置Token

Jump to

Keyboard shortcuts

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