mirror of https://github.com/cloudreve/Cloudreve
Feat: using custom reverse proxying in OneDrive file downloading
parent
0cfa61e264
commit
bd2bdf253b
|
@ -47,8 +47,10 @@ type PolicyOption struct {
|
||||||
FileType []string `json:"file_type"`
|
FileType []string `json:"file_type"`
|
||||||
// MimeType
|
// MimeType
|
||||||
MimeType string `json:"mimetype"`
|
MimeType string `json:"mimetype"`
|
||||||
// OdRedirect Onedrive重定向地址
|
// OdRedirect Onedrive 重定向地址
|
||||||
OdRedirect string `json:"od_redirect,omitempty"`
|
OdRedirect string `json:"od_redirect,omitempty"`
|
||||||
|
// OdProxy Onedrive 反代地址
|
||||||
|
OdProxy string `json:"od_proxy,omitempty"`
|
||||||
// Region 区域代码
|
// Region 区域代码
|
||||||
Region string `json:"region,omitempty"`
|
Region string `json:"region,omitempty"`
|
||||||
// ServerSideEndpoint 服务端请求使用的 Endpoint,为空时使用 Policy.Server 字段
|
// ServerSideEndpoint 服务端请求使用的 Endpoint,为空时使用 Policy.Server 字段
|
||||||
|
|
|
@ -154,7 +154,7 @@ func (handler Driver) Source(
|
||||||
) (string, error) {
|
) (string, error) {
|
||||||
// 尝试从缓存中查找
|
// 尝试从缓存中查找
|
||||||
if cachedURL, ok := cache.Get(fmt.Sprintf("onedrive_source_%d_%s", handler.Policy.ID, path)); ok {
|
if cachedURL, ok := cache.Get(fmt.Sprintf("onedrive_source_%d_%s", handler.Policy.ID, path)); ok {
|
||||||
return cachedURL.(string), nil
|
return handler.replaceSourceHost(cachedURL.(string))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 缓存不存在,重新获取
|
// 缓存不存在,重新获取
|
||||||
|
@ -166,11 +166,32 @@ func (handler Driver) Source(
|
||||||
res.DownloadURL,
|
res.DownloadURL,
|
||||||
model.GetIntSetting("onedrive_source_timeout", 1800),
|
model.GetIntSetting("onedrive_source_timeout", 1800),
|
||||||
)
|
)
|
||||||
return res.DownloadURL, nil
|
return handler.replaceSourceHost(res.DownloadURL)
|
||||||
}
|
}
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (handler Driver) replaceSourceHost(origin string) (string, error) {
|
||||||
|
if handler.Policy.OptionsSerialized.OdProxy != "" {
|
||||||
|
source, err := url.Parse(origin)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
cdn, err := url.Parse(handler.Policy.OptionsSerialized.OdProxy)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
// 替换反代地址
|
||||||
|
source.Scheme = cdn.Scheme
|
||||||
|
source.Host = cdn.Host
|
||||||
|
return source.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return origin, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Token 获取上传会话URL
|
// Token 获取上传会话URL
|
||||||
func (handler Driver) Token(ctx context.Context, TTL int64, key string) (serializer.UploadCredential, error) {
|
func (handler Driver) Token(ctx context.Context, TTL int64, key string) (serializer.UploadCredential, error) {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue