commit 6b61e24699ff260926575224bb1f9d676076ef0d
parent 7cb38e9ec3c394483a752985ad26912ab4956364
Author: DAEMON <zer0sec.xp@icloud.com>
Date: Thu, 3 Sep 2026 06:53:41 +0100
fix: route home/source/tool links through url() (base-path slash on the four decks)
Diffstat:
3 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/src/pages/[source]/[tool].astro b/src/pages/[source]/[tool].astro
@@ -7,6 +7,7 @@ import { toolSlug, routeSourceOf } from '../../lib/techniques';
import type { Technique, Tool } from '../../lib/techniques';
import { SOURCE_ROUTE, SOURCE_META, PLATFORM_META, CAPABILITY_META } from '../../lib/taxonomy';
import { highlightCommand } from '../../lib/highlight';
+import { url } from '../../lib/url';
import '../../styles/catalog.css';
export async function getStaticPaths() {
@@ -47,9 +48,9 @@ const upstream = tool.references?.find((r) => /gtfobins|lolbas|wadcoms/.test(r))
<div class="wrap tool" style="padding-top:1.5rem;" data-pagefind-body>
<span class="sr-only" data-pagefind-meta={`source:${src.label}`}></span>
<p class="tool__crumb">
- <a href={`${import.meta.env.BASE_URL}catalog`}>Catalog</a>
+ <a href={url('catalog')}>Catalog</a>
<span aria-hidden="true">/</span>
- <a href={`${import.meta.env.BASE_URL}${SOURCE_ROUTE[routeSourceOf(tool.id)]}`}>{src.label}</a>
+ <a href={url(SOURCE_ROUTE[routeSourceOf(tool.id)])}>{src.label}</a>
</p>
<SlantTitle eyebrow={`${src.tag} · ${tool.toolType || 'Tool'}`} title={tool.name} tone={src.accent}>
diff --git a/src/pages/[source]/index.astro b/src/pages/[source]/index.astro
@@ -6,6 +6,7 @@ import allTechniques from '../../data/techniques.json';
import { toolSlug, routeSourceOf } from '../../lib/techniques';
import type { Tool, Technique } from '../../lib/techniques';
import { SOURCE_ROUTE, SOURCE_META, SOURCES, PLATFORM_META } from '../../lib/taxonomy';
+import { url } from '../../lib/url';
import type { SourceId } from '../../lib/taxonomy';
export async function getStaticPaths() {
@@ -37,7 +38,7 @@ const stats = [
<div class="wrap src" style="padding:2.5rem 0 4rem;">
<p class="src__lead">
- <a href={`${import.meta.env.BASE_URL}catalog`}>← Full catalog</a>
+ <a href={url('catalog')}>← Full catalog</a>
<span aria-hidden="true"> · </span>
<a href={src.homepage} target="_blank" rel="noopener">{src.homepage.replace(/^https?:\/\//, '')}</a>
<span aria-hidden="true"> · </span>
@@ -46,7 +47,7 @@ const stats = [
<div class="src__grid">
{tools.map((t) => (
- <a class="src__tool" href={`${import.meta.env.BASE_URL}${SOURCE_ROUTE[sourceId]}/${toolSlug(t.id)}`} style={`--acc: var(--${src.accent});`}>
+ <a class="src__tool" href={url(`${SOURCE_ROUTE[sourceId]}/${toolSlug(t.id)}`)} style={`--acc: var(--${src.accent});`}>
<span class="src__tname">{t.name}</span>
<span class="src__tmeta">
<span class="src__tcount">{t.count}</span>
diff --git a/src/pages/index.astro b/src/pages/index.astro
@@ -5,9 +5,9 @@ import Marquee from '../components/Marquee.astro';
import Callout from '../components/Callout.astro';
import facets from '../data/facets.json';
import { SOURCES, SOURCE_META, SOURCE_ROUTE } from '../lib/taxonomy';
+import { url } from '../lib/url';
const c = facets.counts;
-const base = import.meta.env.BASE_URL;
const marqueeTitles = [
{ n: 'NIX', title: 'GTFOBins', accent: 'foam' },
@@ -48,7 +48,7 @@ const marqueeMeta = [
</SlantTitle>
<div class="home-cta">
- <a class="home-cta__go" href={`${base}catalog`}>Open the catalog →</a>
+ <a class="home-cta__go" href={url('catalog')}>Open the catalog →</a>
<span class="home-cta__hint">or press <kbd>/</kbd> to search</span>
</div>
</section>
@@ -68,7 +68,7 @@ const marqueeMeta = [
{SOURCES.map((id, i) => {
const s = SOURCE_META[id];
return (
- <a class="home-source" href={`${base}${SOURCE_ROUTE[id]}`} style={`--acc: var(--${s.accent});`}>
+ <a class="home-source" href={url(SOURCE_ROUTE[id])} style={`--acc: var(--${s.accent});`}>
<div class="home-source__top">
<span class="home-source__tag">{String(i + 1).padStart(2, '0')} · {s.tag}</span>
<span class="home-source__n">{c.bySource[id] ?? 0}</span>
@@ -89,7 +89,7 @@ const marqueeMeta = [
MITRE ATT&CK. For authorized testing, CTFs, detection engineering and education only. Know your scope.
</Callout>
<p class="home-scope__cred">
- GTFOBins, LOLBAS and WADComs are each GPL-3.0; this merged work is GPL-3.0. See <a href={`${base}credits`}>credits & licenses</a>.
+ GTFOBins, LOLBAS and WADComs are each GPL-3.0; this merged work is GPL-3.0. See <a href={url('credits')}>credits & licenses</a>.
</p>
</section>
</Base>