diff --git a/netbox/project-static/dist/config.js b/netbox/project-static/dist/config.js index 2b360c5a2..7cf3ccb30 100644 Binary files a/netbox/project-static/dist/config.js and b/netbox/project-static/dist/config.js differ diff --git a/netbox/project-static/dist/config.js.map b/netbox/project-static/dist/config.js.map index 937913e20..37bd61edd 100644 Binary files a/netbox/project-static/dist/config.js.map and b/netbox/project-static/dist/config.js.map differ diff --git a/netbox/project-static/dist/lldp.js b/netbox/project-static/dist/lldp.js index c77672ff6..2b3934742 100644 Binary files a/netbox/project-static/dist/lldp.js and b/netbox/project-static/dist/lldp.js differ diff --git a/netbox/project-static/dist/lldp.js.map b/netbox/project-static/dist/lldp.js.map index 1835a3525..52eb58fa7 100644 Binary files a/netbox/project-static/dist/lldp.js.map and b/netbox/project-static/dist/lldp.js.map differ diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 6d0aa1535..5ab9da845 100644 Binary files a/netbox/project-static/dist/netbox.js and b/netbox/project-static/dist/netbox.js differ diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 6c04b9849..9b92d1489 100644 Binary files a/netbox/project-static/dist/netbox.js.map and b/netbox/project-static/dist/netbox.js.map differ diff --git a/netbox/project-static/dist/status.js b/netbox/project-static/dist/status.js index 5d970d6b9..f87d11348 100644 Binary files a/netbox/project-static/dist/status.js and b/netbox/project-static/dist/status.js differ diff --git a/netbox/project-static/dist/status.js.map b/netbox/project-static/dist/status.js.map index c630420fd..cf0984f73 100644 Binary files a/netbox/project-static/dist/status.js.map and b/netbox/project-static/dist/status.js.map differ diff --git a/netbox/project-static/package.json b/netbox/project-static/package.json index 256696947..4ec08d7b3 100644 --- a/netbox/project-static/package.json +++ b/netbox/project-static/package.json @@ -27,6 +27,7 @@ "bootstrap": "~5.0.2", "clipboard": "^2.0.8", "color2k": "^1.2.4", + "cookie": "^0.4.1", "dayjs": "^1.10.4", "flatpickr": "4.6.3", "htmx.org": "^1.6.1", diff --git a/netbox/project-static/src/util.ts b/netbox/project-static/src/util.ts index 9f6ff100d..09e9afb9a 100644 --- a/netbox/project-static/src/util.ts +++ b/netbox/project-static/src/util.ts @@ -1,11 +1,9 @@ +import Cookie from 'cookie'; + type Method = 'GET' | 'POST' | 'PATCH' | 'PUT' | 'DELETE'; type ReqData = URLSearchParams | Dict | undefined | unknown; type SelectedOption = { name: string; options: string[] }; -declare global { - interface Window { CSRF_TOKEN: any; } -} - /** * Infer valid HTMLElement props based on element name. */ @@ -95,12 +93,23 @@ export function isElement(obj: Element | null | undefined): obj is Element { return typeof obj !== null && typeof obj !== 'undefined'; } +/** + * Retrieve the CSRF token from cookie storage. + */ +function getCsrfToken(): string { + const { csrftoken: csrfToken } = Cookie.parse(document.cookie); + if (typeof csrfToken === 'undefined') { + throw new Error('Invalid or missing CSRF token'); + } + return csrfToken; +} + export async function apiRequest( url: string, method: Method, data?: D, ): Promise> { - const token = window.CSRF_TOKEN; + const token = getCsrfToken(); const headers = new Headers({ 'X-CSRFToken': token }); let body; diff --git a/netbox/project-static/yarn.lock b/netbox/project-static/yarn.lock index 8e21446c6..780ba071e 100644 --- a/netbox/project-static/yarn.lock +++ b/netbox/project-static/yarn.lock @@ -737,6 +737,11 @@ configstore@^3.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" +cookie@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== + copy-to-clipboard@^3.2.0: version "3.3.1" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" diff --git a/netbox/templates/base/base.html b/netbox/templates/base/base.html index 8ba47dde3..08ab33eff 100644 --- a/netbox/templates/base/base.html +++ b/netbox/templates/base/base.html @@ -99,7 +99,6 @@ } return setMode("light", true); })(); - window.CSRF_TOKEN = "{{ csrf_token }}"; {# Static resources #}