@@ -24,7 +24,6 @@ import (
2424 "github.com/OpenListTeam/OpenList/v4/internal/errs"
2525 "github.com/OpenListTeam/OpenList/v4/internal/fs"
2626 "github.com/OpenListTeam/OpenList/v4/internal/model"
27- "github.com/OpenListTeam/OpenList/v4/internal/sign"
2827 "github.com/OpenListTeam/OpenList/v4/pkg/utils"
2928 "github.com/OpenListTeam/OpenList/v4/server/common"
3029)
@@ -238,37 +237,39 @@ func (h *Handler) handleGetHeadPost(w http.ResponseWriter, r *http.Request) (sta
238237 }
239238 // Let ServeContent determine the Content-Type header.
240239 storage , _ := fs .GetStorage (reqPath , & fs.GetStoragesArgs {})
241- downProxyUrl := storage .GetStorage ().DownProxyUrl
242- if storage .GetStorage ().WebdavNative () || (storage .GetStorage ().WebdavProxy () && downProxyUrl == "" ) {
243- link , _ , err := fs .Link (ctx , reqPath , model.LinkArgs {Header : r .Header })
244- if err != nil {
245- return http .StatusInternalServerError , err
246- }
247- defer link .Close ()
248- if storage .GetStorage ().ProxyRange {
249- link = common .ProxyRange (ctx , link , fi .GetSize ())
250- }
251- err = common .Proxy (w , r , link , fi )
252- if err != nil {
253- if statusCode , ok := errors .Unwrap (err ).(net.ErrorHttpStatusCode ); ok {
254- return int (statusCode ), err
255- }
256- return http .StatusInternalServerError , fmt .Errorf ("webdav proxy error: %+v" , err )
257- }
258- } else if storage .GetStorage ().WebdavProxy () && downProxyUrl != "" {
259- u := fmt .Sprintf ("%s%s?sign=%s" ,
260- strings .Split (downProxyUrl , "\n " )[0 ],
261- utils .EncodePath (reqPath , true ),
262- sign .Sign (reqPath ))
263- w .Header ().Set ("Cache-Control" , "max-age=0, no-cache, no-store, must-revalidate" )
264- http .Redirect (w , r , u , http .StatusFound )
265- } else {
240+ if storage .GetStorage ().Webdav302 () {
266241 link , _ , err := fs .Link (ctx , reqPath , model.LinkArgs {IP : utils .ClientIP (r ), Header : r .Header , Redirect : true })
267242 if err != nil {
268243 return http .StatusInternalServerError , err
269244 }
270245 defer link .Close ()
271246 http .Redirect (w , r , link .URL , http .StatusFound )
247+ return 0 , nil
248+ }
249+
250+ if storage .GetStorage ().WebdavProxyURL () {
251+ if url := common .GenerateDownProxyURL (storage .GetStorage (), reqPath ); url != "" {
252+ w .Header ().Set ("Cache-Control" , "max-age=0, no-cache, no-store, must-revalidate" )
253+ http .Redirect (w , r , url , http .StatusFound )
254+ return 0 , nil
255+ }
256+ }
257+
258+ link , _ , err := fs .Link (ctx , reqPath , model.LinkArgs {Header : r .Header })
259+ if err != nil {
260+ return http .StatusInternalServerError , err
261+ }
262+ defer link .Close ()
263+
264+ if storage .GetStorage ().ProxyRange {
265+ link = common .ProxyRange (ctx , link , fi .GetSize ())
266+ }
267+ err = common .Proxy (w , r , link , fi )
268+ if err != nil {
269+ if statusCode , ok := errors .Unwrap (err ).(net.ErrorHttpStatusCode ); ok {
270+ return int (statusCode ), err
271+ }
272+ return http .StatusInternalServerError , fmt .Errorf ("webdav proxy error: %+v" , err )
272273 }
273274 return 0 , nil
274275}
0 commit comments