Optimized injection layer on lua base, as replace for nginx replace. Also optimized cloudflare cache deletion(no everytime for cleanup). Still CDN is required for logout mechanism via JS and Nextcloud deploy is buggy after changing from nginx to openresty. Propably some variable overwritte topic. Should be solved tomorrow.

This commit is contained in:
2025-07-24 19:13:13 +02:00
parent f62355e490
commit 27973c2773
36 changed files with 483 additions and 115 deletions

View File

@@ -0,0 +1,66 @@
lua_need_request_body on;
header_filter_by_lua_block {
local ct = ngx.header.content_type or ""
if ct:lower():find("^text/html") then
ngx.ctx.is_html = true
else
ngx.ctx.is_html = false
end
}
body_filter_by_lua_block {
-- only apply further processing if this is an HTML response
if not ngx.ctx.is_html then
return
end
-- initialize or reuse the buffer
ngx.ctx.buf = ngx.ctx.buf or {}
local chunk, eof = ngx.arg[1], ngx.arg[2]
if chunk ~= "" then
table.insert(ngx.ctx.buf, chunk)
end
if not eof then
-- drop intermediate chunks; well emit only on eof
ngx.arg[1] = nil
return
end
-- on eof: concatenate all buffered chunks
local whole = table.concat(ngx.ctx.buf)
ngx.ctx.buf = nil -- clear buffer
{# whole = string.gsub(whole, "</body>", "<!-- injected text2 -->\n</body>")
ngx.arg[1] = whole #}
-- build a list of head-injection snippets
local head_snippets = {}
{# Deactivated 'logout' temporary due to chunk size. Needs an CDN. #}
{% for head_feature in ['css', 'matomo', 'port-ui-desktop', 'javascript' ] %}
{% if applications | get_app_conf(application_id, 'features.' ~ head_feature, false) | bool %}
head_snippets[#head_snippets + 1] = [=[
{%- include "roles/srv-web-7-7-inj-" ~ head_feature ~ "/templates/head_sub.j2" -%}
]=]
{% endif %}
{% endfor %}
-- inject all collected snippets right before </head>
local head_payload = table.concat(head_snippets, "\n") .. "</head>"
whole = string.gsub(whole, "</head>", head_payload)
{% if applications | get_app_conf(application_id, 'features.matomo', false) | bool %}
-- build Matomo noscript snippet for the body
local body_matomo = [=[
{%- include 'roles/srv-web-7-7-inj-matomo/templates/body_sub.j2' -%}
]=]
-- inject it right before </body>
whole = string.gsub(whole, "</body>", body_matomo)
{% endif %}
-- finally send the modified HTML out
ngx.arg[1] = whole
}