@ -19,19 +19,19 @@ import (
"code.gitea.io/gitea/modules/web/routing"
"code.gitea.io/gitea/modules/web/routing"
)
)
func storageHandler ( storageSetting * setting . Storage , prefix string , objStore storage . ObjectStorage ) func ( next http . Handler ) http . Handler {
func storageHandler ( storageSetting * setting . Storage , prefix string , objStore storage . ObjectStorage ) http . HandlerFunc {
prefix = strings . Trim ( prefix , "/" )
prefix = strings . Trim ( prefix , "/" )
funcInfo := routing . GetFuncInfo ( storageHandler , prefix )
funcInfo := routing . GetFuncInfo ( storageHandler , prefix )
return func ( next http . Handler ) http . Handler {
if storageSetting . MinioConfig . ServeDirect {
if storageSetting . MinioConfig . ServeDirect {
return http . HandlerFunc ( func ( w http . ResponseWriter , req * http . Request ) {
return http . HandlerFunc ( func ( w http . ResponseWriter , req * http . Request ) {
if req . Method != "GET" && req . Method != "HEAD" {
if req . Method != "GET" && req . Method != "HEAD" {
next . ServeHTTP ( w , req )
http . Error ( w , http . StatusText ( http . StatusMethodNotAllowed ) , http . StatusMethodNotAllowed )
return
return
}
}
if ! strings . HasPrefix ( req . URL . Path , "/" + prefix + "/" ) {
if ! strings . HasPrefix ( req . URL . Path , "/" + prefix + "/" ) {
next . ServeHTTP ( w , req )
http . Error ( w , http . StatusText ( http . StatusNotFound ) , http . StatusNotFound )
return
return
}
}
routing . UpdateFuncInfo ( req . Context ( ) , funcInfo )
routing . UpdateFuncInfo ( req . Context ( ) , funcInfo )
@ -43,7 +43,7 @@ func storageHandler(storageSetting *setting.Storage, prefix string, objStore sto
if err != nil {
if err != nil {
if os . IsNotExist ( err ) || errors . Is ( err , os . ErrNotExist ) {
if os . IsNotExist ( err ) || errors . Is ( err , os . ErrNotExist ) {
log . Warn ( "Unable to find %s %s" , prefix , rPath )
log . Warn ( "Unable to find %s %s" , prefix , rPath )
http . Error ( w , "file not found" , http . StatusNotFound )
http . Error ( w , http . StatusText ( http . StatusNotFound ) , http . StatusNotFound )
return
return
}
}
log . Error ( "Error whilst getting URL for %s %s. Error: %v" , prefix , rPath , err )
log . Error ( "Error whilst getting URL for %s %s. Error: %v" , prefix , rPath , err )
@ -57,12 +57,12 @@ func storageHandler(storageSetting *setting.Storage, prefix string, objStore sto
return http . HandlerFunc ( func ( w http . ResponseWriter , req * http . Request ) {
return http . HandlerFunc ( func ( w http . ResponseWriter , req * http . Request ) {
if req . Method != "GET" && req . Method != "HEAD" {
if req . Method != "GET" && req . Method != "HEAD" {
next . ServeHTTP ( w , req )
http . Error ( w , http . StatusText ( http . StatusMethodNotAllowed ) , http . StatusMethodNotAllowed )
return
return
}
}
if ! strings . HasPrefix ( req . URL . Path , "/" + prefix + "/" ) {
if ! strings . HasPrefix ( req . URL . Path , "/" + prefix + "/" ) {
next . ServeHTTP ( w , req )
http . Error ( w , http . StatusText ( http . StatusNotFound ) , http . StatusNotFound )
return
return
}
}
routing . UpdateFuncInfo ( req . Context ( ) , funcInfo )
routing . UpdateFuncInfo ( req . Context ( ) , funcInfo )
@ -70,7 +70,7 @@ func storageHandler(storageSetting *setting.Storage, prefix string, objStore sto
rPath := strings . TrimPrefix ( req . URL . Path , "/" + prefix + "/" )
rPath := strings . TrimPrefix ( req . URL . Path , "/" + prefix + "/" )
rPath = util . PathJoinRelX ( rPath )
rPath = util . PathJoinRelX ( rPath )
if rPath == "" || rPath == "." {
if rPath == "" || rPath == "." {
http . Error ( w , "file not found" , http . StatusNotFound )
http . Error ( w , http . StatusText ( http . StatusNotFound ) , http . StatusNotFound )
return
return
}
}
@ -78,7 +78,7 @@ func storageHandler(storageSetting *setting.Storage, prefix string, objStore sto
if err != nil {
if err != nil {
if os . IsNotExist ( err ) || errors . Is ( err , os . ErrNotExist ) {
if os . IsNotExist ( err ) || errors . Is ( err , os . ErrNotExist ) {
log . Warn ( "Unable to find %s %s" , prefix , rPath )
log . Warn ( "Unable to find %s %s" , prefix , rPath )
http . Error ( w , "file not found" , http . StatusNotFound )
http . Error ( w , http . StatusText ( http . StatusNotFound ) , http . StatusNotFound )
return
return
}
}
log . Error ( "Error whilst opening %s %s. Error: %v" , prefix , rPath , err )
log . Error ( "Error whilst opening %s %s. Error: %v" , prefix , rPath , err )
@ -95,5 +95,4 @@ func storageHandler(storageSetting *setting.Storage, prefix string, objStore sto
defer fr . Close ( )
defer fr . Close ( )
httpcache . ServeContentWithCacheControl ( w , req , path . Base ( rPath ) , fi . ModTime ( ) , fr )
httpcache . ServeContentWithCacheControl ( w , req , path . Base ( rPath ) , fi . ModTime ( ) , fr )
} )
} )
}
}
}