@ -11,7 +11,6 @@ import (
"net/http"
"os"
"path"
"path/filepath"
"strings"
"code.gitea.io/gitea/modules/context"
@ -27,6 +26,8 @@ import (
)
func storageHandler ( storageSetting setting . Storage , prefix string , objStore storage . ObjectStorage ) func ( next http . Handler ) http . Handler {
prefix = strings . Trim ( prefix , "/" )
return func ( next http . Handler ) http . Handler {
if storageSetting . ServeDirect {
return http . HandlerFunc ( func ( w http . ResponseWriter , req * http . Request ) {
@ -35,12 +36,14 @@ func storageHandler(storageSetting setting.Storage, prefix string, objStore stor
return
}
if ! strings . HasPrefix ( req . URL . RequestURI ( ) , "/" + prefix ) {
if ! strings . HasPrefix ( req . URL . Path , "/" + prefix + "/" ) {
next . ServeHTTP ( w , req )
return
}
rPath := strings . TrimPrefix ( req . URL . RequestURI ( ) , "/" + prefix )
rPath := strings . TrimPrefix ( req . URL . Path , "/" + prefix + "/" )
rPath = path . Clean ( "/" + strings . ReplaceAll ( rPath , "\\" , "/" ) ) [ 1 : ]
u , err := objStore . URL ( rPath , path . Base ( rPath ) )
if err != nil {
if os . IsNotExist ( err ) || errors . Is ( err , os . ErrNotExist ) {
@ -52,11 +55,12 @@ func storageHandler(storageSetting setting.Storage, prefix string, objStore stor
http . Error ( w , fmt . Sprintf ( "Error whilst getting URL for %s %s" , prefix , rPath ) , 500 )
return
}
http . Redirect (
w ,
req ,
u . String ( ) ,
301 ,
http . StatusMovedPermanently ,
)
} )
}
@ -67,28 +71,24 @@ func storageHandler(storageSetting setting.Storage, prefix string, objStore stor
return
}
prefix := strings . Trim ( prefix , "/" )
if ! strings . HasPrefix ( req . URL . EscapedPath ( ) , "/" + prefix + "/" ) {
if ! strings . HasPrefix ( req . URL . Path , "/" + prefix + "/" ) {
next . ServeHTTP ( w , req )
return
}
rPath := strings . TrimPrefix ( req . URL . EscapedPath ( ) , "/" + prefix + "/" )
rPath = strings . TrimPrefix ( rPath , "/" )
rPath := strings . TrimPrefix ( req . URL . Path , "/" + prefix + "/" )
rPath = path . Clean ( "/" + strings . ReplaceAll ( rPath , "\\" , " /" ) ) [ 1 : ]
if rPath == "" {
http . Error ( w , "file not found" , 404 )
return
}
rPath = path . Clean ( "/" + filepath . ToSlash ( rPath ) )
rPath = rPath [ 1 : ]
fi , err := objStore . Stat ( rPath )
if err == nil && httpcache . HandleTimeCache ( req , w , fi ) {
return
}
//If we have matched and access to release or issue
// If we have matched and access to release or issue
fr , err := objStore . Open ( rPath )
if err != nil {
if os . IsNotExist ( err ) || errors . Is ( err , os . ErrNotExist ) {
@ -121,7 +121,7 @@ func (d *dataStore) GetData() map[string]interface{} {
// Recovery returns a middleware that recovers from any panics and writes a 500 and a log if so.
// This error will be created with the gitea 500 page.
func Recovery ( ) func ( next http . Handler ) http . Handler {
var rnd = templates . HTMLRenderer ( )
rnd : = templates . HTMLRenderer ( )
return func ( next http . Handler ) http . Handler {
return http . HandlerFunc ( func ( w http . ResponseWriter , req * http . Request ) {
defer func ( ) {
@ -131,14 +131,14 @@ func Recovery() func(next http.Handler) http.Handler {
sessionStore := session . GetSession ( req )
var lc = middleware . Locale ( w , req )
var store = dataStore {
lc : = middleware . Locale ( w , req )
store : = dataStore {
"Language" : lc . Language ( ) ,
"CurrentURL" : setting . AppSubURL + req . URL . RequestURI ( ) ,
"i18n" : lc ,
}
var user = context . GetContextUser ( req )
user : = context . GetContextUser ( req )
if user == nil {
// Get user from session if logged in - do not attempt to sign-in
user = auth . SessionUser ( sessionStore )