30 lines
717 B
Go
30 lines
717 B
Go
|
package middlewares
|
||
|
|
||
|
import (
|
||
|
"os"
|
||
|
"strings"
|
||
|
|
||
|
"github.com/valyala/fasthttp"
|
||
|
|
||
|
"github.com/authelia/authelia/v4/internal/utils"
|
||
|
)
|
||
|
|
||
|
// AssetOverrideMiddleware allows overriding and serving of specific embedded assets from disk.
|
||
|
func AssetOverrideMiddleware(assetPath string, next fasthttp.RequestHandler) fasthttp.RequestHandler {
|
||
|
return func(ctx *fasthttp.RequestCtx) {
|
||
|
uri := string(ctx.RequestURI())
|
||
|
file := uri[strings.LastIndex(uri, "/")+1:]
|
||
|
|
||
|
if assetPath != "" && utils.IsStringInSlice(file, validOverrideAssets) {
|
||
|
_, err := os.Stat(assetPath + file)
|
||
|
if err != nil {
|
||
|
next(ctx)
|
||
|
} else {
|
||
|
fasthttp.FSHandler(assetPath, strings.Count(uri, "/")-1)(ctx)
|
||
|
}
|
||
|
} else {
|
||
|
next(ctx)
|
||
|
}
|
||
|
}
|
||
|
}
|