website/docs: Update deps. (#14397)

* website/docs: Update deps.

* website/docs: Port partial monorepo fixes. Fix build warnings.

* website/docs: Update Prettier.

* website/docs: Format. Update deps.

* website/docs: Remove empty entry.
This commit is contained in:
Teffen Ellis
2025-05-05 18:59:49 +02:00
committed by GitHub
parent d048f1ecbd
commit 264f59775c
25 changed files with 2224 additions and 1106 deletions

2
website/.gitignore vendored
View File

@ -3,6 +3,7 @@
# Production # Production
/build /build
/out
/help /help
# Generated files # Generated files
@ -25,4 +26,5 @@ yarn-error.log*
static/docker-compose.yml static/docker-compose.yml
static/schema.yml static/schema.yml
static/releases.gen.json
docs/developer-docs/api/reference/** docs/developer-docs/api/reference/**

View File

@ -1,7 +1,11 @@
# Ignore artifacts: # Ignore artifacts:
build build
out
coverage coverage
.docusaurus .docusaurus
node_modules node_modules
help help
static static
# TODO: Enable after monorepo formatting is cleaned up.
**/*.md
**/*.mdx

View File

@ -1 +0,0 @@
{}

View File

@ -0,0 +1,82 @@
import styles from "./styles.module.css";
const RADIUSProtocols = [
"PAP",
"CHAP",
"Digest",
"MS-CHAP",
"PEAP",
"MS-CHAPv2",
"Cisco LEAP",
"EAP-GTC",
"EAP-MD5",
"EAP-PWD",
] as const satisfies string[];
type RADIUSProtocol = (typeof RADIUSProtocols)[number];
const HashKinds = [
"Cleartext",
"NT",
"MD5",
"Salted MD5",
"SHA1",
"Salted SHA1",
"Unix Crypt",
] as const satisfies string[];
type HashKind = (typeof HashKinds)[number];
const supportMatrix: Record<HashKind, RADIUSProtocol[]> = {
"Cleartext": [
"PAP",
"CHAP",
"Digest",
"MS-CHAP",
"PEAP",
"MS-CHAPv2",
"Cisco LEAP",
"EAP-GTC",
"EAP-MD5",
"EAP-PWD",
],
"NT": ["PAP", "MS-CHAP", "PEAP", "MS-CHAPv2", "Cisco LEAP", "EAP-GTC"],
"MD5": ["PAP", "EAP-GTC"],
"Salted MD5": ["PAP", "EAP-GTC"],
"SHA1": ["PAP", "EAP-GTC"],
"Salted SHA1": ["PAP", "EAP-GTC", "EAP-PWD"],
"Unix Crypt": ["PAP", "EAP-GTC", "EAP-PWD"],
};
export const HashSupport: React.FC = () => {
return (
<table className={styles.table}>
<thead>
<tr>
<th></th>
{HashKinds.map((hashKind, i) => (
<th key={i}>{hashKind}</th>
))}
</tr>
</thead>
<tbody>
{RADIUSProtocols.map((radiusProtocol, i) => (
<tr key={i}>
<td>{radiusProtocol}</td>
{HashKinds.map((hashKind) => {
const protocols = supportMatrix[hashKind];
const supported = protocols.includes(radiusProtocol);
return (
<td data-supported={supported} key={hashKind}>
{supported ? "✓" : "✗"}
</td>
);
})}
</tr>
))}
</tbody>
</table>
);
};

View File

@ -2,7 +2,7 @@
title: RADIUS Provider title: RADIUS Provider
--- ---
import { Check, X, AlertTriangle } from "react-feather"; import { HashSupport } from "./HashSupport";
You can configure a Radius provider for applications that don't support any other protocols or that require Radius. You can configure a Radius provider for applications that don't support any other protocols or that require Radius.
@ -56,15 +56,4 @@ After creation, make sure to select the RADIUS property mapping in the RADIUS pr
The RADIUS provider only supports the [PAP](https://en.wikipedia.org/wiki/Password_Authentication_Protocol) (Password Authentication Protocol) protocol: The RADIUS provider only supports the [PAP](https://en.wikipedia.org/wiki/Password_Authentication_Protocol) (Password Authentication Protocol) protocol:
| | Clear-text | NT hash | MD5 hash | Salted MD5 hash | SHA1 hash | Salted SHA1 hash | Unix Crypt | <HashSupport />
| ------------ | --------------- | --------------- | --------------- | --------------- | --------------- | ---------------- | --------------- |
| PAP | <Check></Check> | <Check></Check> | <Check></Check> | <Check></Check> | <Check></Check> | <Check></Check> | <Check></Check> |
| CHAP | <Check></Check> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> |
| Digest | <Check></Check> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> |
| MS-CHAP | <Check></Check> | <Check></Check> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> |
| PEAP | <Check></Check> | <Check></Check> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> |
| EAP-MSCHAPv2 | <Check></Check> | <Check></Check> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> |
| Cisco LEAP | <Check></Check> | <Check></Check> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> |
| EAP-GTC | <Check></Check> | <Check></Check> | <Check></Check> | <Check></Check> | <Check></Check> | <Check></Check> | <Check></Check> |
| EAP-MD5 | <Check></Check> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> | <X></X> |
| EAP-PWD | <Check></Check> | <X></X> | <X></X> | <X></X> | <X></X> | <Check></Check> | <Check></Check> |

View File

@ -0,0 +1,20 @@
.table td {
text-align: center;
font-weight: bold;
&:first-child {
text-align: right;
width: 13ch;
}
&:not(:first-child) {
width: 10ch;
}
&[data-supported="true"] {
color: var(--ifm-color-success-dark);
}
&[data-supported="false"] {
color: var(--ifm-color-danger-dark);
}
}

View File

@ -148,7 +148,6 @@ We'll be publishing a security Issue (CVE-2022-xxxxx) and accompanying fix on _d
<details> <details>
<summary>Mailing list template</summary> <summary>Mailing list template</summary>
<p>
Subject: `Release of authentik Security releases 2022.10.3 and 2022.11.3` Subject: `Release of authentik Security releases 2022.10.3 and 2022.11.3`
@ -158,12 +157,10 @@ The security advisory for CVE-2022-xxxxx has been published: https://github.com/
Releases 2022.10.3 and 2022.11.3 with fixes included are available here: https://github.com/goauthentik/authentik/releases Releases 2022.10.3 and 2022.11.3 with fixes included are available here: https://github.com/goauthentik/authentik/releases
``` ```
</p>
</details> </details>
<details> <details>
<summary>Discord template</summary> <summary>Discord template</summary>
<p>
```markdown ```markdown
[...existing announcement...] [...existing announcement...]
@ -175,5 +172,4 @@ Advisory for for CVE-2022-xxxxx has been published here https://github.com/goaut
The fixed versions 2022.10.3 and 2022.11.3 are available here: https://github.com/goauthentik/authentik/releases The fixed versions 2022.10.3 and 2022.11.3 are available here: https://github.com/goauthentik/authentik/releases
``` ```
</p>
</details> </details>

View File

@ -1,13 +1,14 @@
import type { Config } from "@docusaurus/types";
import type * as Preset from "@docusaurus/preset-classic"; import type * as Preset from "@docusaurus/preset-classic";
import { themes as prismThemes } from "prism-react-renderer"; import type { Config } from "@docusaurus/types";
import type * as OpenApiPlugin from "docusaurus-plugin-openapi-docs"; import type * as OpenApiPlugin from "docusaurus-plugin-openapi-docs";
import { themes as prismThemes } from "prism-react-renderer";
import remarkDirective from "remark-directive";
import remarkGithub, { BuildUrlValues } from "remark-github"; import remarkGithub, { BuildUrlValues } from "remark-github";
import { defaultBuildUrl } from "remark-github"; import { defaultBuildUrl } from "remark-github";
import remarkDirective from "remark-directive";
import remarkVersionDirective from "./remark/version-directive.js";
import remarkPreviewDirective from "./remark/preview-directive.js"; import remarkPreviewDirective from "./remark/preview-directive.js";
import remarkSupportDirective from "./remark/support-directive.js"; import remarkSupportDirective from "./remark/support-directive.js";
import remarkVersionDirective from "./remark/version-directive.js";
const createConfig = (): Config => { const createConfig = (): Config => {
return { return {
@ -59,16 +60,16 @@ const createConfig = (): Config => {
target: "_self", target: "_self",
}, },
{ {
href: "https://github.com/goauthentik/authentik", "href": "https://github.com/goauthentik/authentik",
"data-icon": "github", "data-icon": "github",
"aria-label": "GitHub", "aria-label": "GitHub",
position: "right", "position": "right",
}, },
{ {
href: "https://goauthentik.io/discord", "href": "https://goauthentik.io/discord",
"data-icon": "discord", "data-icon": "discord",
"aria-label": "Discord", "aria-label": "Discord",
position: "right", "position": "right",
}, },
], ],
}, },
@ -111,8 +112,7 @@ const createConfig = (): Config => {
id: "docs", id: "docs",
sidebarPath: "./sidebars.js", sidebarPath: "./sidebars.js",
showLastUpdateTime: false, showLastUpdateTime: false,
editUrl: editUrl: "https://github.com/goauthentik/authentik/edit/main/website/",
"https://github.com/goauthentik/authentik/edit/main/website/",
docItemComponent: "@theme/ApiItem", docItemComponent: "@theme/ApiItem",
beforeDefaultRemarkPlugins: [ beforeDefaultRemarkPlugins: [
@ -128,8 +128,7 @@ const createConfig = (): Config => {
repository: "goauthentik/authentik", repository: "goauthentik/authentik",
// Only replace issues and PR links // Only replace issues and PR links
buildUrl: (values: BuildUrlValues) => { buildUrl: (values: BuildUrlValues) => {
return values.type === "issue" || return values.type === "issue" || values.type === "mention"
values.type === "mention"
? defaultBuildUrl(values) ? defaultBuildUrl(values)
: false; : false;
}, },
@ -138,9 +137,7 @@ const createConfig = (): Config => {
], ],
}, },
theme: { theme: {
customCss: require.resolve( customCss: require.resolve("@goauthentik/docusaurus-config/css/index.css"),
"@goauthentik/docusaurus-config/css/index.css",
),
}, },
} satisfies Preset.Options, } satisfies Preset.Options,
], ],
@ -153,8 +150,7 @@ const createConfig = (): Config => {
path: "integrations", path: "integrations",
routeBasePath: "integrations", routeBasePath: "integrations",
sidebarPath: "./sidebarsIntegrations.js", sidebarPath: "./sidebarsIntegrations.js",
editUrl: editUrl: "https://github.com/goauthentik/authentik/edit/main/website/",
"https://github.com/goauthentik/authentik/edit/main/website/",
}, },
], ],
[ [

2877
website/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,20 +1,25 @@
{ {
"name": "@goauthentik/website-docs", "name": "@goauthentik/docs",
"version": "0.0.0", "version": "0.0.0",
"private": true,
"license": "MIT", "license": "MIT",
"private": true,
"scripts": { "scripts": {
"build": "cp ../docker-compose.yml static/docker-compose.yml && cp ../schema.yml static/schema.yml && docusaurus gen-api-docs all && cross-env NODE_OPTIONS='--max_old_space_size=65536' docusaurus build", "build": "run-s build:docker build:schema build:api build:docusaurus",
"build-bundled": "cp ../schema.yml static/schema.yml && docusaurus gen-api-docs all && cross-env NODE_OPTIONS='--max_old_space_size=65536' docusaurus build", "build-bundled": "run-s build:schema build:api build:docusaurus",
"build:api": "docusaurus gen-api-docs all",
"build:docker": "cp ../docker-compose.yml ./static/docker-compose.yml",
"build:docusaurus": "cross-env NODE_OPTIONS='--max_old_space_size=65536' docusaurus build",
"build:schema": "cp -f ../schema.yml ./static/schema.yml",
"deploy": "docusaurus deploy", "deploy": "docusaurus deploy",
"docusaurus": "docusaurus", "docusaurus": "docusaurus",
"lint:lockfile": "wireit", "lint:lockfile": "echo 'Skipping lockfile linting'",
"prettier": "prettier --write .", "prettier": "prettier --write .",
"prettier-check": "prettier --check .", "prettier-check": "prettier --check .",
"serve": "docusaurus serve", "serve": "docusaurus serve",
"start": "docusaurus start",
"swizzle": "docusaurus swizzle", "swizzle": "docusaurus swizzle",
"test": "node --test", "test": "node --test",
"watch": "cp -f ../schema.yml ./static/schema.yml && docusaurus gen-api-docs all && docusaurus start" "watch": "run-s build:schema build:api start"
}, },
"dependencies": { "dependencies": {
"@docusaurus/core": "^3.7.0", "@docusaurus/core": "^3.7.0",
@ -24,45 +29,35 @@
"@docusaurus/preset-classic": "^3.7.0", "@docusaurus/preset-classic": "^3.7.0",
"@docusaurus/theme-common": "^3.7.0", "@docusaurus/theme-common": "^3.7.0",
"@docusaurus/theme-mermaid": "^3.7.0", "@docusaurus/theme-mermaid": "^3.7.0",
"@goauthentik/docusaurus-config": "^1.0.4", "@goauthentik/docusaurus-config": "^1.0.6",
"@goauthentik/tsconfig": "^1.0.4",
"@mdx-js/react": "^3.1.0", "@mdx-js/react": "^3.1.0",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"disqus-react": "^1.1.6", "docusaurus-plugin-openapi-docs": "^4.4.0",
"docusaurus-plugin-openapi-docs": "4.3.4", "docusaurus-theme-openapi-docs": "^4.4.0",
"docusaurus-theme-openapi-docs": "4.3.4",
"postcss": "^8.5.3", "postcss": "^8.5.3",
"prism-react-renderer": "^2.4.1", "prism-react-renderer": "^2.4.1",
"react": "^18.3.1", "react": "^18.3.1",
"react-before-after-slider-component": "^1.1.8", "react-before-after-slider-component": "^1.1.8",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-feather": "^2.0.10",
"react-toggle": "^4.1.3",
"remark-directive": "^4.0.0", "remark-directive": "^4.0.0",
"remark-github": "^12.0.0", "remark-github": "^12.0.0",
"semver": "^7.7.1" "semver": "^7.7.1"
}, },
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"devDependencies": { "devDependencies": {
"@docusaurus/module-type-aliases": "^3.3.2", "@docusaurus/module-type-aliases": "^3.7.0",
"@docusaurus/tsconfig": "^3.7.0", "@docusaurus/tsconfig": "^3.7.0",
"@docusaurus/types": "^3.3.2", "@docusaurus/types": "^3.7.0",
"@goauthentik/prettier-config": "^1.0.4",
"@types/lodash": "^4.17.16",
"@types/postman-collection": "^3.5.10",
"@types/react": "^18.3.13", "@types/react": "^18.3.13",
"@types/semver": "^7.7.0", "@types/semver": "^7.7.0",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
"prettier": "3.5.3", "fast-glob": "^3.3.3",
"typescript": "~5.8.3", "npm-run-all": "^4.1.5",
"wireit": "^0.14.12" "prettier": "^3.5.3",
"typescript": "~5.8.2"
}, },
"optionalDependencies": { "optionalDependencies": {
"@rspack/binding-darwin-arm64": "1.3.8", "@rspack/binding-darwin-arm64": "1.3.8",
@ -78,14 +73,31 @@
"lightningcss-linux-arm64-gnu": "1.29.3", "lightningcss-linux-arm64-gnu": "1.29.3",
"lightningcss-linux-x64-gnu": "1.29.3" "lightningcss-linux-x64-gnu": "1.29.3"
}, },
"wireit": {
"lint:lockfile": {
"__comment": "The lockfile-lint package does not have an option to ensure resolved hashes are set everywhere",
"shell": true,
"command": "[ -z \"$(jq -r '.packages | to_entries[] | select((.key | contains(\"node_modules\")) and (.value | has(\"resolved\") | not)) | .key' < package-lock.json)\" ]"
}
},
"engines": { "engines": {
"node": ">=20" "node": ">=22.14.0"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"prettier": "@goauthentik/prettier-config",
"overrides": {
"fork-ts-checker-webpack-plugin": {
"glob": "^11.0.1"
},
"postman-collection": {
"@faker-js/faker": "^6.3.1"
},
"webpack-dev-server": {
"rimraf": "6.0.1"
}
} }
} }

View File

@ -1,9 +1,8 @@
import "mdast-util-to-hast";
import "mdast-util-directive";
import { h } from "hastscript"; import { h } from "hastscript";
import { Root } from "mdast"; import { Root } from "mdast";
import { visit, SKIP } from "unist-util-visit"; import "mdast-util-directive";
import "mdast-util-to-hast";
import { SKIP, visit } from "unist-util-visit";
/** /**
* MDAST plugin to transform `ak-preview` directives into preview badges. * MDAST plugin to transform `ak-preview` directives into preview badges.
@ -17,10 +16,10 @@ function remarkPreviewDirective() {
const hast = h("span", { const hast = h("span", {
...node.attributes, ...node.attributes,
className: "badge badge--preview", "className": "badge badge--preview",
title: `This feature is in preview and may change in the future.`, "title": `This feature is in preview and may change in the future.`,
"aria-description": "Preview badge", "aria-description": "Preview badge",
role: "img", "role": "img",
}); });
data.hName = hast.tagName; data.hName = hast.tagName;

View File

@ -1,10 +1,9 @@
import "mdast-util-to-hast";
import "mdast-util-directive";
import { h } from "hastscript"; import { h } from "hastscript";
import { Root } from "mdast"; import { Root } from "mdast";
import { visit, SKIP } from "unist-util-visit"; import "mdast-util-directive";
import "mdast-util-to-hast";
import { coerce } from "semver"; import { coerce } from "semver";
import { SKIP, visit } from "unist-util-visit";
/** /**
* Support levels for authentik. * Support levels for authentik.
@ -52,10 +51,10 @@ function remarkSupportDirective() {
const hast = h("span", { const hast = h("span", {
...node.attributes, ...node.attributes,
className: `badge badge--support-${level}`, "className": `badge badge--support-${level}`,
title: `This feature is supported at the ${label} level.`, "title": `This feature is supported at the ${label} level.`,
"aria-description": "Support level badge", "aria-description": "Support level badge",
role: "img", "role": "img",
}); });
data.hName = hast.tagName; data.hName = hast.tagName;

View File

@ -1,10 +1,9 @@
import "mdast-util-to-hast";
import "mdast-util-directive";
import { h } from "hastscript"; import { h } from "hastscript";
import { Root } from "mdast"; import { Root } from "mdast";
import { visit, SKIP } from "unist-util-visit"; import "mdast-util-directive";
import "mdast-util-to-hast";
import { coerce } from "semver"; import { coerce } from "semver";
import { SKIP, visit } from "unist-util-visit";
/** /**
* MDAST plugin to transform `ak-version` directives into version badges. * MDAST plugin to transform `ak-version` directives into version badges.
@ -40,19 +39,17 @@ function remarkVersionDirective() {
const yearCutoff = new Date().getFullYear() - 2; const yearCutoff = new Date().getFullYear() - 2;
if (parsed.major <= yearCutoff) { if (parsed.major <= yearCutoff) {
throw new Error( throw new Error(`Semver version <= ${yearCutoff} is not supported: ${semver}`);
`Semver version <= ${yearCutoff} is not supported: ${semver}`,
);
} }
const data = node.data || (node.data = {}); const data = node.data || (node.data = {});
const hast = h("span", { const hast = h("span", {
...node.attributes, ...node.attributes,
className: "badge badge--version", "className": "badge badge--version",
title: `Available in authentik ${parsed.format()} and later`, "title": `Available in authentik ${parsed.format()} and later`,
"aria-description": "Version badge", "aria-description": "Version badge",
role: "img", "role": "img",
}); });
data.hName = hast.tagName; data.hName = hast.tagName;

View File

@ -1,5 +1,5 @@
import { generateVersionDropdown } from "./src/utils.js";
import apiReference from "./docs/developer-docs/api/reference/sidebar"; import apiReference from "./docs/developer-docs/api/reference/sidebar";
import { generateVersionDropdown } from "./src/utils.js";
const releases = [ const releases = [
"releases/2025/v2025.4", "releases/2025/v2025.4",
@ -148,10 +148,7 @@ export default {
type: "doc", type: "doc",
id: "add-secure-apps/providers/property-mappings/index", id: "add-secure-apps/providers/property-mappings/index",
}, },
items: [ items: ["add-secure-apps/providers/property-mappings/expression"],
"add-secure-apps/providers/property-mappings/expression",
,
],
}, },
{ {
type: "category", type: "category",
@ -172,9 +169,7 @@ export default {
type: "doc", type: "doc",
id: "add-secure-apps/providers/ldap/index", id: "add-secure-apps/providers/ldap/index",
}, },
items: [ items: ["add-secure-apps/providers/ldap/generic_setup"],
"add-secure-apps/providers/ldap/generic_setup",
],
}, },
{ {
type: "category", type: "category",
@ -248,9 +243,7 @@ export default {
type: "doc", type: "doc",
id: "add-secure-apps/providers/ssf/index", id: "add-secure-apps/providers/ssf/index",
}, },
items: [ items: ["add-secure-apps/providers/ssf/create-ssf-provider"],
"add-secure-apps/providers/ssf/create-ssf-provider",
],
}, },
], ],
}, },
@ -328,9 +321,7 @@ export default {
type: "doc", type: "doc",
id: "add-secure-apps/flows-stages/bindings/index", id: "add-secure-apps/flows-stages/bindings/index",
}, },
items: [ items: ["add-secure-apps/flows-stages/bindings/work_with_bindings"],
"add-secure-apps/flows-stages/bindings/work_with_bindings",
],
}, },
], ],
}, },
@ -473,10 +464,7 @@ export default {
type: "doc", type: "doc",
id: "users-sources/groups/index", id: "users-sources/groups/index",
}, },
items: [ items: ["users-sources/groups/manage_groups", "users-sources/groups/group_ref"],
"users-sources/groups/manage_groups",
"users-sources/groups/group_ref",
],
}, },
{ {
type: "category", type: "category",
@ -521,9 +509,7 @@ export default {
type: "doc", type: "doc",
id: "users-sources/sources/protocols/kerberos/index", id: "users-sources/sources/protocols/kerberos/index",
}, },
items: [ items: ["users-sources/sources/protocols/kerberos/browser"],
"users-sources/sources/protocols/kerberos/browser",
],
}, },
"users-sources/sources/protocols/ldap/index", "users-sources/sources/protocols/ldap/index",
"users-sources/sources/protocols/oauth/index", "users-sources/sources/protocols/oauth/index",
@ -538,9 +524,7 @@ export default {
type: "doc", type: "doc",
id: "users-sources/sources/property-mappings/index", id: "users-sources/sources/property-mappings/index",
}, },
items: [ items: ["users-sources/sources/property-mappings/expressions"],
"users-sources/sources/property-mappings/expressions",
],
}, },
{ {
type: "category", type: "category",
@ -610,10 +594,7 @@ export default {
type: "doc", type: "doc",
id: "sys-mgmt/events/index", id: "sys-mgmt/events/index",
}, },
items: [ items: ["sys-mgmt/events/notifications", "sys-mgmt/events/transports"],
"sys-mgmt/events/notifications",
"sys-mgmt/events/transports",
],
}, },
"sys-mgmt/certificates", "sys-mgmt/certificates",
"sys-mgmt/settings", "sys-mgmt/settings",

View File

@ -1,8 +1,5 @@
import { SupportLevelToLabel, isSupportLevel } from "@site/remark/support-directive";
import React from "react"; import React from "react";
import {
isSupportLevel,
SupportLevelToLabel,
} from "@site/remark/support-directive";
export interface SupportBadgeProps { export interface SupportBadgeProps {
level: string; level: string;

View File

@ -18,9 +18,7 @@ export const VersionBadge: React.FC<AuthentikVersionProps> = ({ semver }) => {
const yearCutoff = new Date().getFullYear() - 2; const yearCutoff = new Date().getFullYear() - 2;
if (parsed.major <= yearCutoff) { if (parsed.major <= yearCutoff) {
throw new Error( throw new Error(`Semver version <= ${yearCutoff} is not supported: ${semver}`);
`Semver version <= ${yearCutoff} is not supported: ${semver}`,
);
} }
return ( return (

View File

@ -14,8 +14,7 @@ import { useDoc } from "@docusaurus/plugin-content-docs/client";
*/ */
export function useSyntheticTitle(): string | null { export function useSyntheticTitle(): string | null {
const { metadata, frontMatter, contentTitle } = useDoc(); const { metadata, frontMatter, contentTitle } = useDoc();
const shouldRender = const shouldRender = !frontMatter.hide_title && typeof contentTitle === "undefined";
!frontMatter.hide_title && typeof contentTitle === "undefined";
if (!shouldRender) { if (!shouldRender) {
return null; return null;
} }

View File

@ -1,5 +1,5 @@
import React from "react";
import { Redirect } from "@docusaurus/router"; import { Redirect } from "@docusaurus/router";
import React from "react";
function Home() { function Home() {
return <Redirect to="/docs" />; return <Redirect to="/docs" />;

View File

@ -7,21 +7,17 @@
* the content of a documentation page. However, it also adds support for * the content of a documentation page. However, it also adds support for
* support badges, and Authentik version badges. * support badges, and Authentik version badges.
*/ */
import React from "react";
import clsx from "clsx";
import { ThemeClassNames } from "@docusaurus/theme-common";
import {
DocContextValue,
useDoc,
} from "@docusaurus/plugin-content-docs/client";
import Heading from "@theme/Heading";
import MDXContent from "@theme/MDXContent";
import type { Props } from "@theme/DocItem/Content";
import { DocFrontMatter } from "@docusaurus/plugin-content-docs"; import { DocFrontMatter } from "@docusaurus/plugin-content-docs";
import { useSyntheticTitle } from "@site/src/hooks/title"; import { DocContextValue, useDoc } from "@docusaurus/plugin-content-docs/client";
import { ThemeClassNames } from "@docusaurus/theme-common";
import { SupportBadge } from "@site/src/components/SupportBadge"; import { SupportBadge } from "@site/src/components/SupportBadge";
import { VersionBadge } from "@site/src/components/VersionBadge"; import { VersionBadge } from "@site/src/components/VersionBadge";
import { useSyntheticTitle } from "@site/src/hooks/title";
import type { Props } from "@theme/DocItem/Content";
import Heading from "@theme/Heading";
import MDXContent from "@theme/MDXContent";
import clsx from "clsx";
import React from "react";
interface SwizzledDocFrontMatter extends DocFrontMatter { interface SwizzledDocFrontMatter extends DocFrontMatter {
support_level?: string; support_level?: string;
@ -37,12 +33,8 @@ interface SwizzledDocContextValue extends DocContextValue {
const DocItemContent: React.FC<Props> = ({ children }) => { const DocItemContent: React.FC<Props> = ({ children }) => {
const syntheticTitle = useSyntheticTitle(); const syntheticTitle = useSyntheticTitle();
const { frontMatter } = useDoc() as SwizzledDocContextValue; const { frontMatter } = useDoc() as SwizzledDocContextValue;
const { const { support_level, authentik_version, authentik_enterprise, authentik_preview } =
support_level, frontMatter;
authentik_version,
authentik_enterprise,
authentik_preview,
} = frontMatter;
const badges: JSX.Element[] = []; const badges: JSX.Element[] = [];
@ -71,9 +63,7 @@ const DocItemContent: React.FC<Props> = ({ children }) => {
{badges.length ? ( {badges.length ? (
<p className="badge-group"> <p className="badge-group">
{badges.map((badge, index) => ( {badges.map((badge, index) => (
<React.Fragment key={index}> <React.Fragment key={index}>{badge}</React.Fragment>
{badge}
</React.Fragment>
))} ))}
</p> </p>
) : null} ) : null}

View File

@ -1,13 +1,13 @@
import React, { type ReactNode } from "react";
import clsx from "clsx";
import EditThisPage from "@theme/EditThisPage";
import type { Props } from "@theme/EditMetaRow";
import LastUpdated from "@theme/LastUpdated";
import Admonition from "@theme/Admonition";
import styles from "./styles.module.css";
import Translate from "@docusaurus/Translate"; import Translate from "@docusaurus/Translate";
import Admonition from "@theme/Admonition";
import IconNote from "@theme/Admonition/Icon/Note"; import IconNote from "@theme/Admonition/Icon/Note";
import type { Props } from "@theme/EditMetaRow";
import EditThisPage from "@theme/EditThisPage";
import LastUpdated from "@theme/LastUpdated";
import clsx from "clsx";
import React, { type ReactNode } from "react";
import styles from "./styles.module.css";
const EditMetaRow: React.FC<Props> = ({ const EditMetaRow: React.FC<Props> = ({
className, className,
@ -40,11 +40,9 @@ const EditMetaRow: React.FC<Props> = ({
id="theme.common.contributor.footerDescription1" id="theme.common.contributor.footerDescription1"
description="The description for the contribution footer" description="The description for the contribution footer"
> >
We welcome your knowledge and expertise. If you see We welcome your knowledge and expertise. If you see areas of the
areas of the documentation that you can improve (fix a documentation that you can improve (fix a typo, correct a technical detail,
typo, correct a technical detail, add additional add additional context, etc.) we would really appreciate your contribution.
context, etc.) we would really appreciate your
contribution.
</Translate> </Translate>
</p> </p>
@ -109,10 +107,7 @@ const EditMetaRow: React.FC<Props> = ({
<div className="row"> <div className="row">
<div className={clsx("col", styles.lastUpdated)}> <div className={clsx("col", styles.lastUpdated)}>
{(lastUpdatedAt || lastUpdatedBy) && ( {(lastUpdatedAt || lastUpdatedBy) && (
<LastUpdated <LastUpdated lastUpdatedAt={lastUpdatedAt} lastUpdatedBy={lastUpdatedBy} />
lastUpdatedAt={lastUpdatedAt}
lastUpdatedBy={lastUpdatedBy}
/>
)} )}
</div> </div>
</div> </div>

View File

@ -52,8 +52,7 @@ html[data-theme="dark"] {
display: flex; display: flex;
gap: var(--ifm-spacing-horizontal); gap: var(--ifm-spacing-horizontal);
justify-content: center; justify-content: center;
margin: calc(var(--ifm-spacing-horizontal) * 2) 0 margin: calc(var(--ifm-spacing-horizontal) * 2) 0 var(--ifm-spacing-horizontal);
var(--ifm-spacing-horizontal);
padding: 0; padding: 0;
} }

View File

@ -1,8 +1,8 @@
import React, { type ReactNode } from "react"; import Link from "@docusaurus/Link";
import Translate from "@docusaurus/Translate"; import Translate from "@docusaurus/Translate";
import { ThemeClassNames } from "@docusaurus/theme-common"; import { ThemeClassNames } from "@docusaurus/theme-common";
import Link from "@docusaurus/Link";
import type { Props } from "@theme/EditThisPage"; import type { Props } from "@theme/EditThisPage";
import React, { type ReactNode } from "react";
export default function EditThisPage({ editUrl }: Props): ReactNode { export default function EditThisPage({ editUrl }: Props): ReactNode {
return ( return (

View File

@ -1,7 +1,5 @@
export function generateVersionDropdown(allReleases) { export function generateVersionDropdown(allReleases) {
const releases = allReleases.filter( const releases = allReleases.filter((release) => typeof release === "string");
(release) => typeof release === "string",
);
const latest = releases[0].replace(/releases\/\d+\/v/, ""); const latest = releases[0].replace(/releases\/\d+\/v/, "");
return `<div class="navbar__item dropdown dropdown--hoverable dropdown--right"> return `<div class="navbar__item dropdown dropdown--hoverable dropdown--right">
<div aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link menu__link"> <div aria-haspopup="true" aria-expanded="false" role="button" class="navbar__link menu__link">

View File

@ -1,7 +1,8 @@
import test from "node:test"; import FastGlob from "fast-glob";
import assert from "node:assert"; import assert from "node:assert";
import test from "node:test";
import sidebar from "../sidebarsIntegrations.js"; import sidebar from "../sidebarsIntegrations.js";
import glob from "glob";
const getSidebarItems = () => { const getSidebarItems = () => {
const allItems = []; const allItems = [];
@ -27,8 +28,7 @@ test("ensure all services have a sidebar entry", (t) => {
.filter((entry) => entry.startsWith("services/")) .filter((entry) => entry.startsWith("services/"))
.map((entry) => entry.replace("/index", "")) .map((entry) => entry.replace("/index", ""))
.map((entry) => entry.replace("services/", "")); .map((entry) => entry.replace("services/", ""));
const servicesFiles = glob const servicesFiles = FastGlob.sync("integrations/**/*.+(md|mdx)")
.sync("integrations/**/*.+(md|mdx)")
.filter((entry) => entry.startsWith("integrations/services/")) .filter((entry) => entry.startsWith("integrations/services/"))
.map((entry) => entry.replace("integrations/services/", "")) .map((entry) => entry.replace("integrations/services/", ""))
.map((entry) => entry.replace(/\/index\.mdx?/, "")) .map((entry) => entry.replace(/\/index\.mdx?/, ""))
@ -45,8 +45,7 @@ test("ensure all sources have a sidebar entry", (t) => {
.filter((entry) => entry.startsWith("sources/")) .filter((entry) => entry.startsWith("sources/"))
.map((entry) => entry.replace("/index", "")) .map((entry) => entry.replace("/index", ""))
.map((entry) => entry.replace("sources/", "")); .map((entry) => entry.replace("sources/", ""));
const sourceFiles = glob const sourceFiles = FastGlob.sync("integrations/**/*.+(md|mdx)")
.sync("integrations/**/*.+(md|mdx)")
.filter((entry) => entry.startsWith("integrations/sources/")) .filter((entry) => entry.startsWith("integrations/sources/"))
.map((entry) => entry.replace("integrations/sources/", "")) .map((entry) => entry.replace("integrations/sources/", ""))
.map((entry) => entry.replace(/\/index\.mdx?/, "")) .map((entry) => entry.replace(/\/index\.mdx?/, ""))

View File

@ -1,8 +1,32 @@
// @file TSConfig used by the docs package during development.
//
// @remarks
// While this configuration will influence the IDE experience,
// Docusaurus will instead use an internal configuration to build the site.
//
// @see https://docusaurus.io/docs/typescript-support
{ {
// This file is not used in compilation. It is here just for a nice editor experience. "extends": "@goauthentik/tsconfig",
"extends": "@docusaurus/tsconfig",
"compilerOptions": { "compilerOptions": {
"baseUrl": "." "noEmit": true,
"checkJs": true,
"allowJs": true,
"composite": false,
"esModuleInterop": true,
"moduleResolution": "bundler",
"module": "esnext",
"jsx": "preserve",
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"baseUrl": ".",
"paths": {
"@site/*": ["./*"]
}
}, },
"exclude": [".docusaurus", "build", "node_modules"] "exclude": [
// ---
"./out/**/*",
"./dist/**/*",
".docusaurus",
"build"
]
} }