79 lines
2.4 KiB
Go
79 lines
2.4 KiB
Go
package alidrive
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/Xhofe/alist/conf"
|
|
"github.com/Xhofe/alist/utils"
|
|
log "github.com/sirupsen/logrus"
|
|
)
|
|
|
|
// use token login
|
|
func TokenLogin() (*TokenLoginResp, error) {
|
|
log.Infof("尝试使用token登录...")
|
|
url := "https://auth.aliyundrive.com/v2/oauth/token_login"
|
|
req := TokenLoginReq{Token: conf.Conf.AliDrive.LoginToken}
|
|
log.Debugf("token_login_req:%+v", req)
|
|
var tokenLogin TokenLoginResp
|
|
if body, err := DoPost(url, req, false); err != nil {
|
|
log.Errorf("tokenLogin-doPost出错:%s", err.Error())
|
|
return nil, err
|
|
} else {
|
|
if err = json.Unmarshal(body, &tokenLogin); err != nil {
|
|
log.Errorf("解析json[%s]出错:%s", string(body), err.Error())
|
|
return nil, err
|
|
}
|
|
}
|
|
if tokenLogin.IsAvailable() {
|
|
return &tokenLogin, nil
|
|
}
|
|
return nil, fmt.Errorf("登录token失效,请更换:%s", tokenLogin.Message)
|
|
}
|
|
|
|
// get access token
|
|
func GetToken(tokenLogin *TokenLoginResp) (*TokenResp, error) {
|
|
log.Infof("获取API token...")
|
|
url := "https://websv.aliyundrive.com/token/get"
|
|
code := utils.GetCode(tokenLogin.Goto)
|
|
if code == "" {
|
|
return nil, fmt.Errorf("获取code出错")
|
|
}
|
|
req := GetTokenReq{Code: code}
|
|
var token TokenResp
|
|
if body, err := DoPost(url, req, false); err != nil {
|
|
log.Errorf("tokenLogin-doPost出错:%s", err.Error())
|
|
return nil, err
|
|
} else {
|
|
if err = json.Unmarshal(body, &token); err != nil {
|
|
log.Errorf("解析json[%s]出错:%s", string(body), err.Error())
|
|
log.Errorf("此处json解析失败应该是code失效")
|
|
return nil, fmt.Errorf("code失效")
|
|
}
|
|
}
|
|
return &token, nil
|
|
}
|
|
|
|
// refresh access_token token by refresh_token
|
|
func RefreshToken() bool {
|
|
log.Infof("刷新token...")
|
|
url := "https://websv.aliyundrive.com/token/refresh"
|
|
req := RefreshTokenReq{RefreshToken: conf.Conf.AliDrive.RefreshToken}
|
|
var token TokenResp
|
|
if body, err := DoPost(url, req, false); err != nil {
|
|
log.Errorf("tokenLogin-doPost出错:%s", err.Error())
|
|
return false
|
|
} else {
|
|
if err = json.Unmarshal(body, &token); err != nil {
|
|
log.Errorf("解析json[%s]出错:%s", string(body), err.Error())
|
|
log.Errorf("此处json解析失败应该是refresh_token失效")
|
|
return false
|
|
}
|
|
}
|
|
//刷新成功 更新token并写入文件
|
|
conf.Conf.AliDrive.AccessToken = token.AccessToken
|
|
conf.Conf.AliDrive.RefreshToken = token.RefreshToken
|
|
conf.Authorization = token.TokenType + "\t" + token.AccessToken
|
|
utils.WriteToYml(conf.Con, conf.Conf)
|
|
return true
|
|
}
|