mirror of
https://github.com/rclone/rclone.git
synced 2025-12-11 22:14:05 +01:00
webdav: use SpaceSepList to parse bearer token command
Some checks failed
build / windows (push) Has been cancelled
build / other_os (push) Has been cancelled
build / mac_amd64 (push) Has been cancelled
build / mac_arm64 (push) Has been cancelled
build / linux (push) Has been cancelled
build / go1.24 (push) Has been cancelled
build / linux_386 (push) Has been cancelled
build / lint (push) Has been cancelled
build / android-all (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/386 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/amd64 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm/v6 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm/v7 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm64 (push) Has been cancelled
Build & Push Docker Images / Merge & Push Final Docker Image (push) Has been cancelled
Some checks failed
build / windows (push) Has been cancelled
build / other_os (push) Has been cancelled
build / mac_amd64 (push) Has been cancelled
build / mac_arm64 (push) Has been cancelled
build / linux (push) Has been cancelled
build / go1.24 (push) Has been cancelled
build / linux_386 (push) Has been cancelled
build / lint (push) Has been cancelled
build / android-all (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/386 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/amd64 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm/v6 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm/v7 (push) Has been cancelled
Build & Push Docker Images / Build Docker Image for linux/arm64 (push) Has been cancelled
Build & Push Docker Images / Merge & Push Final Docker Image (push) Has been cancelled
This commit is contained in:
@@ -194,7 +194,7 @@ type Options struct {
|
|||||||
User string `config:"user"`
|
User string `config:"user"`
|
||||||
Pass string `config:"pass"`
|
Pass string `config:"pass"`
|
||||||
BearerToken string `config:"bearer_token"`
|
BearerToken string `config:"bearer_token"`
|
||||||
BearerTokenCommand string `config:"bearer_token_command"`
|
BearerTokenCommand fs.SpaceSepList `config:"bearer_token_command"`
|
||||||
Enc encoder.MultiEncoder `config:"encoding"`
|
Enc encoder.MultiEncoder `config:"encoding"`
|
||||||
Headers fs.CommaSepList `config:"headers"`
|
Headers fs.CommaSepList `config:"headers"`
|
||||||
PacerMinSleep fs.Duration `config:"pacer_min_sleep"`
|
PacerMinSleep fs.Duration `config:"pacer_min_sleep"`
|
||||||
@@ -285,7 +285,7 @@ func (f *Fs) shouldRetry(ctx context.Context, resp *http.Response, err error) (b
|
|||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
// If we have a bearer token command and it has expired then refresh it
|
// If we have a bearer token command and it has expired then refresh it
|
||||||
if f.opt.BearerTokenCommand != "" && resp != nil && resp.StatusCode == 401 {
|
if len(f.opt.BearerTokenCommand) != 0 && resp != nil && resp.StatusCode == 401 {
|
||||||
fs.Debugf(f, "Bearer token expired: %v", err)
|
fs.Debugf(f, "Bearer token expired: %v", err)
|
||||||
authErr := f.fetchAndSetBearerToken()
|
authErr := f.fetchAndSetBearerToken()
|
||||||
if authErr != nil {
|
if authErr != nil {
|
||||||
@@ -519,7 +519,7 @@ func NewFs(ctx context.Context, name, root string, m configmap.Mapper) (fs.Fs, e
|
|||||||
f.srv.SetUserPass(opt.User, opt.Pass)
|
f.srv.SetUserPass(opt.User, opt.Pass)
|
||||||
} else if opt.BearerToken != "" {
|
} else if opt.BearerToken != "" {
|
||||||
f.setBearerToken(opt.BearerToken)
|
f.setBearerToken(opt.BearerToken)
|
||||||
} else if f.opt.BearerTokenCommand != "" {
|
} else if len(f.opt.BearerTokenCommand) != 0 {
|
||||||
err = f.fetchAndSetBearerToken()
|
err = f.fetchAndSetBearerToken()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@@ -566,12 +566,11 @@ func (f *Fs) setBearerToken(token string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// fetch the bearer token using the command
|
// fetch the bearer token using the command
|
||||||
func (f *Fs) fetchBearerToken(cmd string) (string, error) {
|
func (f *Fs) fetchBearerToken(cmd fs.SpaceSepList) (string, error) {
|
||||||
var (
|
var (
|
||||||
args = strings.Split(cmd, " ")
|
|
||||||
stdout bytes.Buffer
|
stdout bytes.Buffer
|
||||||
stderr bytes.Buffer
|
stderr bytes.Buffer
|
||||||
c = exec.Command(args[0], args[1:]...)
|
c = exec.Command(cmd[0], cmd[1:]...)
|
||||||
)
|
)
|
||||||
c.Stdout = &stdout
|
c.Stdout = &stdout
|
||||||
c.Stderr = &stderr
|
c.Stderr = &stderr
|
||||||
@@ -612,7 +611,7 @@ func (f *Fs) findHeader(headers fs.CommaSepList, find string) bool {
|
|||||||
// fetch the bearer token and set it if successful
|
// fetch the bearer token and set it if successful
|
||||||
func (f *Fs) fetchAndSetBearerToken() error {
|
func (f *Fs) fetchAndSetBearerToken() error {
|
||||||
_, err, _ := f.authSingleflight.Do("bearerToken", func() (interface{}, error) {
|
_, err, _ := f.authSingleflight.Do("bearerToken", func() (interface{}, error) {
|
||||||
if f.opt.BearerTokenCommand == "" {
|
if len(f.opt.BearerTokenCommand) == 0 {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
token, err := f.fetchBearerToken(f.opt.BearerTokenCommand)
|
token, err := f.fetchBearerToken(f.opt.BearerTokenCommand)
|
||||||
|
|||||||
Reference in New Issue
Block a user