fix: address code review findings for DNS management

- CRITICAL: Change DNS zones endpoint from GET to POST to avoid
  leaking API token in URL query parameters
- HIGH: Add sync.RWMutex to protect dnsProvider field in Server,
  Deployer, and proxy Manager against concurrent read/write races
- HIGH: Capture old DNS provider reference synchronously before
  launching background cleanup goroutine
- HIGH: Use getDNS()/getDNSProviderLocked() accessors instead of
  direct field reads in all DNS operations
This commit is contained in:
2026-04-02 14:54:15 +03:00
parent c730cfaa45
commit 670948f113
243 changed files with 15971 additions and 535 deletions
@@ -0,0 +1,52 @@
import { h as head, e as escape_html, s as store_get, f as ensure_array_like, u as unsubscribe_stores } from "../../../../chunks/index.js";
import { S as Skeleton } from "../../../../chunks/Skeleton.js";
import "../../../../chunks/toast.js";
import { t } from "../../../../chunks/index2.js";
import { I as IconPlus } from "../../../../chunks/IconPlus.js";
function _page($$renderer, $$props) {
$$renderer.component(($$renderer2) => {
var $$store_subs;
let $$settled = true;
let $$inner_renderer;
function $$render_inner($$renderer3) {
head("p19oey", $$renderer3, ($$renderer4) => {
$$renderer4.title(($$renderer5) => {
$$renderer5.push(`<title>${escape_html(store_get($$store_subs ??= {}, "$t", t)("settingsRegistries.title"))} - ${escape_html(store_get($$store_subs ??= {}, "$t", t)("app.name"))}</title>`);
});
});
$$renderer3.push(`<div class="space-y-6"><div class="flex items-center justify-between"><div><h2 class="text-lg font-semibold text-[var(--text-primary)]">${escape_html(store_get($$store_subs ??= {}, "$t", t)("settingsRegistries.title"))}</h2> <p class="text-sm text-[var(--text-secondary)]">${escape_html(store_get($$store_subs ??= {}, "$t", t)("settingsRegistries.description"))}</p></div> `);
{
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<button class="inline-flex items-center gap-2 rounded-lg bg-[var(--color-brand-600)] px-4 py-2.5 text-sm font-medium text-white shadow-sm hover:bg-[var(--color-brand-700)] transition-colors active:animate-press">`);
IconPlus($$renderer3, { size: 16 });
$$renderer3.push(`<!----> ${escape_html(store_get($$store_subs ??= {}, "$t", t)("settingsRegistries.addRegistry"))}</button>`);
}
$$renderer3.push(`<!--]--></div> `);
{
$$renderer3.push("<!--[-1-->");
}
$$renderer3.push(`<!--]--> `);
{
$$renderer3.push("<!--[0-->");
$$renderer3.push(`<div class="space-y-3"><!--[-->`);
const each_array = ensure_array_like(Array(2));
for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
each_array[$$index];
Skeleton($$renderer3, { height: "5rem" });
}
$$renderer3.push(`<!--]--></div>`);
}
$$renderer3.push(`<!--]--></div>`);
}
do {
$$settled = true;
$$inner_renderer = $$renderer2.copy();
$$render_inner($$inner_renderer);
} while (!$$settled);
$$renderer2.subsume($$inner_renderer);
if ($$store_subs) unsubscribe_stores($$store_subs);
});
}
export {
_page as default
};