diff --git a/drivers/onedrive/driver.go b/drivers/onedrive/driver.go index c63a6dbd18f..50e129d99c5 100644 --- a/drivers/onedrive/driver.go +++ b/drivers/onedrive/driver.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/http" + "net/url" "path" "github.com/alist-org/alist/v3/drivers/base" @@ -57,8 +58,17 @@ func (d *Onedrive) Link(ctx context.Context, file model.Obj, args model.LinkArgs if f.File == nil { return nil, errs.NotFile } + u := f.Url + if d.CustomHost != "" { + _u, err := url.Parse(f.Url) + if err != nil { + return nil, err + } + _u.Host = d.CustomHost + u = _u.String() + } return &model.Link{ - URL: f.Url, + URL: u, }, nil } diff --git a/drivers/onedrive/meta.go b/drivers/onedrive/meta.go index f948e1a53d2..a60e5f33a93 100644 --- a/drivers/onedrive/meta.go +++ b/drivers/onedrive/meta.go @@ -15,6 +15,7 @@ type Addition struct { RefreshToken string `json:"refresh_token" required:"true"` SiteId string `json:"site_id"` ChunkSize int64 `json:"chunk_size" type:"number" default:"5"` + CustomHost string `json:"custom_host" help:"Custom host for onedrive download link"` } var config = driver.Config{ diff --git a/drivers/onedrive_app/driver.go b/drivers/onedrive_app/driver.go index ac6f232e7c4..84ff878a4d2 100644 --- a/drivers/onedrive_app/driver.go +++ b/drivers/onedrive_app/driver.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/http" + "net/url" "path" "github.com/alist-org/alist/v3/drivers/base" @@ -57,8 +58,17 @@ func (d *OnedriveAPP) Link(ctx context.Context, file model.Obj, args model.LinkA if f.File == nil { return nil, errs.NotFile } + u := f.Url + if d.CustomHost != "" { + _u, err := url.Parse(f.Url) + if err != nil { + return nil, err + } + _u.Host = d.CustomHost + u = _u.String() + } return &model.Link{ - URL: f.Url, + URL: u, }, nil } diff --git a/drivers/onedrive_app/meta.go b/drivers/onedrive_app/meta.go index 21ae4f15525..0499f503bad 100644 --- a/drivers/onedrive_app/meta.go +++ b/drivers/onedrive_app/meta.go @@ -13,6 +13,7 @@ type Addition struct { TenantID string `json:"tenant_id"` Email string `json:"email"` ChunkSize int64 `json:"chunk_size" type:"number" default:"5"` + CustomHost string `json:"custom_host" help:"Custom host for onedrive download link"` } var config = driver.Config{