fix(cloudflare): protect agent panel, workspaces & shell scripts from Rocket Loader; trust proxy headers
FlowDeck CI / lint (push) Successful in 47s
FlowDeck CI / test (push) Successful in 4m17s
FlowDeck CI / docker (push) Successful in 45s

This commit is contained in:
2026-09-13 09:51:54 -04:00
parent 714642363b
commit d986959927
6 changed files with 9 additions and 9 deletions
+1 -1
View File
@@ -41,4 +41,4 @@ EXPOSE 8080
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \ HEALTHCHECK --interval=30s --timeout=5s --start-period=5s --retries=3 \
CMD curl -f http://localhost:8080/api/health || exit 1 CMD curl -f http://localhost:8080/api/health || exit 1
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080"] CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8080", "--proxy-headers", "--forwarded-allow-ips", "*"]
+1 -1
View File
@@ -142,7 +142,7 @@
</div> </div>
</header> </header>
<script> <script data-cfasync="false">
document.addEventListener('alpine:init', function () { document.addEventListener('alpine:init', function () {
if (window.Alpine && window.Alpine.__fdBreadcrumbRegistered) return; if (window.Alpine && window.Alpine.__fdBreadcrumbRegistered) return;
if (window.Alpine) window.Alpine.__fdBreadcrumbRegistered = true; if (window.Alpine) window.Alpine.__fdBreadcrumbRegistered = true;
+1 -1
View File
@@ -9,7 +9,7 @@
.rt-cursor .rt-cursor-name{position:absolute;top:-14px;left:4px;white-space:nowrap;font-size:9px;line-height:12px;padding:0 4px;border-radius:4px;color:#fff;font-weight:600;letter-spacing:.2px;} .rt-cursor .rt-cursor-name{position:absolute;top:-14px;left:4px;white-space:nowrap;font-size:9px;line-height:12px;padding:0 4px;border-radius:4px;color:#fff;font-weight:600;letter-spacing:.2px;}
.rt-offline{font-size:11px;color:var(--text-tertiary,#999);margin-right:6px;display:none;} .rt-offline{font-size:11px;color:var(--text-tertiary,#999);margin-right:6px;display:none;}
</style> </style>
<script> <script data-cfasync="false">
/* eslint-disable */ /* eslint-disable */
/* ═══════════ v5.13.0 Realtime — WS gateway, présence, curseurs, merge LWW ═══════════ */ /* ═══════════ v5.13.0 Realtime — WS gateway, présence, curseurs, merge LWW ═══════════ */
window.__fdRT = (function () { window.__fdRT = (function () {
+2 -2
View File
@@ -204,7 +204,7 @@
</style> </style>
{# ── Global Agent API (available before Alpine for the FAB / shortcut) ── #} {# ── Global Agent API (available before Alpine for the FAB / shortcut) ── #}
<script> <script data-cfasync="false">
(function(){ (function(){
var defaultAPI = { var defaultAPI = {
open: function(){ document.dispatchEvent(new CustomEvent('fd-agent-toggle')); }, open: function(){ document.dispatchEvent(new CustomEvent('fd-agent-toggle')); },
@@ -456,7 +456,7 @@
</div> </div>
</div> </div>
<script> <script data-cfasync="false">
(function(){ (function(){
// ── Skills intégrés (workflows « / ») et commandes admin du panneau ── // ── Skills intégrés (workflows « / ») et commandes admin du panneau ──
var FD_ADMIN_CMDS = [ var FD_ADMIN_CMDS = [
+3 -3
View File
@@ -108,9 +108,9 @@
body.embed-mode .page-editor-wrapper { padding: 8px 16px !important; max-width: 100% !important; } body.embed-mode .page-editor-wrapper { padding: 8px 16px !important; max-width: 100% !important; }
body.embed-mode .page-cover-area { padding-top: 0 !important; } body.embed-mode .page-cover-area { padding-top: 0 !important; }
</style> </style>
<script src="/static/js/htmx.min.js"></script> <script src="/static/js/htmx.min.js" data-cfasync="false"></script>
<script src="/static/js/alpine.min.js" defer data-cfasync="false"></script> <script src="/static/js/alpine.min.js" defer data-cfasync="false"></script>
<script src="/static/js/sortable.min.js" defer></script> <script src="/static/js/sortable.min.js" defer data-cfasync="false"></script>
</head> </head>
<body hx-headers='{"X-CSRF-Token":"__CSRF_PLACEHOLDER__"}'{% if embed_mode %} class="embed-mode"{% endif %}> <body hx-headers='{"X-CSRF-Token":"__CSRF_PLACEHOLDER__"}'{% if embed_mode %} class="embed-mode"{% endif %}>
<div class="app-layout" x-data="appState()"> <div class="app-layout" x-data="appState()">
@@ -1942,7 +1942,7 @@
} }
}); });
</script> </script>
<script src="/static/js/app.js?v=2.4.8" defer></script> <script src="/static/js/app.js?v=2.4.8" defer data-cfasync="false"></script>
<style> <style>
.flowdeck-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.6);z-index:2000;display:flex;align-items:center;justify-content:center;} .flowdeck-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,0.6);z-index:2000;display:flex;align-items:center;justify-content:center;}
+1 -1
View File
@@ -172,7 +172,7 @@
</div> </div>
<script> <script data-cfasync="false">
function workspacesPage() { function workspacesPage() {
return { return {
workspaces: [], workspaces: [],