mirror of
https://github.com/goauthentik/authentik
synced 2026-04-25 17:15:26 +02:00
website: Prep for workspaces. Clean up shared deps. (#15602)
website: Prepare NPM Workspaces.
This commit is contained in:
10
website/.gitignore
vendored
10
website/.gitignore
vendored
@@ -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/**
|
||||
|
||||
@@ -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/
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
18
website/api/authentication.md
Normal file
18
website/api/authentication.md
Normal 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
15
website/api/clients.mdx
Normal 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 />
|
||||
17
website/api/clients/golang.md
Normal file
17
website/api/clients/golang.md
Normal 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.
|
||||
33
website/api/clients/node.md
Normal file
33
website/api/clients/node.md
Normal 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.
|
||||
:::
|
||||
13
website/api/clients/python.md
Normal file
13
website/api/clients/python.md
Normal 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
|
||||
```
|
||||
1
website/api/docusaurus.config.cjs
Normal file
1
website/api/docusaurus.config.cjs
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = import("./docusaurus.config.esm.mjs").then(($) => $.default);
|
||||
@@ -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)));
|
||||
11
website/api/ensure-reference-sidebar.mjs
Normal file
11
website/api/ensure-reference-sidebar.mjs
Normal 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);
|
||||
}
|
||||
@@ -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
16
website/api/index.md
Normal 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
30
website/api/netlify.toml
Normal 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
78
website/api/package.json
Normal 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
79
website/api/sidebar.mjs
Normal 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;
|
||||
70
website/api/src/theme/DocSidebarItem/Link/index.tsx
Normal file
70
website/api/src/theme/DocSidebarItem/Link/index.tsx
Normal 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;
|
||||
138
website/api/src/theme/DocSidebarItem/Link/styles.css
Normal file
138
website/api/src/theme/DocSidebarItem/Link/styles.css
Normal 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;
|
||||
}
|
||||
}
|
||||
8
website/api/tsconfig.json
Normal file
8
website/api/tsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "../tsconfig.base.json",
|
||||
"references": [
|
||||
{
|
||||
"path": "../docusaurus-theme"
|
||||
}
|
||||
]
|
||||
}
|
||||
37
website/api/types/api-plugin.d.ts
vendored
Normal file
37
website/api/types/api-plugin.d.ts
vendored
Normal 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
34
website/api/types/globals.d.ts
vendored
Normal 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"];
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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/ |
|
||||
@@ -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.
|
||||
:::
|
||||
1
website/docs/docusaurus.config.cjs
Normal file
1
website/docs/docusaurus.config.cjs
Normal file
@@ -0,0 +1 @@
|
||||
module.exports = import("./docusaurus.config.esm.mjs").then(($) => $.default);
|
||||
161
website/docs/docusaurus.config.esm.mjs
Normal file
161
website/docs/docusaurus.config.esm.mjs
Normal 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
|
||||
}),
|
||||
);
|
||||
@@ -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:
|
||||
|
||||
|
||||
@@ -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
1138
website/docs/netlify.toml
Normal file
File diff suppressed because it is too large
Load Diff
36
website/docs/package.json
Normal file
36
website/docs/package.json
Normal 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"
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
8
website/docs/tsconfig.json
Normal file
8
website/docs/tsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "../tsconfig.base.json",
|
||||
"references": [
|
||||
{
|
||||
"path": "../docusaurus-theme"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
import { createESLintPackageConfig } from "@goauthentik/eslint-config";
|
||||
|
||||
export default createESLintPackageConfig();
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
@@ -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
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
import { createESLintPackageConfig, DefaultIgnorePatterns } from "@goauthentik/eslint-config";
|
||||
|
||||
export default createESLintPackageConfig({
|
||||
ignorePatterns: [
|
||||
// ---
|
||||
...DefaultIgnorePatterns,
|
||||
".docusaurus/",
|
||||
"./build",
|
||||
],
|
||||
});
|
||||
30
website/integrations/netlify.toml
Normal file
30
website/integrations/netlify.toml
Normal 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"
|
||||
34
website/integrations/package.json
Normal file
34
website/integrations/package.json
Normal 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"
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
8
website/integrations/tsconfig.json
Normal file
8
website/integrations/tsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"extends": "../tsconfig.base.json",
|
||||
"references": [
|
||||
{
|
||||
"path": "../docusaurus-theme"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -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
|
||||
1135
website/netlify.toml
1135
website/netlify.toml
File diff suppressed because it is too large
Load Diff
9023
website/package-lock.json
generated
9023
website/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -10,7 +10,18 @@
|
||||
"files": [],
|
||||
"references": [
|
||||
{
|
||||
"path": "docusaurus-theme"
|
||||
"path": "./docusaurus-theme"
|
||||
},
|
||||
|
||||
{
|
||||
"path": "./api"
|
||||
},
|
||||
|
||||
{
|
||||
"path": "./integrations"
|
||||
},
|
||||
{
|
||||
"path": "./docs"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
45
website/types/docusaurus.d.ts
vendored
45
website/types/docusaurus.d.ts
vendored
@@ -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;
|
||||
}
|
||||
Reference in New Issue
Block a user