diff --git a/src/httpserver/new_http.c b/src/httpserver/new_http.c index 10b724c11..066ca89c1 100644 --- a/src/httpserver/new_http.c +++ b/src/httpserver/new_http.c @@ -831,6 +831,16 @@ int HTTP_ProcessPacket(http_request_t* request) { return 0; } +#if ENABLE_HTTP_OVERRIDE + bool HTTP_checkLFSOverride(http_request_t* request, const char *ext); + if (HTTP_checkLFSOverride(request,".html")) { + return 1; + } + if (HTTP_checkLFSOverride(request, "")) { + return 1; + } +#endif + if (http_checkUrlBase(urlStr, "")) return http_fn_empty_url(request); if (http_checkUrlBase(urlStr, "testmsg")) return http_fn_testmsg(request); diff --git a/src/httpserver/rest_interface.c b/src/httpserver/rest_interface.c index 81203d65e..ee2d4c800 100644 --- a/src/httpserver/rest_interface.c +++ b/src/httpserver/rest_interface.c @@ -639,8 +639,8 @@ static int http_rest_get_lfs_file(http_request_t* request) { else { ADDLOG_DEBUG(LOG_FEATURE_API, "LFS open [%s] gives %d", fpath, lfsres); if (lfsres >= 0) { - const char* mimetype = httpMimeTypeBinary; char* ext = fpath; + const char *mimetype = httpMimeTypeBinary; if (isGzip) { // find original extension (e.g., .js from .js.gz) @@ -717,6 +717,33 @@ static int http_rest_get_lfs_file(http_request_t* request) { if (buff) os_free(buff); return 0; } +bool HTTP_checkLFSOverride(http_request_t* request, const char *ext) { + char tmp[64]; + //sprintf_s(tmp, sizeof(tmp), "override/%s", request->url); + sprintf_s(tmp, sizeof(tmp), "%s%s", request->url, ext); + char *fix = strchr(tmp, '?'); + if (fix) { + *fix = 0; + } + lfs_file_t* file; + file = os_malloc(sizeof(lfs_file_t)); + memset(file,0, sizeof(lfs_file_t)); + int lfsres = lfs_file_open(&lfs, file, tmp, LFS_O_RDONLY); + if (lfsres == 0) { + lfs_file_close(&lfs, file); + free(file); + sprintf_s(tmp, sizeof(tmp), "api/lfs/%s%s", request->url, ext); + char *oldURL = request->url; + request->url = tmp; + http_rest_get_lfs_file(request); + request->url = oldURL; + // "api/lfs/", 8)) { + // "api/run/", 8)) { + return 1; + } + free(file); + return 0; +} static int http_rest_get_lfs_delete(http_request_t* request) { char* fpath; int lfsres; diff --git a/src/obk_config.h b/src/obk_config.h index d37981f94..d42d16184 100644 --- a/src/obk_config.h +++ b/src/obk_config.h @@ -116,6 +116,7 @@ #endif +#define ENABLE_HTTP_OVERRIDE 1 #define ENABLE_DRIVER_TCL 1 #define ENABLE_DRIVER_PIR 1 #define ENABLE_HA_DISCOVERY 1