website: Prep for workspaces. Clean up shared deps. (#15602)

website: Prepare NPM Workspaces.
This commit is contained in:
Teffen Ellis
2025-07-17 16:06:05 +02:00
committed by GitHub
parent e15fadfedd
commit 19e558e916
61 changed files with 7441 additions and 5917 deletions

10
website/.gitignore vendored
View File

@@ -27,9 +27,9 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
**/static/docker-compose.yml
**/static/schema.yml
**/static/releases.gen.json
docs/developer-docs/api/reference/**
api/reference
!integrations/**/media
**/static/docker-compose.yml
**/static/releases.gen.json
**/static/schema.yml
api/reference
docs/developer-docs/api/reference/**

View File

@@ -6,8 +6,12 @@ WORKDIR /work/website
RUN --mount=type=bind,target=/work/website/package.json,src=./website/package.json \
--mount=type=bind,target=/work/website/package-lock.json,src=./website/package-lock.json \
--mount=type=bind,target=/work/website/docusaurus-theme/package.json,src=./website/docusaurus-theme/package.json \
--mount=type=bind,target=/work/website/api/package.json,src=./website/api/package.json \
--mount=type=bind,target=/work/website/integrations/package.json,src=./website/integrations/package.json \
--mount=type=bind,target=/work/website/docs/package.json,src=./website/docs/package.json \
--mount=type=cache,id=npm-website,sharing=shared,target=/root/.npm \
npm ci --include=dev
npm ci --workspaces --include-workspace-root
COPY ./website /work/website/
COPY ./blueprints /work/blueprints/

View File

@@ -1,6 +1,6 @@
# authentik documentation source
This directory contains the source files for the [authentik technical documentation](https://docs.goauthentik.io/docs?utm_source=github) and the [authentik integration guides](https://docs.goauthentik.io/integrations?utm_source=github).
This directory contains the source files for the [authentik technical documentation](https://docs.goauthentik.io/docs?utm_source=github) and the [authentik integration guides](https://integrations.goauthentik.io?utm_source=github).
Contributions are welcome! Please refer to our [contributor guidelines](https://docs.goauthentik.io/docs/developer-docs?utm_source=github) for details about contributing code or docs.

View File

@@ -0,0 +1,18 @@
---
title: Authentication
sidebar_position: 1
---
For any of the token-based methods, set the `Authorization` header to `Bearer <token>`.
### Session
When authenticating with a flow, you'll get an authenticated Session cookie, that can be used for authentication. Keep in mind that in this context, a CSRF header is also required.
### API Token
Users can create tokens to authenticate as any user with a static key, which can optionally be expiring and auto-rotate.
### JWT Token
OAuth2 clients can request the scope `goauthentik.io/api`, which allows their OAuth Access token to be used to authenticate to the API.

15
website/api/clients.mdx Normal file
View File

@@ -0,0 +1,15 @@
---
title: API Client Overview
---
import DocCardList from "@theme/DocCardList";
These API clients are officially supported and maintained.
:::info
These API clients are primarily built around creating/updating/deleting configuration objects in authentik, and in most cases can **not** be used to implemented SSO into your application.
:::
<DocCardList />

View File

@@ -0,0 +1,17 @@
---
title: Go API Client
sidebar_label: Golang
description: A Golang client for the authentik API.
---
The [Go API client](https://pkg.go.dev/goauthentik.io/api/v3) is generated using the [OpenAPI Generator](https://openapi-generator.tech/) and the [OpenAPI v3 schema](https://docs.goauthentik.io/schema.yml).
```shell
go get goauthentik.io/api/v3
```
## Building the Go Client
The Go client is used by the Outpost to communicate with the backend authentik server. To build the go client, run `make gen-client-go`.
The generated files are stored in `/gen-go-api` in the root of the repository.

View File

@@ -0,0 +1,33 @@
---
title: Node.js API Client
sidebar_label: Node.js
description: A TypeScript client for the authentik API.
---
The [Node.js API client](https://www.npmjs.com/package/@goauthentik/api) is generated using the [OpenAPI Generator](https://openapi-generator.tech/) and the [OpenAPI v3 schema](https://docs.goauthentik.io/schema.yml).
```shell
npm install @goauthentik/api
```
## Usage
```ts
import { AdminApi, Configuration } from "@goauthentik/api";
const config = new Configuration({
basePath: "authentik.company/api/v3",
});
const status = await new AdminApi(DEFAULT_CONFIG).adminSystemRetrieve();
```
## Building the Node.js Client
The web client is used by the web-interface and web-FlowExecutor to communicate with authentik. To build the client, run `make gen-client-ts`.
Since the client is normally distributed as an npm package, running `make gen-client-ts` will overwrite the locally installed client with the newly built one.
:::caution
Running `npm i` in the `/web` folder after using `make gen-client-ts` will overwrite the custom client and revert to the upstream client.
:::

View File

@@ -0,0 +1,13 @@
---
title: Python API Client
sidebar_label: Python
description: A Python client for the authentik API.
---
The [Python API client](https://pypi.org/project/authentik-client/) is generated using the [OpenAPI Generator](https://openapi-generator.tech/) and the [OpenAPI v3 schema](https://docs.goauthentik.io/schema.yml).
```shell
pip install authentik-client
# Or
uv pip install authentik-client
```

View File

@@ -0,0 +1 @@
module.exports = import("./docusaurus.config.esm.mjs").then(($) => $.default);

View File

@@ -1,44 +1,39 @@
/**
* @file Docusaurus Documentation config.
* @file Docusaurus config.
*
* @import { Config } from "@docusaurus/types";
* @import * as OpenAPIPlugin from "docusaurus-plugin-openapi-docs";
* @import { UserThemeConfig } from "@goauthentik/docusaurus-config";
* @import { Options as DocsPluginOptions } from "@docusaurus/plugin-content-docs";
* @import { Options as PagesPluginOptions } from "@docusaurus/plugin-content-pages";
* @import { ReleasesPluginOptions } from "@goauthentik/docusaurus-theme/releases/plugin"
* @import * as OpenApiPlugin from "docusaurus-plugin-openapi-docs";
* @import {Options as PresetOptions} from '@docusaurus/preset-classic';
*/
import { cp } from "node:fs/promises";
import { createRequire } from "node:module";
import { basename, join, resolve } from "node:path";
import { basename, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import { createDocusaurusConfig } from "@goauthentik/docusaurus-config";
import { CommonConfig, CommonDocsPluginOptions } from "@goauthentik/docusaurus-theme/config";
import { remarkLinkRewrite } from "@goauthentik/docusaurus-theme/remark";
import { GlobExcludeDefault } from "@docusaurus/utils";
import { deepmerge } from "deepmerge-ts";
const __dirname = fileURLToPath(new URL(".", import.meta.url));
const require = createRequire(import.meta.url);
const rootStaticDirectory = resolve(__dirname, "static");
const authentikModulePath = resolve(__dirname, "..");
const rootStaticDirectory = resolve(__dirname, "..", "static");
const authentikModulePath = resolve(__dirname, "..", "..");
//#region Copy static files
const files = [
// ---
resolve(authentikModulePath, "docker-compose.yml"),
resolve(authentikModulePath, "schema.yml"),
];
await Promise.all(
files.map((file) => {
const fileName = basename(file);
const destPath = resolve(rootStaticDirectory, fileName);
return cp(file, destPath, { recursive: true });
return cp(file, destPath, {
recursive: true,
});
}),
);
@@ -48,17 +43,99 @@ await Promise.all(
/**
* Documentation site configuration for Docusaurus.
* @satisfies {Partial<Config>}
*/
const config = {
themes: [
"@goauthentik/docusaurus-theme",
"@docusaurus/theme-mermaid",
"docusaurus-theme-openapi-docs",
export default createDocusaurusConfig({
url: "https://api.goauthentik.io",
baseUrl: "/api",
staticDirectories: [
// ---
"static",
rootStaticDirectory,
],
//#region Preset
presets: [
[
"@docusaurus/preset-classic",
/** @type {PresetOptions} */ ({
googleAnalytics: {
trackingID: "G-9MVR9WZFZH",
anonymizeIP: true,
},
theme: {
customCss: [require.resolve("@goauthentik/docusaurus-config/css/index.css")],
},
docs: {
routeBasePath: "/",
path: ".",
docItemComponent: "@theme/ApiItem",
sidebarPath: "./sidebar.mjs",
showLastUpdateTime: false,
showLastUpdateAuthor: false,
numberPrefixParser: false,
exclude: [
"**/_*.{js,jsx,ts,tsx,md,mdx}",
"**/_*/**",
"**/*.test.{js,jsx,ts,tsx}",
"**/__tests__/**",
"**/node_modules/**",
],
include: ["**/*.mdx", "**/*.md"],
//#region Docs Plugins
beforeDefaultRemarkPlugins: [
remarkLinkRewrite([
["/integrations/", "https://integrations.goauthentik.io/"],
["/docs/", "https://docs.goauthentik.io/docs/"],
]),
],
},
}),
],
],
//#endregion
//#region Plugins
plugins: [
[
"docusaurus-plugin-openapi-docs",
{
id: "open-api-docs",
docsPluginId: "docs",
config: {
authentik: /** @type {OpenApiPlugin.Options} */ ({
specPath: resolve("..", "..", "schema.yml"),
outputDir: "./reference",
hideSendButton: true,
disableCompression: true,
sidebarOptions: {
groupPathsBy: "tag",
},
}),
},
},
],
],
//#endregion
//#region Theme
themes: ["docusaurus-theme-openapi-docs"],
themeConfig: /** @type {UserThemeConfig} */ ({
image: "img/social.png",
footer: {
copyright: `Copyright © ${new Date().getFullYear()} Authentik Security Inc. Built with Docusaurus.`,
},
navbar: {
logo: {
alt: "authentik logo",
@@ -80,7 +157,7 @@ const config = {
target: "_self",
},
{
to: "docs/",
to: "https://docs.goauthentik.io",
label: "Documentation",
position: "left",
},
@@ -110,88 +187,17 @@ const config = {
},
],
},
footer: {
links: [],
copyright: `Copyright © ${new Date().getFullYear()} Authentik Security Inc. Built with Docusaurus.`,
algolia: {
appId: "36ROD0O0FV",
apiKey: "727db511300ca9aec5425645bbbddfb5",
indexName: "goauthentik",
externalUrlRegex: /^(?:https?:\/\/)(?!docs\.goauthentik.io)/.source,
},
}),
plugins: [
[
"@docusaurus/theme-classic",
{
customCss: require.resolve("@goauthentik/docusaurus-config/css/index.css"),
},
],
[
"@goauthentik/docusaurus-theme/releases/plugin",
/** @type {ReleasesPluginOptions} */ ({
docsDirectory: join(__dirname, "docs"),
}),
],
[
"@docusaurus/plugin-content-pages",
/** @type {PagesPluginOptions} */ ({
path: "pages",
}),
],
//#region Documentation
[
"@docusaurus/plugin-content-docs",
deepmerge(
CommonDocsPluginOptions,
/** @type {DocsPluginOptions} */ ({
id: "docs",
routeBasePath: "/docs",
path: "docs",
exclude: [...GlobExcludeDefault],
include: ["**/*.mdx", "**/*.md"],
docItemComponent: "@theme/ApiItem",
sidebarPath: "./docs/sidebar.mjs",
showLastUpdateTime: false,
editUrl: "https://github.com/goauthentik/authentik/edit/main/website/",
//#region Docs Plugins
beforeDefaultRemarkPlugins: [
remarkLinkRewrite([
// ---
// TODO: Enable after base path is set to '/'
// ["/docs", ""],
// TODO: Enable when API docs are ready
// ["/api", "https://api.goauthentik.io"],
["/integrations", "https://integrations.goauthentik.io"],
]),
],
}),
),
],
[
"docusaurus-plugin-openapi-docs",
{
id: "api",
docsPluginId: "docs",
config: /** @type {OpenAPIPlugin.Options} */ ({
authentik: {
specPath: "./static/schema.yml",
outputDir: "docs/developer-docs/api/reference/",
hideSendButton: true,
sidebarOptions: {
groupPathsBy: "tag",
},
},
}),
},
],
],
};
//#endregion
});
//#endregion
export default /** @type {Config} */ (deepmerge(CommonConfig, createDocusaurusConfig(config)));

View File

@@ -0,0 +1,11 @@
import { createRequire } from "node:module";
const require = createRequire(import.meta.url);
try {
require.resolve("#reference/sidebar");
} catch (_error) {
console.error(
"\n⛔ API Reference sidebar not found.\n\nRun `npm run build:api` to generate files.",
);
process.exit(1);
}

View File

@@ -1,8 +1,9 @@
---
title: Flow executor (backend)
sidebar_position: 2
---
A big focus of authentik is the flows system, which allows you to combine and build complex conditional processes using stages and policies. Normally, these flows are automatically executed in the browser using authentik's [standard browser-based flow executor (/if/flows)](../../add-secure-apps/flows-stages/flow/executors/if-flow.md).
A big focus of authentik is the flows system, which allows you to combine and build complex conditional processes using stages and policies. Normally, these flows are automatically executed in the browser using authentik's [standard browser-based flow executor (/if/flows)](/docs/add-secure-apps/flows-stages/flow/executors/if-flow).
However, any flow can be executed via an API from anywhere, in fact that is what every flow executor does. With a few requests you can execute flows from anywhere, and integrate authentik even better.
@@ -64,7 +65,7 @@ Depending on the flow, you'll either get a 200 Response with another challenge,
Depending also on the stage, a response might take longer to be returned (especially with the Duo Authenticator validation).
To see the data layout for every stage possible, see the [API Browser](./reference/flows-executor-get)
To see the data layout for every stage possible, see the [API Browser](/api/reference/flows-executor-get)
## Result

16
website/api/index.md Normal file
View File

@@ -0,0 +1,16 @@
---
title: API Overview
sidebar_label: Overview
---
Our API reference documentation is generated from the [OpenAPI v3 schema](https://docs.goauthentik.io/schema.yml).
You can also access your installation's own, instance-specific API Browser. Starting with 2021.3.5, every authentik instance has a built-in API browser, which can be accessed at <code>https://<em>authentik.company</em>/api/v3/</code>.
To generate an API client you can use the OpenAPI v3 schema at <code>https://<em>authentik.company</em>/api/v3/schema/</code>.
## Making schema changes
Some backend changes might require new/different fields or remove other fields. To create a new schema after changing a Serializer, run `make gen-build`.
This will update the `schema.yml` file in the root of the repository.

30
website/api/netlify.toml Normal file
View File

@@ -0,0 +1,30 @@
[[plugins]]
package = "netlify-plugin-cache"
[plugins.inputs]
paths = [".docusaurus", ".cache", 'node_modules/.cache']
[[plugins]]
package = "netlify-plugin-debug-cache"
[build]
base = "website"
package = "api"
command = "npm run build -w api"
publish = "api/build"
[dev]
command = "npm start"
targetPort = 3000
publish = "api/build"
[context.production.environment]
NODE_ENV = "production"
[context.dev.environment]
NODE_ENV = "development"
[[headers]]
for = "/*"
[headers.values]
X-Frame-Options = "DENY"

78
website/api/package.json Normal file
View File

@@ -0,0 +1,78 @@
{
"name": "@goauthentik/api-docs",
"version": "0.0.0",
"description": "API Documentation",
"license": "MIT",
"private": true,
"scripts": {
"build": "run-s generate build:docusaurus",
"build:docusaurus": "docusaurus build",
"clean": "run-s generate:clean docusaurus:clean",
"docusaurus": "docusaurus",
"docusaurus:clean": "docusaurus clear",
"generate": "docusaurus gen-api-docs all",
"generate:clean": "docusaurus clean-api-docs all",
"serve": "docusaurus serve",
"start": "docusaurus start",
"swizzle": "docusaurus swizzle"
},
"imports": {
"#reference/sidebar": "./reference/sidebar.ts"
},
"dependencies": {
"@docusaurus/core": "3.7.0",
"@docusaurus/faster": "3.7.0",
"@docusaurus/module-type-aliases": "3.7.0",
"@docusaurus/plugin-client-redirects": "3.7.0",
"@docusaurus/plugin-content-docs": "3.7.0",
"@docusaurus/preset-classic": "3.7.0",
"@docusaurus/theme-common": "3.7.0",
"@docusaurus/tsconfig": "3.7.0",
"@docusaurus/types": "3.7.0",
"@goauthentik/docusaurus-config": "1.1.0",
"@goauthentik/docusaurus-theme": "*",
"@goauthentik/tsconfig": "^1.0.4",
"@mdx-js/react": "^3.1.0",
"@types/postman-collection": "^3.5.11",
"@types/react": "^18.3.22",
"@types/react-dom": "^18.3.0",
"docusaurus-plugin-openapi-docs": "^4.4.0",
"docusaurus-theme-openapi-docs": "^4.4.0",
"npm-run-all": "^4.1.5",
"prism-react-renderer": "^2.4.1",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"typescript": "^5.8.3"
},
"optionalDependencies": {
"@rspack/binding-darwin-arm64": "1.4.8",
"@rspack/binding-linux-arm64-gnu": "1.4.8",
"@rspack/binding-linux-x64-gnu": "1.4.8",
"@swc/core-darwin-arm64": "1.12.14",
"@swc/core-linux-arm64-gnu": "1.12.14",
"@swc/core-linux-x64-gnu": "1.12.14",
"@swc/html-darwin-arm64": "1.12.14",
"@swc/html-linux-arm64-gnu": "1.12.14",
"@swc/html-linux-x64-gnu": "1.12.14",
"lightningcss-darwin-arm64": "1.30.1",
"lightningcss-linux-arm64-gnu": "1.30.1",
"lightningcss-linux-x64-gnu": "1.30.1"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"overrides": {
"format-imports": {
"eslint": "^9.30.1"
}
}
}

79
website/api/sidebar.mjs Normal file
View File

@@ -0,0 +1,79 @@
/**
* @file Sidebar configuration for documentation entries.
*
* @import { SidebarItemConfig } from "@docusaurus/plugin-content-docs/src/sidebars/types.js"
*/
import "./ensure-reference-sidebar.mjs";
// No file extensions for Docusaurus's automatic resolution.
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore - Allows for project-wide type checking when partially building docs.
import apiReference from "./reference/sidebar";
const DOCS_URL = process.env.DOCS_URL || "https://docs.goauthentik.io";
/**
* @type {SidebarItemConfig}
*/
const sidebar = {
reference: [
{
type: "link",
label: "← Back to Developer Docs",
href: new URL("/developer-docs", DOCS_URL).href,
className: "navbar-sidebar__upwards",
},
{
type: "doc",
label: "API Overview",
className: "api-overview",
id: "index",
},
{
type: "doc",
label: "Authentication",
id: "authentication",
},
{
type: "doc",
label: "Flow executor (backend)",
id: "flow-executor",
},
{
type: "category",
label: "API Clients",
collapsed: false,
collapsible: false,
link: {
type: "doc",
id: "clients",
},
items: [
{
type: "autogenerated",
dirName: "clients",
},
],
},
{
type: "category",
label: "API Reference",
className: "api-reference",
collapsed: false,
collapsible: false,
link: {
type: "doc",
id: apiReference[0].id,
},
items: apiReference.slice(1),
},
],
};
export default sidebar;

View File

@@ -0,0 +1,70 @@
import "./styles.css";
import isInternalUrl from "@docusaurus/isInternalUrl";
import Link from "@docusaurus/Link";
import { isActiveSidebarItem } from "@docusaurus/plugin-content-docs/client";
import { ThemeClassNames } from "@docusaurus/theme-common";
import type { Props } from "@theme/DocSidebarItem/Link";
import IconExternalLink from "@theme/Icon/ExternalLink";
import clsx from "clsx";
import React from "react";
const docsURL = new URL(process.env.DOCS_URL || "https://docs.goauthentik.io");
function isInternalUrlOrDocsUrl(url: string) {
if (isInternalUrl(url)) return true;
const inputURL = new URL(url);
return inputURL.origin === docsURL.origin;
}
const DocSidebarItemLink: React.FC<Props> = ({
item,
onItemClick,
activePath,
level,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
index,
...props
}) => {
const { href, label, className, autoAddBaseUrl } = item;
const isActive = isActiveSidebarItem(item, activePath);
const internalLink = isInternalUrlOrDocsUrl(href);
return (
<li
className={clsx(
ThemeClassNames.docs.docSidebarItemLink,
ThemeClassNames.docs.docSidebarItemLinkLevel(level),
"menu__list-item",
className,
)}
key={label}
>
<Link
className={clsx("menu__link", {
"menu__link--external": !internalLink,
"menu__link--active": isActive,
})}
autoAddBaseUrl={autoAddBaseUrl}
aria-current={isActive ? "page" : undefined}
to={href}
{...(internalLink && {
onClick: onItemClick ? () => onItemClick(item) : undefined,
})}
{...props}
>
{item.className?.includes("api-method") ? (
<div className="badge-container">
<span role="img" className="badge method" />
</div>
) : null}
{label}
{!internalLink && <IconExternalLink />}
</Link>
</li>
);
};
export default DocSidebarItemLink;

View File

@@ -0,0 +1,138 @@
.theme-doc-sidebar-item-link.theme-doc-sidebar-item-link-level-1 > .menu__link,
.theme-doc-sidebar-item-category.theme-doc-sidebar-item-category-level-1
> .menu__list-item-collapsible
> .menu__link {
font-weight: 600;
}
.theme-doc-sidebar-item-category-level-1 .menu__list-item-collapsible {
padding-block: 0.25em;
}
.theme-layout-main {
--doc-sidebar-width: 400px;
}
.navbar-sidebar__upwards {
.menu__link {
font-size: var(--ifm-h6-font-size);
font-weight: var(--ifm-font-weight-bold);
color: var(--ifm-color-info-light);
padding-block: calc(var(--ifm-spacing-vertical) / 1.5);
}
}
.theme-doc-sidebar-item-category.api-reference {
> .menu__list-item-collapsible {
font-weight: 900;
font-size: var(--ifm-h3-font-size);
}
.menu__list {
padding-left: 0;
}
.theme-doc-sidebar-item-category-level-2 .menu__list-item-collapsible {
font-size: var(--ifm-h4-font-size);
font-weight: bold;
text-transform: capitalize;
}
}
.menu__link.menu__link--external {
align-items: center;
}
.menu__list-item.api-method {
.badge-container {
flex: 0 0 auto;
display: flex;
width: 100%;
justify-content: end;
}
> .menu__link {
--menu-border-width: 2px;
color: var(--menu-item-contrast-foreground, red);
background-color: var(--menu-item-background-color, transparent);
flex-flow: column;
font-family: var(--ifm-font-family-monospace);
font-weight: 600;
gap: 0.25em;
padding-inline-end: 0.25em;
word-break: break-all;
align-items: start;
border-radius: 0;
margin-inline-end: calc(var(--ifm-menu-link-padding-horizontal) / 2);
font-size: var(--ifm-h6-font-size);
letter-spacing: 0.015em;
text-rendering: optimizelegibility;
position: relative;
box-shadow: var(--ifm-global-shadow-lw);
&::before {
position: absolute;
left: 0;
top: 0;
width: var(--menu-border-width);
height: 100%;
display: block;
z-index: 1;
background-color: var(--ifm-badge-color, var(--ifm-color-primary));
content: "";
transition: width 0.2s var(--ifm-transition-timing-default);
}
&:hover,
&.menu__link--active {
--menu-border-width: 6px;
}
}
&.get {
--method-label: "GET";
--menu-item-contrast-foreground: var(--ifm-color-content);
--menu-item-background-color: var(--ifm-card-background-color);
--ifm-badge-color: var(--ifm-color-primary-light);
}
&.post {
--method-label: "POST";
--menu-item-contrast-foreground: var(--ifm-color-success-contrast-foreground);
--menu-item-background-color: var(--ifm-color-success-contrast-background);
--ifm-badge-color: var(--ifm-color-success-lightest);
}
&.put {
--method-label: "PUT";
--menu-item-contrast-foreground: var(--ifm-color-info-contrast-foreground);
--menu-item-background-color: var(--ifm-color-info-contrast-background);
--ifm-badge-color: var(--ifm-color-info-lightest);
}
&.patch {
--method-label: "PATCH";
--menu-item-contrast-foreground: var(--ifm-color-warning-contrast-foreground);
--menu-item-background-color: var(--ifm-color-warning-contrast-background);
--ifm-badge-color: var(--ifm-color-warning-lightest);
}
&.delete {
--method-label: "DELETE";
--menu-item-contrast-foreground: var(--ifm-color-danger-contrast-foreground);
--menu-item-background-color: var(--ifm-color-danger-contrast-background);
--ifm-badge-color: var(--ifm-color-danger-lightest);
}
}
.badge.method {
position: relative;
flex: 0 0 auto;
user-select: none;
&::before {
content: var(--method-label, "METHOD");
display: block;
}
}

View File

@@ -0,0 +1,8 @@
{
"extends": "../tsconfig.base.json",
"references": [
{
"path": "../docusaurus-theme"
}
]
}

37
website/api/types/api-plugin.d.ts vendored Normal file
View File

@@ -0,0 +1,37 @@
/// <reference types="docusaurus-theme-openapi-docs" />
/// <reference types="docusaurus-plugin-openapi-docs" />
declare module "@docusaurus/plugin-content-docs/src/sidebars/types" {
export * from "@docusaurus/plugin-content-docs/src/sidebars/types.ts";
}
declare module "@theme/RequestSchema";
declare module "@theme/ParamsDetails";
declare module "@theme/StatusCodes";
declare module "@theme/OperationTabs";
declare module "@theme/SkeletonLoader" {
import { FC } from "react";
const SkeletonLoader: FC<{ size: "sm" | "md" | "lg" }>;
export default SkeletonLoader;
}
declare module "@theme/APIExplorer" {
import { FC } from "react";
export interface ApiExplorerProps {
item: unknown;
infoPath: unknown;
}
const ApiExplorer: FC<ApiExplorerProps>;
export default ApiExplorer;
}
declare module "@theme/ApiExplorer/persistanceMiddleware" {
import { Middleware } from "@reduxjs/toolkit";
import type { ThemeConfig } from "docusaurus-theme-openapi-docs/src/types";
export const createPersistanceMiddleware: (options: ThemeConfig["api"]) => Middleware;
}

34
website/api/types/globals.d.ts vendored Normal file
View File

@@ -0,0 +1,34 @@
/**
* @file Supplemental type definitions for Docusaurus.
*
* @remarks
*
* Docusaurus uses an unconventional module resolution strategy, which can lead to
* issues when using TypeScript.
*
* The types in this file are intended to expose less visible types to TypeScript's
* project references, allowing for better type checking and autocompletion.
*/
// eslint-disable-next-line @typescript-eslint/triple-slash-reference
/// <reference types="@docusaurus/plugin-content-docs" />
/// <reference types="@docusaurus/theme-classic" />
import type { PropDocContent as BasePropDocContent } from "@docusaurus/plugin-content-docs";
import type { DocContextValue as BaseDocContextValue } from "@docusaurus/plugin-content-docs/client";
declare global {
export interface APIDocFrontMatter {
readonly info_path?: string;
readonly api?: string;
readonly schema?: boolean;
readonly sample?: unknown;
}
export interface PropDocContent extends BasePropDocContent {
readonly api?: string;
frontMatter: APIDocFrontMatter & BasePropDocContent["frontMatter"];
}
export interface DocContextValue extends BaseDocContextValue {
frontMatter: APIDocFrontMatter & BasePropDocContent["frontMatter"];
}
}

View File

@@ -1,5 +1,7 @@
---
title: Websocket API
sidebar_position: 3
sidebar_label: Websockets
---
authentik has two different WebSocket endpoints, one is used for web-based clients to get real-time updates, and the other is used for outposts to report their healthiness.

View File

@@ -45,7 +45,7 @@ When multiple policies/groups/users are attached, you can configure the _Policy
Application entitlements can be used through authentik to manage authorization within an application (what areas of the app users or groups can access). Entitlements are scoped to a single application and can be bound to multiple users and/or groups (binding policies is not currently supported), giving them access to the entitlement. An application can either check for the name of the entitlement (via the `entitlements` scope), or via attributes stored in entitlements.
An authentik admin can create an entitlement [in the Admin interface](#create-an-application-entitlement) or using the [authentik API](../../developer-docs/api/api.md).
An authentik admin can create an entitlement [in the Admin interface](#create-an-application-entitlement) or using the [authentik API](/api).
Because entitlements exist within an application, names of entitlements must be unique within an application. This also means that entitlements are deleted when an application is deleted.

View File

@@ -5,7 +5,7 @@ title: Default
This is the default, web-based environment that flows are executed in. All stages are compatible with this environment and no limitations are imposed.
:::info
All flow executors use the same [API](../../../../developer-docs/api/flow-executor.md), which allows for the implementation of custom flow executors.
All flow executors use the same [API](/api/docs/flow-executor), which allows for the implementation of custom flow executors.
:::
## Layouts

View File

@@ -1,27 +0,0 @@
---
title: API
---
Our API reference documentation is generated, and is included [here](../api/reference/authentik.info.mdx) in our regular documentation Table of Contents, under **API -> Reference**.
You can also access your installation's own, instance-specific API Browser. Starting with 2021.3.5, every authentik instance has a built-in API browser, which can be accessed at <code>https://<em>authentik.company</em>/api/v3/</code>.
To generate an API client you can use the OpenAPI v3 schema at <code>https://<em>authentik.company</em>/api/v3/schema/</code>.
While testing, the API requests are authenticated by your browser session.
## Authentication
For any of the token-based methods, set the `Authorization` header to `Bearer <token>`.
### Session
When authenticating with a flow, you'll get an authenticated Session cookie, that can be used for authentication. Keep in mind that in this context, a CSRF header is also required.
### API Token
Users can create tokens to authenticate as any user with a static key, which can optionally be expiring and auto-rotate.
### JWT Token
OAuth2 clients can request the scope `goauthentik.io/api`, which allows their OAuth Access token to be used to authenticate to the API.

View File

@@ -1,15 +0,0 @@
---
title: API Clients
---
These API clients are officially supported and maintained.
:::info
These API clients are primarily built around creating/updating/deleting configuration objects in authentik, and in most cases can **not** be used to implemented SSO into your application.
:::
| Language | Package name | URL |
| --------------------- | ----------------------- | ---------------------------------------------- |
| JavaScript/Typescript | `@goauthentik/api` | https://www.npmjs.com/package/@goauthentik/api |
| Go | `goauthentik.io/api/v3` | https://pkg.go.dev/goauthentik.io/api/v3 |
| Python | `authentik_client` | https://pypi.org/project/authentik-client/ |

View File

@@ -1,23 +0,0 @@
---
title: Making schema changes
---
Some backend changes might require new/different fields or remove other fields. To create a new schema after changing a Serializer, run `make gen-build`.
This will update the `schema.yml` file in the root of the repository.
## Building the Go Client
The Go client is used by the Outpost to communicate with the backend authentik server. To build the go client, run `make gen-client-go`.
The generated files are stored in `/gen-go-api` in the root of the repository.
## Building the Web Client
The web client is used by the web-interface and web-FlowExecutor to communicate with authentik. To build the client, run `make gen-client-ts`.
Since the client is normally distributed as an npm package, running `make gen-client-ts` will overwrite the locally installed client with the newly built one.
:::caution
Running `npm i` in the `/web` folder after using `make gen-client-ts` will overwrite the custom client and revert to the upstream client.
:::

View File

@@ -0,0 +1 @@
module.exports = import("./docusaurus.config.esm.mjs").then(($) => $.default);

View File

@@ -0,0 +1,161 @@
/**
* @file Docusaurus Documentation config.
*
* @import { UserThemeConfig } from "@goauthentik/docusaurus-config";
* @import { ReleasesPluginOptions } from "@goauthentik/docusaurus-theme/releases/plugin"
*/
import { cp } from "node:fs/promises";
import { basename, resolve } from "node:path";
import { fileURLToPath } from "node:url";
import { createDocusaurusConfig } from "@goauthentik/docusaurus-config";
import {
createAlgoliaConfig,
createClassicPreset,
extendConfig,
} from "@goauthentik/docusaurus-theme/config";
import { remarkLinkRewrite } from "@goauthentik/docusaurus-theme/remark";
const __dirname = fileURLToPath(new URL(".", import.meta.url));
const rootStaticDirectory = resolve(__dirname, "..", "static");
const authentikModulePath = resolve(__dirname, "..", "..");
//#region Copy static files
const files = [
// ---
resolve(authentikModulePath, "docker-compose.yml"),
];
await Promise.all(
files.map((file) => {
const fileName = basename(file);
const destPath = resolve(rootStaticDirectory, fileName);
return cp(file, destPath, { recursive: true });
}),
);
//#endregion
//#region Configuration
export default createDocusaurusConfig(
extendConfig({
future: {
experimental_faster: true,
},
url: "https://docs.goauthentik.io",
//#region Preset
presets: [
createClassicPreset({
pages: {
path: "pages",
},
docs: {
routeBasePath: "/docs",
path: ".",
sidebarPath: "./sidebar.mjs",
showLastUpdateTime: false,
editUrl: "https://github.com/goauthentik/authentik/edit/main/website/docs/",
//#region Docs Plugins
beforeDefaultRemarkPlugins: [
remarkLinkRewrite([
// ---
// TODO: Enable after base path is set to '/'
// ["/docs", ""],
["/api", "https://api.goauthentik.io"],
["/integrations", "https://integrations.goauthentik.io"],
]),
],
},
}),
],
//#endregion
//#region Plugins
plugins: [
[
"@goauthentik/docusaurus-theme/releases/plugin",
/** @type {ReleasesPluginOptions} */ ({
docsDirectory: __dirname,
}),
],
],
//#endregion
//#region Theme
themes: ["@goauthentik/docusaurus-theme", "@docusaurus/theme-mermaid"],
themeConfig: /** @type {UserThemeConfig} */ ({
algolia: createAlgoliaConfig({
externalUrlRegex: /^(?:https?:\/\/)(?!docs\.goauthentik.io)/.source,
}),
image: "img/social.png",
navbar: {
logo: {
alt: "authentik logo",
src: "img/icon_left_brand.svg",
href: "https://goauthentik.io/",
target: "_self",
},
items: [
{
to: "https://goauthentik.io/features",
label: "Features",
position: "left",
target: "_self",
},
{
to: "https://integrations.goauthentik.io",
label: "Integrations",
position: "left",
target: "_self",
},
{
to: "docs/",
label: "Documentation",
position: "left",
},
{
to: "https://goauthentik.io/pricing/",
label: "Pricing",
position: "left",
target: "_self",
},
{
to: "https://goauthentik.io/blog",
label: "Blog",
position: "left",
target: "_self",
},
{
"href": "https://github.com/goauthentik/authentik",
"data-icon": "github",
"aria-label": "GitHub",
"position": "right",
},
{
"href": "https://goauthentik.io/discord",
"data-icon": "discord",
"aria-label": "Discord",
"position": "right",
},
],
},
}),
//#endregion
}),
);

View File

@@ -62,7 +62,7 @@ return ak_is_group_member(request.user, name="test_group")
Fetch a user matching `**filters`.
Returns "None" if no user was found, otherwise returns the [User](/docs/users-sources/user/index.mdx) object.
Returns "None" if no user was found, otherwise returns the [User](../users-sources/user/index.mdx) object.
Example:

View File

@@ -113,7 +113,7 @@ docker compose pull
docker compose up -d
```
The `docker-compose.yml` file statically references the latest version available at the time of downloading the compose file. Each time you upgrade to a newer version of authentik, you download a new `docker-compose.yml` file, which points to the latest available version. For more information, refer to the **Upgrading** section in the [Release Notes](../../releases/).
The `docker-compose.yml` file statically references the latest version available at the time of downloading the compose file. Each time you upgrade to a newer version of authentik, you download a new `docker-compose.yml` file, which points to the latest available version. For more information, refer to the **Upgrading** section in the [Release Notes](../../releases).
To start the initial setup, navigate to `http://<your server's IP or hostname>:9000/if/flow/initial-setup/`.

1138
website/docs/netlify.toml Normal file

File diff suppressed because it is too large Load Diff

36
website/docs/package.json Normal file
View File

@@ -0,0 +1,36 @@
{
"name": "@goauthentik/docs-topics",
"version": "0.0.0",
"license": "MIT",
"private": true,
"scripts": {
"build": "run-s check-types build:docusaurus",
"build:docusaurus": "docusaurus build --out-dir ../build",
"check-types": "tsc -b .",
"clear": "docusaurus clear",
"docusaurus": "docusaurus",
"serve": "docusaurus serve --dir ../build",
"start": "docusaurus start"
},
"dependencies": {
"@docusaurus/core": "3.7.0",
"@docusaurus/module-type-aliases": "3.7.0",
"@docusaurus/preset-classic": "3.7.0",
"@docusaurus/theme-mermaid": "3.7.0",
"@docusaurus/tsconfig": "3.7.0",
"@docusaurus/types": "3.7.0",
"@goauthentik/docusaurus-config": "1.1.0",
"@goauthentik/docusaurus-theme": "*",
"@mdx-js/react": "^3.1.0",
"@types/react": "^18.3.22",
"@types/react-dom": "^18.3.0",
"prism-react-renderer": "^2.3.0",
"react": "^18.3.1",
"react-before-after-slider-component": "^1.1.8",
"react-dom": "^18.3.1",
"unist-util-visit": "^5.0.0"
},
"engines": {
"node": ">=24"
}
}

View File

@@ -12,8 +12,6 @@ import {
createReleaseSidebarEntries,
} from "@goauthentik/docusaurus-theme/releases/utils";
import apiReference from "./developer-docs/api/reference/sidebar.ts";
const __dirname = fileURLToPath(new URL(".", import.meta.url));
const releases = collectReleaseFiles(path.join(__dirname));
@@ -637,33 +635,12 @@ const items = [
},
items: [
{
type: "category",
label: "API",
link: {
type: "doc",
id: "developer-docs/api/api",
},
items: [
"developer-docs/api/flow-executor",
"developer-docs/api/making-schema-changes",
"developer-docs/api/websocket",
{
type: "category",
label: "Reference",
items: apiReference,
},
"developer-docs/api/clients",
],
type: "link",
href: "pathname:///api",
label: "API Overview",
className: "api-overview",
},
// TODO: Enable when API docs are ready
// {
// type: "link",
// href: process.env.API_DOCS_URL || "https://api.goauthentik.io",
// label: "API Overview",
// className: "api-overview",
// },
{
//#endregion

View File

@@ -55,7 +55,7 @@ Be sure to disable the embedded outpost with `AUTHENTIK_OUTPOSTS__DISABLE_EMBEDD
### 2. Create a new tenant with authentik API endpoints
Tenants are created using the API routes associated. Search for `tenant` in the [API browser](../developer-docs/api/reference/authentik) for the available endpoints.
Tenants are created using the API routes associated. Search for `tenant` in the [API browser](/api/reference/authentik) for the available endpoints.
When creating a tenant you must specify a `name`, used for display purposes, and a `schema_name`, used to create the PostgreSQL schema associated with the tenant.

View File

@@ -0,0 +1,8 @@
{
"extends": "../tsconfig.base.json",
"references": [
{
"path": "../docusaurus-theme"
}
]
}

View File

@@ -8,7 +8,7 @@ The following topics are for the basic management of users: how to create, modif
### Create a user
> If you want to automate user creation, you can do that either by [invitations](./invitations.md), [`user_write` stage](../../add-secure-apps/flows-stages/stages/user_write.md), or [using the API](/docs/developer-docs/api/reference/core-users-create).
> If you want to automate user creation, you can do that either by [invitations](./invitations.md), [`user_write` stage](../../add-secure-apps/flows-stages/stages/user_write.md), or [using the API](/api/reference/core-users-create).
1. In the Admin interface of your authentik instance, select **Directory > Users** in the left side menu.
2. Select the folder where you want to create a user.

View File

@@ -3,10 +3,14 @@
*
* @import { Config } from "@docusaurus/types";
* @import { UserThemeConfig } from "@goauthentik/docusaurus-config";
* @import { Options as DocsPluginOptions } from "@docusaurus/plugin-content-docs";
* @import {Options as PresetOptions} from '@docusaurus/preset-classic';
* @import { BuildUrlValues } from "remark-github";
*/
import { createRequire } from "node:module";
import { resolve } from "node:path";
import { fileURLToPath } from "node:url";
import {
remarkEnterpriseDirective,
remarkPreviewDirective,
@@ -14,66 +18,116 @@ import {
remarkVersionDirective,
} from "#remark";
import { deepmerge } from "deepmerge-ts";
import remarkDirective from "remark-directive";
import remarkGithub, { defaultBuildUrl } from "remark-github";
//#region Common configuration
const require = createRequire(import.meta.url);
const __dirname = fileURLToPath(new URL(".", import.meta.url));
/**
* @satisfies {DocsPluginOptions}
*/
export const CommonDocsPluginOptions = {
showLastUpdateTime: false,
export const DocusaurusExcludePatterns = [
"**/_*.{js,jsx,ts,tsx,md,mdx}",
"**/_*/**",
"**/*.test.{js,jsx,ts,tsx}",
"**/__tests__/**",
"**/node_modules/**",
];
//#region Docs Plugins
//#region Preset
beforeDefaultRemarkPlugins: [
remarkDirective,
remarkVersionDirective,
remarkEnterpriseDirective,
remarkPreviewDirective,
remarkSupportDirective,
],
/** @type {PresetOptions} */
const CommonPresetOptions = {
googleAnalytics: {
trackingID: "G-9MVR9WZFZH",
anonymizeIP: true,
},
theme: {
customCss: [require.resolve("@goauthentik/docusaurus-config/css/index.css")],
},
remarkPlugins: [
[
remarkGithub,
{
repository: "goauthentik/authentik",
/**
* @param {BuildUrlValues} values
*/
buildUrl: (values) => {
// Only replace issues and PR links
return values.type === "issue" || values.type === "mention"
? defaultBuildUrl(values)
: false;
docs: {
showLastUpdateTime: false,
exclude: DocusaurusExcludePatterns,
include: ["**/*.mdx", "**/*.md"],
//#region Docs Plugins
beforeDefaultRemarkPlugins: [
remarkDirective,
remarkVersionDirective,
remarkEnterpriseDirective,
remarkPreviewDirective,
remarkSupportDirective,
],
remarkPlugins: [
[
remarkGithub,
{
repository: "goauthentik/authentik",
/**
* @param {BuildUrlValues} values
*/
buildUrl: (values) => {
// Only replace issues and PR links
return values.type === "issue" || values.type === "mention"
? defaultBuildUrl(values)
: false;
},
},
},
],
],
],
//#endregion
},
};
//#endregion
/**
* Documentation site configuration for Docusaurus.
* @satisfies {Partial<Config>}
* @param {Partial<PresetOptions>} overrides
* @returns {[string, PresetOptions]}
*/
export const CommonConfig = {
themeConfig: /** @type {UserThemeConfig} */ ({
algolia: {
appId: "36ROD0O0FV",
apiKey: "727db511300ca9aec5425645bbbddfb5",
indexName: "goauthentik",
externalUrlRegex: /.*/.source,
},
}),
plugins: [
[
"@docusaurus/plugin-google-gtag",
{
trackingID: ["G-9MVR9WZFZH"],
anonymizeIP: true,
},
export function createClassicPreset(overrides) {
return ["@docusaurus/preset-classic", deepmerge(CommonPresetOptions, overrides)];
}
/**
*
* @param {Partial<UserThemeConfig["algolia"]>} [overrides]
* @returns {UserThemeConfig["algolia"]}
*/
export function createAlgoliaConfig(overrides) {
return {
appId: "36ROD0O0FV",
apiKey: "727db511300ca9aec5425645bbbddfb5",
indexName: "goauthentik",
externalUrlRegex: /.*/.source,
...overrides,
};
}
/**
* @param {Partial<Config>} overrides
* @returns {Partial<Config>}
*/
export function extendConfig(overrides) {
/**
* @type {Partial<Config>}
*/
const commonConfig = {
staticDirectories: [
// ---
resolve(__dirname, "..", "static"),
"static",
],
],
};
themeConfig: /** @type {Partial<UserThemeConfig>} */ ({
footer: {
copyright: `Copyright © ${new Date().getFullYear()} Authentik Security Inc. Built with Docusaurus.`,
},
}),
};
return deepmerge(commonConfig, overrides);
}

View File

@@ -1,3 +0,0 @@
import { createESLintPackageConfig } from "@goauthentik/eslint-config";
export default createESLintPackageConfig();

View File

@@ -7,6 +7,7 @@
"exports": {
"./package.json": "./package.json",
".": "./index.js",
"./custom.css": "./custom.css",
"./config": "./config.js",
"./remark": "./remark/index.mjs",
"./components/*": "./components/*",
@@ -19,5 +20,17 @@
"#components/*": "./components/*",
"#hooks/*": "./hooks/*",
"#theme/*": "./theme/*"
},
"dependencies": {
"@docusaurus/preset-classic": "3.7.0",
"@goauthentik/docusaurus-config": "1.1.0",
"@types/semver": "^7.7.0",
"clsx": "^2.1.1",
"fast-glob": "^3.3.3",
"remark-directive": "^4.0.0",
"remark-github": "^12.0.0",
"semver": "^7.7.2",
"typescript": "^5.8.3",
"unist-util-visit": "^5.0.0"
}
}

View File

@@ -19,7 +19,7 @@ import type { Props } from "@theme/DocItem/Content";
import Heading from "@theme/Heading";
import MDXContent from "@theme/MDXContent";
import clsx from "clsx";
import React, { useEffect } from "react";
import React, { JSX, useEffect } from "react";
class MarkdownLintError extends Error {
constructor(message: string) {

View File

@@ -1,4 +1,6 @@
/// <reference types="@docusaurus/plugin-content-docs" />
import "./styles.css";
import { VersionPicker } from "#components/VersionPicker/index.tsx";
import {
@@ -7,7 +9,7 @@ import {
} from "@docusaurus/plugin-content-docs/client";
import DocSidebarItem from "@theme/DocSidebarItem";
import type { Props as DocSidebarItemsProps } from "@theme/DocSidebarItems";
import { memo } from "react";
import { JSX, memo } from "react";
const DocSidebarItems = ({ items, ...props }: DocSidebarItemsProps): JSX.Element => {
const visibleItems = useVisibleSidebarItems(items, props.activePath);

View File

@@ -1,3 +1,5 @@
import styles from "./styles.module.css";
import Translate from "@docusaurus/Translate";
import Admonition from "@theme/Admonition";
import type { Props } from "@theme/EditMetaRow";
@@ -6,8 +8,6 @@ import LastUpdated from "@theme/LastUpdated";
import clsx from "clsx";
import React from "react";
import styles from "./styles.module.css";
const EditMetaRow: React.FC<Props> = ({
className,
editUrl,

View File

@@ -1,12 +0,0 @@
/**
* @file CommonJS Docusaurus config adapter.
*
* This exists to allow an ESM Docusaurus configuration to be imported in a CommonJS.
*
* @import Config from "./docusaurus.config.esm.mjs"
*/
/**
* @see {@linkcode Config} for the Docusaurus configuration type.
*/
module.exports = import("./docusaurus.config.esm.mjs").then(($) => $.default);

View File

@@ -1,17 +1,11 @@
import { createESLintPackageConfig, DefaultIgnorePatterns } from "@goauthentik/eslint-config";
// @ts-check
/**
* ESLint configuration for authentik's monorepo.
*/
const ESLintConfig = createESLintPackageConfig({
export default createESLintPackageConfig({
ignorePatterns: [
// ---
...DefaultIgnorePatterns,
".docusaurus/",
"./build",
"**/.docusaurus/",
"**/build",
"**/reference",
],
});
export default ESLintConfig;

View File

@@ -6,6 +6,8 @@ sidebar_position: 2
import SupportBadge from "@goauthentik/docusaurus-theme/components/SupportBadge.tsx";
import DocCardList from "@theme/DocCardList";
# Applications
Most third-party services that support authentication protocols such as SAML, OAuth, and OpenID Connect can be integrated with authentik, allowing users to log in to these services using their authentik credentials.
@@ -23,8 +25,8 @@ All documented app integrations will have one of these badges:
<a id="add-new"></a>
To add documentation for a new application (with support level Community or Vendor), please use the integration template [`service.md`](https://github.com/goauthentik/authentik/blob/main/website/integrations/template/service.md) file from our GitHub repo. You can download the template file using the following command:
To add documentation for a new application (with support level Community or Vendor), please use the integration template [`service.md`](https://github.com/goauthentik/authentik/blob/main/website/docs/integrations/template/service.md) file from our GitHub repo. You can download the template file using the following command:
```shell
wget https://raw.githubusercontent.com/goauthentik/authentik/main/website/integrations/template/service.md
wget https://raw.githubusercontent.com/goauthentik/authentik/main/website/docs/integrations/template/service.md
```

View File

@@ -1,128 +1,40 @@
/**
* @file Docusaurus Integrations config.
*
* @import { Config } from "@docusaurus/types";
* @import { UserThemeConfig } from "@goauthentik/docusaurus-config";
* @import { BuildUrlValues } from "remark-github";
* @import { Options as DocsPluginOptions } from "@docusaurus/plugin-content-docs";
* @import { Options as RedirectsPluginOptions } from "@docusaurus/plugin-client-redirects";
*/
import { createRequire } from "node:module";
import { join } from "node:path";
import { fileURLToPath } from "node:url";
import { createDocusaurusConfig } from "@goauthentik/docusaurus-config";
import { CommonConfig, CommonDocsPluginOptions } from "@goauthentik/docusaurus-theme/config";
import { remarkLinkRewrite } from "@goauthentik/docusaurus-theme/remark";
import { GlobExcludeDefault } from "@docusaurus/utils";
import { deepmerge } from "deepmerge-ts";
import { legacyRedirects } from "./legacy-redirects.mjs";
const require = createRequire(import.meta.url);
const __dirname = fileURLToPath(new URL(".", import.meta.url));
import { createDocusaurusConfig } from "@goauthentik/docusaurus-config";
import {
createAlgoliaConfig,
createClassicPreset,
extendConfig,
} from "@goauthentik/docusaurus-theme/config";
import { remarkLinkRewrite } from "@goauthentik/docusaurus-theme/remark";
//#region Configuration
/**
* Documentation site configuration for Docusaurus.
* @satisfies {Partial<Config>}
*/
const config = {
url: "https://integrations.goauthentik.io",
future: {
experimental_faster: true,
},
themes: ["@goauthentik/docusaurus-theme", "@docusaurus/theme-mermaid"],
themeConfig: /** @type {UserThemeConfig} */ ({
image: "img/social.png",
navbar: {
logo: {
alt: "authentik logo",
src: "img/icon_left_brand.svg",
href: "https://goauthentik.io/",
target: "_self",
},
items: [
{
to: "https://goauthentik.io/features",
label: "Features",
position: "left",
target: "_self",
},
{
to: "https://integrations.goauthentik.io",
label: "Integrations",
position: "left",
},
{
to: "https://docs.goauthentik.io",
label: "Documentation",
position: "left",
target: "_self",
},
{
to: "https://goauthentik.io/pricing/",
label: "Pricing",
position: "left",
target: "_self",
},
{
to: "https://goauthentik.io/blog",
label: "Blog",
position: "left",
target: "_self",
},
{
"href": "https://github.com/goauthentik/authentik",
"data-icon": "github",
"aria-label": "GitHub",
"position": "right",
},
{
"href": "https://goauthentik.io/discord",
"data-icon": "discord",
"aria-label": "Discord",
"position": "right",
},
],
export default createDocusaurusConfig(
extendConfig({
future: {
experimental_faster: true,
},
footer: {
links: [],
copyright: `Copyright © ${new Date().getFullYear()} Authentik Security Inc. Built with Docusaurus.`,
},
}),
plugins: [
[
"@docusaurus/theme-classic",
{
customCss: [
require.resolve("@goauthentik/docusaurus-config/css/index.css"),
join(__dirname, "./custom.css"),
],
},
],
url: "https://integrations.goauthentik.io",
//#region Documentation
//#region Preset
[
"@docusaurus/plugin-content-docs",
deepmerge(
CommonDocsPluginOptions,
/** @type {DocsPluginOptions} */ ({
id: "docsIntegrations",
exclude: [...GlobExcludeDefault],
include: ["**/*.mdx", "**/*.md"],
path: "integrations",
presets: [
createClassicPreset({
docs: {
path: ".",
routeBasePath: "/",
sidebarPath: "./integrations/sidebar.mjs",
editUrl: "https://github.com/goauthentik/authentik/edit/main/website/",
showLastUpdateTime: false,
//#region Docs Plugins
sidebarPath: "./sidebar.mjs",
editUrl:
"https://github.com/goauthentik/authentik/edit/main/website/integrations/",
beforeDefaultRemarkPlugins: [
remarkLinkRewrite([
@@ -131,28 +43,98 @@ const config = {
["/docs", "https://docs.goauthentik.io"],
]),
],
}),
),
],
[
"@docusaurus/plugin-client-redirects",
/** @type {RedirectsPluginOptions} */ ({
redirects: [
{
from: "/integrations",
to: "/",
},
...Array.from(legacyRedirects, ([from, to]) => {
return {
from: [from, `/integrations${from}`],
to,
};
}),
],
},
}),
],
["@docusaurus/plugin-sitemap", {}],
],
};
export default /** @type {Config} */ (deepmerge(CommonConfig, createDocusaurusConfig(config)));
//#endregion
//#region Plugins
plugins: [
[
"@docusaurus/plugin-client-redirects",
/** @type {RedirectsPluginOptions} */ ({
redirects: [
{
from: "/integrations",
to: "/",
},
...Array.from(legacyRedirects, ([from, to]) => {
return {
from: [from, `/integrations${from}`],
to,
};
}),
],
}),
],
],
//#endregion
//#region Theme
themes: ["@goauthentik/docusaurus-theme", "@docusaurus/theme-mermaid"],
themeConfig: /** @type {UserThemeConfig} */ ({
algolia: createAlgoliaConfig({
externalUrlRegex: /^(?:https?:\/\/)(?!integrations\.goauthentik.io)/.source,
}),
image: "img/social.png",
navbar: {
logo: {
alt: "authentik logo",
src: "img/icon_left_brand.svg",
href: "https://goauthentik.io/",
target: "_self",
},
items: [
{
to: "https://goauthentik.io/features",
label: "Features",
position: "left",
target: "_self",
},
{
to: "/",
label: "Integrations",
position: "left",
},
{
to: "https://docs.goauthentik.io",
label: "Documentation",
position: "left",
target: "_self",
},
{
to: "https://goauthentik.io/pricing/",
label: "Pricing",
position: "left",
target: "_self",
},
{
to: "https://goauthentik.io/blog",
label: "Blog",
position: "left",
target: "_self",
},
{
"href": "https://github.com/goauthentik/authentik",
"data-icon": "github",
"aria-label": "GitHub",
"position": "right",
},
{
"href": "https://goauthentik.io/discord",
"data-icon": "discord",
"aria-label": "Discord",
"position": "right",
},
],
},
}),
//#endregion
}),
);

View File

@@ -1,10 +0,0 @@
import { createESLintPackageConfig, DefaultIgnorePatterns } from "@goauthentik/eslint-config";
export default createESLintPackageConfig({
ignorePatterns: [
// ---
...DefaultIgnorePatterns,
".docusaurus/",
"./build",
],
});

View File

@@ -0,0 +1,30 @@
[[plugins]]
package = "netlify-plugin-cache"
[plugins.inputs]
paths = [".docusaurus", ".cache", 'node_modules/.cache']
[[plugins]]
package = "netlify-plugin-debug-cache"
[build]
base = "website"
package = "integrations"
command = "npm run build -w integrations"
publish = "integrations/build"
[dev]
command = "npm start"
targetPort = 3000
publish = "integrations/build"
[context.production.environment]
NODE_ENV = "production"
[context.dev.environment]
NODE_ENV = "development"
[[headers]]
for = "/*"
[headers.values]
X-Frame-Options = "DENY"

View File

@@ -0,0 +1,34 @@
{
"name": "@goauthentik/integration-docs",
"version": "0.0.0",
"license": "MIT",
"private": true,
"scripts": {
"build": "run-s build:docusaurus",
"build:docusaurus": "docusaurus build --out-dir ../build",
"clear": "docusaurus clear",
"docusaurus": "docusaurus",
"serve": "docusaurus serve --dir ../build",
"start": "docusaurus start"
},
"dependencies": {
"@docusaurus/core": "3.7.0",
"@docusaurus/module-type-aliases": "3.7.0",
"@docusaurus/plugin-client-redirects": "3.7.0",
"@docusaurus/preset-classic": "3.7.0",
"@docusaurus/theme-mermaid": "3.7.0",
"@docusaurus/tsconfig": "3.7.0",
"@docusaurus/types": "3.7.0",
"@goauthentik/docusaurus-config": "1.1.0",
"@goauthentik/docusaurus-theme": "*",
"@mdx-js/react": "^3.0.0",
"@types/react": "^18.3.22",
"@types/react-dom": "^18.3.0",
"prism-react-renderer": "^2.3.0",
"react": "^18.3.1",
"react-dom": "^18.3.1"
},
"engines": {
"node": ">=24"
}
}

View File

@@ -32,10 +32,10 @@ _Any specific info about this integration can go here._
1. Log in to authentik as an administrator and open the authentik Admin interface.
2. Navigate to **Applications** > **Applications** and click **Create with Provider** to create an application and provider pair. (Alternatively you can first create a provider separately, then create the application and connect it with the provider.)
- **Application**: provide a descriptive name, an optional group for the type of application, the policy engine mode, and optional UI settings.
- _If there are any specific settings required, list them here. Refer to the [ownCloud integration documentation](https://github.com/goauthentik/authentik/blob/main/website/integrations/services/owncloud/index.md) for a complex requirements example._
- _If there are any specific settings required, list them here. Refer to the [ownCloud integration documentation](https://github.com/goauthentik/authentik/blob/main/website/integrations/chat-communication-collaboration/owncloud/index.md) for a complex requirements example._
- **Choose a Provider type**: _If there is a specific provider type required, state that here._
- **Configure the Provider**: provide a name (or accept the auto-provided name), the authorization flow to use for this provider, and the following required configurations.
- _If there are any specific settings required, list them here. Refer to the [ownCloud integration documentation](https://github.com/goauthentik/authentik/blob/main/website/integrations/services/owncloud/index.md) for a complex requirements example._
- _If there are any specific settings required, list them here. Refer to the [ownCloud integration documentation](https://github.com/goauthentik/authentik/blob/main/website/integrations/chat-communication-collaboration/owncloud/index.md) for a complex requirements example._
- **Configure Bindings** _(optional)_: you can create a [binding](/docs/add-secure-apps/flows-stages/bindings/) (policy, group, or user) to manage the listing and access to applications on a user's **My applications** page.
3. Click **Submit** to save the new application and provider.

View File

@@ -0,0 +1,8 @@
{
"extends": "../tsconfig.base.json",
"references": [
{
"path": "../docusaurus-theme"
}
]
}

View File

@@ -1,237 +0,0 @@
advanced/tenancy.md -> sys-mgmt/tenancy.md
applications/index.md -> add-secure-apps/applications/index.md
applications/manage_apps.md -> add-secure-apps/applications/manage_apps.md
core/architecture.md -> core/architecture.md
core/brands.md -> customize/brands.md
core/certificates.md -> sys-mgmt/certificates.md
core/geoip.mdx -> install-config/geoip.mdx
core/settings.md -> sys-mgmt/settings.md
core/terminology.md -> core/terminology.md
enterprise/entsupport.md -> enterprise/entsupport.md
enterprise/get-started.md -> enterprise/get-started.md
enterprise/index.md -> enterprise/index.md
enterprise/licenses-page-admin.png -> enterprise/licenses-page-admin.png
enterprise/manage-enterprise.md -> enterprise/manage-enterprise.md
events/event_matcher.png -> sys-mgmt/events/event_matcher.png
events/index.md -> sys-mgmt/events/index.md
events/notifications.md -> sys-mgmt/events/notifications.md
events/transports.md -> sys-mgmt/events/transports.md
flow/context/index.md -> add-secure-apps/flows-stages/flow/context/index.md
flow/create-flow.png -> add-secure-apps/flows-stages/flow/create-flow.png
flow/examples/flows.md -> add-secure-apps/flows-stages/flow/examples/flows.md
flow/examples/snippets.md -> add-secure-apps/flows-stages/flow/examples/snippets.md
flow/executors/headless.md -> add-secure-apps/flows-stages/flow/executors/headless.md
flow/executors/if-flow.md -> add-secure-apps/flows-stages/flow/executors/if-flow.md
flow/executors/sfe.md -> add-secure-apps/flows-stages/flow/executors/sfe.md
flow/executors/user-settings.md -> add-secure-apps/flows-stages/flow/executors/user-settings.md
flow/flow-inspector.png -> add-secure-apps/flows-stages/flow/flow-inspector.png
flow/index.md -> add-secure-apps/flows-stages/flow/index.md
flow/inspector.md -> add-secure-apps/flows-stages/flow/inspector.md
flow/layouts.md -> add-secure-apps/flows-stages/flow/layouts.md
flow/layouts/content_left.png -> add-secure-apps/flows-stages/flow/layouts/content_left.png
flow/layouts/content_right.png -> add-secure-apps/flows-stages/flow/layouts/content_right.png
flow/layouts/sidebar_left.png -> add-secure-apps/flows-stages/flow/layouts/sidebar_left.png
flow/layouts/sidebar_right.png -> add-secure-apps/flows-stages/flow/layouts/sidebar_right.png
flow/layouts/stacked.png -> add-secure-apps/flows-stages/flow/layouts/stacked.png
flow/simple_stages.png -> add-secure-apps/flows-stages/flow/simple_stages.png
flow/stages/authenticator_duo/index.md -> add-secure-apps/flows-stages/stages//authenticator_duo/index.md
flow/stages/authenticator_sms/index.md -> add-secure-apps/flows-stages/stages/authenticator_sms/index.md
flow/stages/authenticator_static/index.md -> add-secure-apps/flows-stages/stages/authenticator_static/index.md
flow/stages/authenticator_totp/index.md -> add-secure-apps/flows-stages/stages/authenticator_totp/index.md
flow/stages/authenticator_validate/index.md -> add-secure-apps/flows-stages/stages/authenticator_validate/index.md
flow/stages/authenticator_webauthn/index.md -> add-secure-apps/flows-stages/stages/authenticator_webauthn/index.md
flow/stages/captcha/captcha-admin.png -> add-secure-apps/flows-stages/stages/captcha/captcha-admin.png
flow/stages/captcha/index.md -> add-secure-apps/flows-stages/stages/captcha/index.md
flow/stages/deny.md -> add-secure-apps/flows-stages/stages/deny.md
flow/stages/email/custom_template.png -> add-secure-apps/flows-stages/stages/email/custom_template.png
flow/stages/email/email_recovery.png -> add-secure-apps/flows-stages/stages/email/email_recovery.png
flow/stages/email/index.mdx -> add-secure-apps/flows-stages/stages/email/index.mdx
flow/stages/identification/index.md -> add-secure-apps/flows-stages/stages/identification/index.md
flow/stages/index.md -> add-secure-apps/flows-stages/stages/index.md
flow/stages/invitation/index.md -> add-secure-apps/flows-stages/stages/invitation/index.md
flow/stages/password/index.md -> add-secure-apps/flows-stages/stages/password/index.md
flow/stages/prompt/index.md -> add-secure-apps/flows-stages/stages/prompt/index.md
flow/stages/source/index.md -> add-secure-apps/flows-stages/stages/source/index.md
flow/stages/user_delete.md -> add-secure-apps/flows-stages/stages/user_delete.md
flow/stages/user_login/index.md -> add-secure-apps/flows-stages/stages/user_login/index.md
flow/stages/user_login/stay_signed_in.png -> add-secure-apps/flows-stages/stages/user_login/stay_signed_in.png
flow/stages/user_logout.md -> add-secure-apps/flows-stages/stages/user_logout.md
flow/stages/user_write.md -> add-secure-apps/flows-stages/stages/user_write.md
installation/air-gapped.mdx -> install-config/air-gapped.mdx
installation/automated-install.md -> install-config/automated-install.md
installation/beta.mdx -> install-config/beta.mdx
installation/configuration.mdx -> install-config/configuration/configuration.mdx
installation/dashboard.png -> install-config/dashboard.png
installation/docker-compose.mdx -> install-config/install/docker-compose.mdx
installation/index.mdx -> install-config/index.mdx
installation/kubernetes.md -> install-config/install/kubernetes.md
installation/monitoring.md -> sys-mgmt/ops/monitoring.md
installation/reverse-proxy.md -> install-config/reverse-proxy.md
installation/storage-s3.md -> install-config/storage-s3.md
installation/upgrade.mdx -> install-config/upgrade.mdx
installation/version1.png -> install-config/version1.png
interfaces/_global/customcss.mdx -> customize/interfaces/_global/customcss.mdx
interfaces/_global/global.mdx -> customize/interfaces/_global/global.mdx
interfaces/admin/customization.mdx -> customize/interfaces/admin/customization.mdx
interfaces/flow/customization.mdx -> customize/interfaces/flow/customization.mdx
interfaces/user/customization.mdx -> customize/interfaces/user/customization.mdx
outposts/_config.md -> add-secure-apps/outposts/_config.md
outposts/embedded/embedded.mdx -> add-secure-apps/outposts/embedded/embedded.mdx
outposts/index.mdx -> add-secure-apps/outposts/index.mdx
outposts/integrations/docker.md -> add-secure-apps/outposts/integrations/docker.md
outposts/integrations/kubernetes.md -> add-secure-apps/outposts/integrations/kubernetes.md
outposts/manual-deploy-docker-compose.md -> add-secure-apps/outposts/manual-deploy-docker-compose.md
outposts/manual-deploy-kubernetes.md -> add-secure-apps/outposts/manual-deploy-kubernetes.md
outposts/outpost-create.png -> add-secure-apps/outposts/outpost-create.png
outposts/upgrading.md -> add-secure-apps/outposts/upgrading.md
outposts/upgrading_outdated.png -> add-secure-apps/outposts/upgrading_outdated.png
policies/expression.mdx -> customize/policies/expression.mdx
policies/index.md -> customize/policies/index.md
policies/working_with_policies/unique_email.md -> customize/policies/working_with_policies/unique_email.md
policies/working_with_policies/whitelist_email.md -> customize/policies/working_with_policies/whitelist_email.md
policies/working_with_policies/working_with_policies.md -> customize/policies/working_with_policies/working_with_policies.md
providers/entra/add-entra-provider.md -> add-secure-apps/providers/entra/add-entra-provider.md
providers/entra/index.md -> add-secure-apps/providers/entra/index.md
providers/entra/setup-entra.md -> add-secure-apps/providers/entra/setup-entra.md
providers/gws/add-gws-provider.md -> add-secure-apps/providers/gws/add-gws-provider.md
providers/gws/index.md -> add-secure-apps/providers/gws/index.md
providers/gws/setup-gws.md -> add-secure-apps/providers/gws/setup-gws.md
providers/index.mdx -> add-secure-apps/providers/index.mdx
providers/ldap/general_setup1.png -> add-secure-apps/providers/ldap/general_setup1.png
providers/ldap/general_setup10.png -> add-secure-apps/providers/ldap/general_setup10.png
providers/ldap/general_setup11.png -> add-secure-apps/providers/ldap/general_setup11.png
providers/ldap/general_setup12.png -> add-secure-apps/providers/ldap/general_setup12.png
providers/ldap/general_setup13.png -> add-secure-apps/providers/ldap/general_setup13.png
providers/ldap/general_setup14.png -> add-secure-apps/providers/ldap/general_setup14.png
providers/ldap/general_setup15.png -> add-secure-apps/providers/ldap/general_setup15.png
providers/ldap/general_setup16.png -> add-secure-apps/providers/ldap/general_setup16.png
providers/ldap/general_setup2.png -> add-secure-apps/providers/ldap/general_setup2.png
providers/ldap/general_setup3.png -> add-secure-apps/providers/ldap/general_setup3.png
providers/ldap/general_setup4.png -> add-secure-apps/providers/ldap/general_setup4.png
providers/ldap/general_setup5.png -> add-secure-apps/providers/ldap/general_setup5.png
providers/ldap/general_setup6.png -> add-secure-apps/providers/ldap/general_setup6.png
providers/ldap/general_setup7.png -> add-secure-apps/providers/ldap/general_setup7.png
providers/ldap/general_setup8.png -> add-secure-apps/providers/ldap/general_setup8.png
providers/ldap/general_setup9.png -> add-secure-apps/providers/ldap/general_setup9.png
providers/ldap/generic_setup.md -> add-secure-apps/providers/ldap/generic_setup.md
providers/ldap/index.md -> add-secure-apps/providers/ldap/index.md
providers/oauth2/client_credentials.md -> add-secure-apps/providers/oauth2/client_credentials.md
providers/oauth2/device_code.md -> add-secure-apps/providers/oauth2/device_code.md
providers/oauth2/index.md -> add-secure-apps/providers/oauth2/index.md
providers/property-mappings/expression.mdx -> add-secure-apps/providers/property-mappings/expression.mdx
providers/property-mappings/index.md -> add-secure-apps/providers/property-mappings/index.md
providers/proxy/__placeholders.md -> add-secure-apps/providers/proxy/__placeholders.md
providers/proxy/_caddy_standalone.md -> add-secure-apps/providers/proxy/_caddy_standalone.md
providers/proxy/_envoy_istio.md -> add-secure-apps/providers/proxy/_envoy_istio.md
providers/proxy/_nginx_ingress.md -> add-secure-apps/providers/proxy/_nginx_ingress.md
providers/proxy/_nginx_proxy_manager.md -> add-secure-apps/providers/proxy/_nginx_proxy_manager.md
providers/proxy/_nginx_standalone.md -> add-secure-apps/providers/proxy/_nginx_standalone.md
providers/proxy/_traefik_compose.md -> add-secure-apps/providers/proxy/_traefik_compose.md
providers/proxy/_traefik_ingress.md -> add-secure-apps/providers/proxy/_traefik_ingress.md
providers/proxy/_traefik_standalone.md -> add-secure-apps/providers/proxy/_traefik_standalone.md
providers/proxy/custom_headers.md -> add-secure-apps/providers/proxy/custom_headers.md
providers/proxy/forward_auth.mdx -> add-secure-apps/providers/proxy/forward_auth.mdx
providers/proxy/header_authentication.md -> add-secure-apps/providers/proxy/header_authentication.md
providers/proxy/index.md -> add-secure-apps/providers/proxy/index.md
providers/proxy/server_caddy.mdx -> add-secure-apps/providers/proxy/server_caddy.mdx
providers/proxy/server_envoy.mdx -> add-secure-apps/providers/proxy/server_envoy.mdx
providers/proxy/server_nginx.mdx -> add-secure-apps/providers/proxy/server_nginx.mdx
providers/proxy/server_traefik.mdx -> add-secure-apps/providers/proxy/server_traefik.mdx
providers/rac/how-to-rac.md -> add-secure-apps/providers/rac/how-to-rac.md
providers/rac/index.md -> add-secure-apps/providers/rac/index.md
providers/rac/rac-v3.png -> add-secure-apps/providers/rac/rac-v3.png
providers/radius/index.mdx -> add-secure-apps/providers/radius/index.mdx
providers/saml/index.md -> add-secure-apps/providers/saml/index.md
providers/scim/index.md -> add-secure-apps/providers/scim/index.md
security/2023-06-cure53.md -> security/audits-and-certs/2023-06-cure53.md
security/CVE-2022-23555.md -> security/cves/CVE-2022-23555.md
security/CVE-2022-46145.md -> security/cves/CVE-2022-46145.md
security/CVE-2022-46172.md -> security/cves/CVE-2022-46172.md
security/CVE-2023-26481.md -> security/cves/CVE-2023-26481.md
security/CVE-2023-36456.md -> security/cves/CVE-2023-36456.md
security/CVE-2023-39522.md -> security/cves/CVE-2023-39522.md
security/CVE-2023-48228.md -> security/cves/CVE-2023-48228.md
security/CVE-2024-21637.md -> security/cves/CVE-2024-21637.md
security/CVE-2024-23647.md -> security/cves/CVE-2024-23647.md
security/CVE-2024-37905.md -> security/cves/CVE-2024-37905.md
security/CVE-2024-38371.md -> security/cves/CVE-2024-38371.md
security/GHSA-rjvp-29xq-f62w.md -> security/cves/GHSA-rjvp-29xq-f62w.md
sources/active-directory/01_user_create.png -> users-sources/sources/directory-sync/active-directory/01_user_create.png
sources/active-directory/02_delegate.png -> users-sources/sources/directory-sync/active-directory/02_delegate.png
sources/active-directory/03_additional_perms.png -> users-sources/sources/directory-sync/active-directory/03_additional_perms.png
sources/active-directory/10_ak_status.png -> users-sources/sources/directory-sync/active-directory/03_additional_perms.png
sources/active-directory/11_ak_stage.png -> users-sources/sources/directory-sync/active-directory/11_ak_stage.png
sources/active-directory/index.md -> users-sources/sources/directory-sync/active-directory/index.md
sources/apple/app_id.png -> users-sources/sources/social-logins/apple/app_id.png
sources/apple/app_service_config.png -> users-sources/sources/social-logins/apple/app_service_config.png
sources/apple/index.md -> users-sources/sources/social-logins/apple/index.md
sources/apple/key.png -> users-sources/sources/social-logins/apple/key.png
sources/apple/service_id.png -> users-sources/sources/social-logins/apple/service_id.png
sources/azure-ad/aad_01.png -> users-sources/sources/social-logins/azure-ad/aad_01.png
sources/azure-ad/authentik_01.png -> users-sources/sources/social-logins/azure-ad/authentik_01.png
sources/azure-ad/index.md -> users-sources/sources/social-logins/azure-ad/index.md
sources/discord/discord1.png -> users-sources/sources/social-logins/discord/discord1.png
sources/discord/discord2.png -> users-sources/sources/social-logins/discord/discord2.png
sources/discord/discord3.png -> users-sources/sources/social-logins/discord/discord3.png
sources/discord/discord4.png -> users-sources/sources/social-logins/discord/discord4.png
sources/discord/index.md -> users-sources/sources/social-logins/discord/index.md
sources/facebook/index.md -> users-sources/sources/social-logins/facebook/index.md
sources/freeipa/01_user_create.png -> users-sources/sources/directory-sync/freeipa/01_user_create.pn
sources/freeipa/02_user_roles.png -> users-sources/sources/directory-sync/freeipa/02_user_roles.png
sources/freeipa/03_add_user_role.png -> users-sources/sources/directory-sync/freeipa/03_add_user_role.png
sources/freeipa/04_source_settings_1.png -> users-sources/sources/directory-sync/freeipa/04_source_settings_1.png
sources/freeipa/05_source_settings_2.png -> users-sources/sources/directory-sync/freeipa/05_source_settings_2.png
sources/freeipa/06_sync_source.png -> users-sources/sources/directory-sync/freeipa/06_sync_source.png
sources/freeipa/07_password_stage.png -> users-sources/sources/directory-sync/freeipa/07_password_stage.png
sources/freeipa/index.md -> users-sources/sources/directory-sync/freeipa/index.md
sources/github/github_org_membership.png -> users-sources/sources/social-logins/github/github_org_membership.png
sources/github/githubdeveloper1.png -> users-sources/sources/social-logins/github/githubdeveloper1.png
sources/github/githubdeveloperexample.png -> users-sources/sources/social-logins/github/githubdeveloperexample.png
sources/github/githubexample2.png -> users-sources/sources/social-logins/github/githubexample2.png
sources/github/index.md -> users-sources/sources/social-logins/github/index.md
sources/google/authentiksource.png -> users-sources/sources/social-logins/google/authentiksource.png
sources/google/googledeveloper1.png -> users-sources/sources/social-logins/google/googledeveloper1.png
sources/google/googledeveloper2.png -> users-sources/sources/social-logins/google/googledeveloper2.png
sources/google/googledeveloper3.png -> users-sources/sources/social-logins/google/googledeveloper3.png
sources/google/googledeveloper4.png -> users-sources/sources/social-logins/google/googledeveloper4.png
sources/google/googledeveloper5.png -> users-sources/sources/social-logins/google/googledeveloper5.png
sources/google/googledeveloper6.png -> users-sources/sources/social-logins/google/googledeveloper6.png
sources/google/index.md -> users-sources/sources/social-logins/google/index.md
sources/index.md -> users-sources/sources/index.md
sources/ldap/index.md -> users-sources/sources/protocols/ldap/index.md
sources/mailcow/index.md -> users-sources/sources/social-logins/mailcow/index.md
sources/mailcow/mailcow1.png -> users-sources/sources/social-logins/mailcow/mailcow1.png
sources/mailcow/mailcow2.png -> users-sources/sources/social-logins/mailcow/mailcow2.png
sources/mailcow/mailcow3.png -> users-sources/sources/social-logins/mailcow/mailcow3.png
sources/mailcow/mailcow4.png -> users-sources/sources/social-logins/mailcow/mailcow4.png
sources/mailcow/mailcow5.png -> users-sources/sources/social-logins/mailcow/mailcow5.png
sources/oauth/index.md -> users-sources/sources/protocols/oauth/index.md
sources/plex/index.md -> users-sources/sources/social-logins/plex/index.md
sources/property-mappings/expressions.md -> users-sources/sources/property-mappings/expressions.md
sources/property-mappings/index.md -> users-sources/sources/property-mappings/index.md
sources/saml/index.md -> users-sources/sources/protocols/saml/index.md
sources/scim/index.md -> users-sources/sources/protocols/scim/index.md
sources/twitch/index.md -> users-sources/sources/social-logins/twitch/index.md
sources/twitch/twitch1.png -> users-sources/sources/social-logins/twitch/twitch1.png
sources/twitch/twitch2.png -> users-sources/sources/social-logins/twitch/twitch2.png
sources/twitch/twitch3.png -> users-sources/sources/social-logins/twitch/twitch3.png
sources/twitch/twitch4.png -> users-sources/sources/social-logins/twitch/twitch4.png
sources/twitch/twitch5.png -> users-sources/sources/social-logins/twitch/twitch5.png
sources/twitter/index.md -> users-sources/sources/social-logins/twitter/index.md
sources/twitter/twitter1.png -> users-sources/sources/social-logins/twitter/twitter1.png
sources/twitter/twitter2.png -> users-sources/sources/social-logins/twitter/twitter2.png
user-group-role/access-control/flow-page.png -> users-sources/access-control/flow-page.png
user-group-role/access-control/index.mdx -> users-sources/access-control/index.mdx
user-group-role/access-control/manage_permissions.md -> users-sources/access-control/manage_permissions.md
user-group-role/access-control/permissions.md -> users-sources/access-control/permissions.md
user-group-role/access-control/user-page.png -> users-sources/access-control/user-page.png
user-group-role/groups/group_ref.md -> users-sources/groups/group_ref.md
user-group-role/groups/index.mdx -> users-sources/groups/index.mdx
user-group-role/groups/manage_groups.md -> users-sources/groups/manage_groups.md
user-group-role/roles/index.mdx -> users-sources/roles/index.md
user-group-role/roles/manage_roles.md -> users-sources/roles/manage_roles.md
user-group-role/user/create_invite.png -> users-sources/user/create_invite.png
user-group-role/user/index.mdx -> users-sources/user/index.mdx
user-group-role/user/invitations.md -> users-sources/user/invitations.md
user-group-role/user/user_basic_operations.md -> users-sources/user/user_basic_operations.md
user-group-role/user/user_ref.md -> users-sources/user/user_ref.md

File diff suppressed because it is too large Load Diff

9023
website/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,73 +4,33 @@
"license": "MIT",
"private": true,
"scripts": {
"build": "run-s build:schema build:api build:docusaurus",
"build:api": "docusaurus gen-api-docs all",
"build:docusaurus": "cross-env NODE_OPTIONS='--max_old_space_size=65536' docusaurus build",
"build:integrations": "cross-env NODE_OPTIONS='--max_old_space_size=65536' docusaurus build --config integrations/docusaurus.config.cjs",
"build:schema": "cp -f ../schema.yml ./static/schema.yml",
"deploy": "docusaurus deploy",
"build": "run-s build:api build:docusaurus build:api:copy",
"build:api": "npm run build -w api",
"build:api:copy": "cp -r ./api/build ./build/api",
"build:docusaurus": "npm run build -w docs",
"build:integrations": "npm run build -w integrations",
"check-types": "tsc -b",
"docusaurus": "docusaurus",
"lint": "eslint --fix .",
"lint-check": "eslint --max-warnings 0 .",
"lint:lockfile": "echo 'Skipping lockfile linting'",
"prettier": "prettier --write .",
"prettier-check": "prettier --check .",
"serve": "docusaurus serve",
"serve:integrations": "docusaurus serve --config integrations/docusaurus.config.cjs",
"start": "docusaurus start",
"swizzle": "docusaurus swizzle",
"test": "node --test",
"watch": "run-s build:schema build:api start",
"watch:integrations": "docusaurus start --config integrations/docusaurus.config.cjs"
"start": "npm start -w docs",
"test": "node --test"
},
"dependencies": {
"@docusaurus/core": "^3.7.0",
"@docusaurus/faster": "^3.7.0",
"@docusaurus/module-type-aliases": "^3.7.0",
"@docusaurus/plugin-client-redirects": "^3.7.0",
"@docusaurus/plugin-content-docs": "^3.7.0",
"@docusaurus/preset-classic": "^3.7.0",
"@docusaurus/theme-common": "^3.7.0",
"@docusaurus/theme-mermaid": "^3.7.0",
"@docusaurus/tsconfig": "^3.7.0",
"@docusaurus/types": "^3.7.0",
"@eslint/js": "^9.31.0",
"@goauthentik/docusaurus-config": "^1.1.0",
"@goauthentik/docusaurus-theme": "*",
"@goauthentik/eslint-config": "^1.0.5",
"@goauthentik/prettier-config": "^3.0.1",
"@goauthentik/prettier-config": "^3.1.0",
"@goauthentik/tsconfig": "^1.0.4",
"@mdx-js/react": "^3.1.0",
"@reduxjs/toolkit": "^2.8.2",
"@trivago/prettier-plugin-sort-imports": "^5.2.2",
"@types/lodash": "^4.17.20",
"@types/node": "^24.0.14",
"@types/postman-collection": "^3.5.11",
"@types/react": "^18.3.22",
"@types/semver": "^7.7.0",
"@typescript-eslint/eslint-plugin": "^8.37.0",
"@typescript-eslint/parser": "^8.37.0",
"clsx": "^2.1.1",
"cross-env": "^7.0.3",
"docusaurus-plugin-openapi-docs": "^4.4.0",
"docusaurus-theme-openapi-docs": "^4.4.0",
"eslint": "^9.31.0",
"fast-glob": "^3.3.3",
"netlify-plugin-cache": "^1.0.3",
"eslint": "^9.30.1",
"npm-run-all": "^4.1.5",
"postcss": "^8.5.6",
"prettier": "^3.6.2",
"prettier-plugin-packagejson": "^2.5.18",
"prism-react-renderer": "^2.4.1",
"react": "^18.3.1",
"react-before-after-slider-component": "^1.1.8",
"react-dom": "^18.3.1",
"react-redux": "^7.2.0",
"remark-directive": "^4.0.0",
"remark-github": "^12.0.0",
"semver": "^7.7.2",
"typescript": "^5.8.3",
"typescript-eslint": "^8.37.0"
},
"optionalDependencies": {
@@ -91,15 +51,15 @@
"node": ">=24"
},
"workspaces": [
"docusaurus-theme"
"docusaurus-theme",
"api",
"integrations",
"docs"
],
"prettier": "@goauthentik/prettier-config",
"overrides": {
"format-imports": {
"eslint": "^9.30.1"
},
"postman-collection": {
"@faker-js/faker": "^6.3.1"
"eslint": "^9.31.0"
}
}
}

View File

@@ -13,17 +13,15 @@
"allowJs": true,
"composite": true,
"esModuleInterop": true,
"moduleResolution": "nodenext",
"module": "nodenext",
"target": "esnext",
"module": "esnext",
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"jsx": "preserve",
"lib": ["DOM", "DOM.Iterable", "ESNext"],
"baseUrl": "${configDir}",
"rootDir": "${configDir}"
},
"paths": {
"@site/*": ["./*"]
},
"exclude": [
// ---
"**/out",

View File

@@ -10,7 +10,18 @@
"files": [],
"references": [
{
"path": "docusaurus-theme"
"path": "./docusaurus-theme"
},
{
"path": "./api"
},
{
"path": "./integrations"
},
{
"path": "./docs"
}
]
}

View File

@@ -1,45 +0,0 @@
/**
* @file Supplemental type definitions for Docusaurus.
*
* @remarks
*
* Docusaurus uses an unconventional module resolution strategy, which can lead to
* issues when using TypeScript.
*
* The types in this file are intended to expose less visible types to TypeScript's
* project references, allowing for better type checking and autocompletion.
*/
declare module "@docusaurus/plugin-content-docs-types" {
export * from "@docusaurus/plugin-content-docs";
export * from "@docusaurus/plugin-content-docs/src/types.ts";
export * from "@docusaurus/plugin-content-docs/src/sidebars/types.ts";
}
declare module "@docusaurus/plugin-content-docs/src/sidebars/types" {
export * from "@docusaurus/plugin-content-docs/src/sidebars/types.ts";
}
declare module "@docusaurus/plugin-content-docs/client" {
import { DocContextValue as BaseDocContextValue } from "@docusaurus/plugin-content-docs/lib/client/doc.js";
import { DocFrontMatter as BaseDocFrontMatter } from "@docusaurus/plugin-content-docs";
/**
* @monkeypatch
*/
export interface DocFrontMatter extends BaseDocFrontMatter {
support_level?: string;
authentik_version?: string;
authentik_preview: boolean;
authentik_enterprise: boolean;
}
export interface DocContextValue extends BaseDocContextValue {
/**
* @monkeypatch
*/
frontMatter: DocFrontMatter;
}
export function useDoc(): DocContextValue;
}