diff --git a/app/[[...slug]]/page.tsx b/app/[[...slug]]/page.tsx
index 45341a0..cf8e2b3 100644
--- a/app/[[...slug]]/page.tsx
+++ b/app/[[...slug]]/page.tsx
@@ -1,10 +1,5 @@
-import { source } from "@/lib/source";
-import {
- DocsPage,
- DocsBody,
- DocsDescription,
- DocsTitle,
-} from "fumadocs-ui/page";
+import { openapi, source } from "@/lib/source";
+import { DocsPage, DocsBody, DocsTitle } from "fumadocs-ui/page";
import { notFound } from "next/navigation";
import defaultMdxComponents from "fumadocs-ui/mdx";
import { getGithubLastEdit } from "fumadocs-core/server";
@@ -60,12 +55,12 @@ export default async function Page(props: {
}}
>
{page.data.title}
- {page.data.description}
,
+ APIPage: openapi.APIPage,
}}
/>
diff --git a/assets/openapi.yml b/assets/openapi.yml
new file mode 100644
index 0000000..2137d9d
--- /dev/null
+++ b/assets/openapi.yml
@@ -0,0 +1,725 @@
+openapi: 3.0.0
+info:
+ title: Shield
+ version: 0.1.12-alpha
+servers:
+ - url: http://localhost:5555
+components:
+ securitySchemes:
+ bearerAuth:
+ type: http
+ scheme: bearer
+security:
+ - bearerAuth: []
+tags:
+ - name: Realm
+ - name: Realm > Client
+ - name: Realm > Client > API User
+ - name: Realm > User
+ - name: Auth
+paths:
+ /realms/{REALM_ID}/clients/{CLIENT_ID}/api-users:
+ post:
+ tags:
+ - Realm > Client > API User
+ summary: Create API User
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ name: Portal preprod
+ role: client
+ access: write
+ expires: 1h
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{MASTER_API_KEY}}"
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}/clients/{CLIENT_ID}/api-users/{API_USER_ID}:
+ patch:
+ tags:
+ - Realm > Client > API User
+ summary: Update API User
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example: "{\r\n // \"name\": \"Portal preprod - 2\",\r\n \"role\": \"realm\",\r\n \"access\": \"admin\",\r\n \"expires\": \"1m\"\r\n // \"lock\": false\r\n}"
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{MASTER_API_KEY}}"
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: API_USER_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{MASTER_REALM_ID}/clients/{MASTER_CLIENT_ID}/api-users:
+ get:
+ tags:
+ - Realm > Client > API User
+ summary: Get API Users
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{MASTER_API_KEY}}"
+ - name: MASTER_REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: MASTER_CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}/clients/{CLIENT_ID}/api-users/0192a464-1f55-7dc2-bf72-c61ea4351966:
+ delete:
+ tags:
+ - Realm > Client > API User
+ summary: Delete API User
+ parameters:
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}/clients:
+ get:
+ tags:
+ - Realm > Client
+ summary: Get Clients
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{MASTER_API_KEY}}"
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ post:
+ tags:
+ - Realm > Client
+ summary: Create Client
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example: "{\r\n \"name\": \"Portal\"\r\n // \"lock\": false\r\n}"
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{API_KEY}}"
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/019239c9-d69c-7cb5-ae6b-244997619778/clients/019239c9-d6a2-745c-96cd-d428cc716521:
+ get:
+ tags:
+ - Realm > Client
+ summary: Get Clients by ID
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}/clients/{CLIENT_ID}:
+ patch:
+ tags:
+ - Realm > Client
+ summary: Update Client
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example: "{\r\n \"max_concurrent_sessions\": 3\r\n // \"lock\": false\r\n}"
+ parameters:
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ delete:
+ tags:
+ - Realm > Client
+ summary: Delete Client
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{MASTER_API_KEY}}"
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}/users:
+ get:
+ tags:
+ - Realm > User
+ summary: Get Users
+ parameters:
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}/users/{USER_ID}:
+ get:
+ tags:
+ - Realm > User
+ summary: Get Users by ID
+ parameters:
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: USER_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ delete:
+ tags:
+ - Realm > User
+ summary: Delete User
+ parameters:
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: USER_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/019239c9-d69c-7cb5-ae6b-244997619778/users/019239c9-d6aa-72c5-b0a0-0f8f17b846d9/resources:
+ get:
+ tags:
+ - Realm > User
+ summary: Get User Resources
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/019239c9-d69c-7cb5-ae6b-244997619778/users/019239e9-dc7c-79b0-a355-2b2ae5a2c1a1/resources:
+ post:
+ tags:
+ - Realm > User
+ summary: Add User Resources
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ group_id: 019239e9-dc80-7b9f-b2dc-efd65bae4b0e
+ identifiers:
+ locker: test-locker-id
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/019239c9-d69c-7cb5-ae6b-244997619778/users/019239c9-d6aa-72c5-b0a0-0f8f17b846d9/resources/019239c9-d6b2-7c01-9ba9-7430fec4b18e:
+ patch:
+ tags:
+ - Realm > User
+ summary: Update User Resource
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ name: locker
+ value: new-locker-id
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/019239c9-d69c-7cb5-ae6b-244997619778/users/019239e9-dc7c-79b0-a355-2b2ae5a2c1a1/resources/019239c9-d6b2-7c01-9ba9-7430fec4b18e:
+ delete:
+ tags:
+ - Realm > User
+ summary: Delete User Resource
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms:
+ get:
+ tags:
+ - Realm
+ summary: Get Realms
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{MASTER_API_KEY}}"
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ post:
+ tags:
+ - Realm
+ summary: Add Realm
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ name: SocietyGEN
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{MASTER_API_KEY}}"
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}:
+ get:
+ tags:
+ - Realm
+ summary: Get Realm by ID
+ parameters:
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/019239dd-5485-776c-bb18-e569f92e612a:
+ patch:
+ tags:
+ - Realm
+ summary: Update Realm
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ name: SocietyGEN Dev
+ lock: false
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/019239dd-eccd-7dc0-9cf1-487532d1ff96:
+ delete:
+ tags:
+ - Realm
+ summary: Delete Realm
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}/clients/{CLIENT_ID}/auth/register:
+ post:
+ tags:
+ - Auth
+ summary: Register
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ email: appu@mksingh.in
+ password: "12345"
+ first_name: Appu
+ last_name: Singh
+ resource:
+ group_name: no group
+ identifiers:
+ society: 01923863-ea6e-8679-7ec5-7c044ecd8895
+ membership: 01923863-ea6e-7ec5-8679-7c044ecd8896
+ employee: 01923863-ea6e-8679-7ec5-7c044ecd8897
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{API_KEY}}"
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{REALM_ID}/clients/{CLIENT_ID}/auth/login:
+ post:
+ tags:
+ - Auth
+ summary: Login
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ type: object
+ required:
+ - email
+ - password
+ properties:
+ email:
+ type: string
+ format: email
+ description: User's email address
+ example: admin@shield.com
+ password:
+ type: string
+ format: password
+ description: User's password
+ example: "password"
+ parameters:
+ - name: api-key
+ in: header
+ schema:
+ type: string
+ example: "{{API_KEY}}"
+ - name: REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{MASTER_REALM_ID}/clients/{MASTER_CLIENT_ID}/auth/refresh-token:
+ post:
+ tags:
+ - Auth
+ summary: Refresh Token
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ refresh_token: >-
+ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3MzA5NzI3MTUsImlhdCI6MTczMDk2OTExNSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1NTU1Iiwic2lkIjoiMDE5MzA1YWItNTI3My03MmYyLWIyOTAtYjZiYzJjMDZmNGViIiwic3ViIjoiMDE5MzA1Y2MtOWIyNS03NDkwLWEwMWQtMTcwMDRmZWE1ZDMxIiwicmxpIjoiMDE5MzA1YWItNTI2Yy03OTMwLWEwMGItMzU5NTViN2ZhZGU2IiwiY2xpIjoiMDE5MzA1YWItNTI2ZS03OWEzLTk0MDgtNTg5YzkxNDQ4NzVhIn0.YAkeD82CY3O1BxFzImTxfvylQMRrgcLYUymyC-Xokh8
+ parameters:
+ - name: Api-Key
+ in: header
+ schema:
+ type: string
+ example: "{{MASTER_API_KEY}}"
+ - name: MASTER_REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: MASTER_CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{MASTER_REALM_ID}/clients/{MASTER_CLIENT_ID}/auth/logout-current-session:
+ post:
+ tags:
+ - Auth
+ summary: Logout Current Session
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example: ""
+ parameters:
+ - name: MASTER_REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: MASTER_CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{MASTER_REALM_ID}/clients/{MASTER_CLIENT_ID}/auth/logout:
+ post:
+ tags:
+ - Auth
+ summary: Logout One Session
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ access_token: >-
+ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3Mjc2MjE3NjgsImlhdCI6MTcyNzYyMTQ2OCwic3ViIjoiMDE5MjNkZGQtNGFiOC03NzE3LTk5MjgtNWYzNDA0MGU4Y2ZlIiwic2lkIjoiMDE5MjNlNDMtOTEzYi03MzI4LTg2ZTMtNzIwZTNlNzljYjcxIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1NTU1IiwiZmlyc3RfbmFtZSI6ImFkbWluQGFkbWluLmNvbSIsImxhc3RfbmFtZSI6IiIsImVtYWlsIjoiYWRtaW5AYWRtaW4uY29tIiwicGhvbmUiOiIiLCJyZXNvdXJjZSI6eyJjbGllbnRfaWQiOiIwMTkyM2RkZC00YWFlLTdlNGUtOWE3Zi1iOTU0NjBjNmYwODMiLCJjbGllbnRfbmFtZSI6ImNsaWVudCIsImdyb3VwX25hbWUiOiJkZWZhdWx0X3Jlc291cmNlX2dyb3VwIiwiaWRlbnRpZmllcnMiOnsicm9sZSI6ImFkbWluIiwicmVhbG0iOiIwMTkyM2RkZC00YWE4LTcwYWYtYjEzNC03YjRkNDBjNzc2MGQifX19.00MS10w-KHmz6hr4AT9MPvWy0VeDZbA_nVmmBgEcfYE
+ parameters:
+ - name: MASTER_REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: MASTER_CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{MASTER_REALM_ID}/clients/{MASTER_CLIENT_ID}/auth/introspect:
+ post:
+ tags:
+ - Auth
+ summary: Introspect Access Token
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ access_token: >-
+ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3Mjc3MTkyOTYsImlhdCI6MTcyNzcxODk5Niwic3ViIjoiMDE5MjQ0MGItYjFjNi03OGQxLWI0ZWEtZjZkYzBmZGI0MmVkIiwic2lkIjoiMDE5MjQ0MGItYjFlYy03Y2MxLThkYmYtNTE0OWE0N2JiMDk0IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1NTU1IiwiZmlyc3RfbmFtZSI6ImFkbWluQGFkbWluLmNvbSIsImxhc3RfbmFtZSI6IiIsImVtYWlsIjoiYWRtaW5AYWRtaW4uY29tIiwicGhvbmUiOiIiLCJyZXNvdXJjZSI6eyJjbGllbnRfaWQiOiIwMTkyNDQwYi1iMWI2LTdjYjEtOTllNS00ZjAzODk4NTYxN2MiLCJjbGllbnRfbmFtZSI6ImNsaWVudCIsImdyb3VwX25hbWUiOiJkZWZhdWx0X3Jlc291cmNlX2dyb3VwIiwiaWRlbnRpZmllcnMiOnsicm9sZSI6ImFkbWluIiwicmVhbG0iOiIwMTkyNDQwYi1iMWE2LTc5MTAtOWNkMy03ZDFiMWQxZmZmNjMifX19.X6pQtYHcktrtAUccPLR_SfNNzuox-JA8PbizdRLc2e8
+ parameters:
+ - name: MASTER_REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: MASTER_CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{MASTER_REALM_ID}/clients/{MASTER_CLIENT_ID}/auth/logout-my-all-sessions:
+ post:
+ tags:
+ - Auth
+ summary: Logout All Sessions - Current Client
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example: ""
+ parameters:
+ - name: MASTER_REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: MASTER_CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /realms/{MASTER_REALM_ID}/clients/{MASTER_CLIENT_ID}/auth/logout-all:
+ post:
+ tags:
+ - Auth
+ summary: Logout All Sessions - One Client
+ requestBody:
+ content:
+ application/json:
+ schema:
+ type: object
+ example:
+ access_token: >-
+ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJleHAiOjE3Mjc2MjIxMDUsImlhdCI6MTcyNzYyMTgwNSwic3ViIjoiMDE5MjNkZGQtNGFiOC03NzE3LTk5MjgtNWYzNDA0MGU4Y2ZlIiwic2lkIjoiMDE5MjNlNDgtYjcxMS03NzZhLWIwOGEtZDhjOTg0YTBlNDI4IiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1NTU1IiwiZmlyc3RfbmFtZSI6ImFkbWluQGFkbWluLmNvbSIsImxhc3RfbmFtZSI6IiIsImVtYWlsIjoiYWRtaW5AYWRtaW4uY29tIiwicGhvbmUiOiIiLCJyZXNvdXJjZSI6eyJjbGllbnRfaWQiOiIwMTkyM2RkZC00YWFlLTdlNGUtOWE3Zi1iOTU0NjBjNmYwODMiLCJjbGllbnRfbmFtZSI6ImNsaWVudCIsImdyb3VwX25hbWUiOiJkZWZhdWx0X3Jlc291cmNlX2dyb3VwIiwiaWRlbnRpZmllcnMiOnsicmVhbG0iOiIwMTkyM2RkZC00YWE4LTcwYWYtYjEzNC03YjRkNDBjNzc2MGQiLCJyb2xlIjoiYWRtaW4ifX19._G0ujBxVZVwWoPvzY7qQePt3tMD7gMrBrUVhB5yVhCo
+ parameters:
+ - name: MASTER_REALM_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ - name: MASTER_CLIENT_ID
+ in: path
+ schema:
+ type: string
+ required: true
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
+ /health:
+ get:
+ tags:
+ - default
+ summary: Get Health
+ parameters:
+ - name: Api-Key
+ in: header
+ schema:
+ type: string
+ example: >-
+ 01924d07-c09a-72a2-bdf6-dcab4549df73.B/vqBBCnR8Pt9sM4ZzXqLxU6QLlz7dQDe3i2yMmAwT9o/uXeKxZEYOzO6xCTvzPhHp7ach59GaT9ugrGZ+Bvmg==
+ responses:
+ "200":
+ description: Successful response
+ content:
+ application/json: {}
diff --git a/bun.lockb b/bun.lockb
index f5beae9..9f2ca53 100755
Binary files a/bun.lockb and b/bun.lockb differ
diff --git a/content/architectural-resource/index.mdx b/content/architectural-resource/index.mdx
index cb942f8..a88069d 100644
--- a/content/architectural-resource/index.mdx
+++ b/content/architectural-resource/index.mdx
@@ -23,7 +23,7 @@ import { Step, Steps } from "fumadocs-ui/components/steps";
An API user can create or register a new user to its own client.
-
+
Once the will reach healthy state then Admin Login api can be used for
creation of the API Key.
diff --git a/content/getting-started/index.mdx b/content/getting-started/index.mdx
index f0de285..b1b86f7 100644
--- a/content/getting-started/index.mdx
+++ b/content/getting-started/index.mdx
@@ -1,10 +1,14 @@
---
title: Getting Started
-description: Setup and start integrating the Shield in your existing system.
+description: Quick guide to get started with Shield authentication service. Follow our step-by-step guides to instantiate and integrate Shield into your application.
---
+Quick guide to get started with Shield authentication service. Follow our
+step-by-step guides to instantiate and integrate Shield into your application.
+
- We have a docker images for amd64 and arm64.
+ Set up Shield in your environment using our official Docker images for amd64
+ and arm64 architectures.
diff --git a/content/getting-started/installation.mdx b/content/getting-started/installation.mdx
index 0081e52..a0167dc 100644
--- a/content/getting-started/installation.mdx
+++ b/content/getting-started/installation.mdx
@@ -3,13 +3,9 @@ title: Installation
description: We have a docker images for amd64 and arm64.
---
-import { Accordion, Accordions } from "fumadocs-ui/components/accordion";
-
-
-
-You can find the docker image on [docker hub](https://hub.docker.com/r/shieldauth/shield)
+We have a docker images for `amd64` and `arm64. You can find the docker image on [docker hub](https://hub.docker.com/r/shieldauth/shield)
-
+import { Accordion, Accordions } from "fumadocs-ui/components/accordion";
## Prerequisites
@@ -254,14 +250,8 @@ container ID for the shield container._
-🔄 Deployment Strategy
-Choose your deployment option based on your needs:
+### 🔄 Deployment Notes
-Development: Use **"Run from Source Code"** for full development capabilities
-Testing/Staging: Use **"Run with Containerized Database"** for a complete isolated
-environment
-Production: Use **"Run with External Database"** for better scalability and management
+Choose your deployment option based on your needs:
-Each option includes proper logging, health checks, and container management
-configurations. Refer to the full documentation for detailed configuration
-options and best practices.
+Each option includes proper logging, health checks, and container management configurations.
diff --git a/content/index.mdx b/content/index.mdx
index e5f2e82..72c8d23 100644
--- a/content/index.mdx
+++ b/content/index.mdx
@@ -1,29 +1,102 @@
---
title: Introduction
-description: Shield is a robust, multi-tenant authentication and authorization solution for modern age applications. It provides a comprehensive set of features to secure your applications and manage user access effectively.
+description: Shield is a robust, multi-tenant authentication and authorization solution for modern applications. Built with Rust for performance and security, it provides a comprehensive set of features to secure your applications and manage user access effectively.
icon: Album
---
-## Key Features
-
-- **Multi-tenant Support:** Manage multiple organizations or projects within a
- single instance.
-- **User Management:** Efficiently handle user accounts and permissions.
-- **Role-based Access Control (RBAC):** Define and manage user roles and permissions.
-- **Session Management:** Secure handling of user sessions.
-- **API Key Support:** Generate and manage API keys for secure programmatic access.
- - API Key Rotation
- - Rate Limiting
- - Expiration
- - Blacklisting and Whitelisting
- - Revocation
-
-> Coming Soon...
->
-> - Two-factor Authentication (2FA)
-> - Email Verification
-> - OAuth2 Support
-> - OpenID Connect Support
-> - SAML Support
-> - LDAP Support
-> - FIDO2 Support
+Shield is a robust, multi-tenant authentication and authorization solution for
+modern applications. Built with Rust for performance and security, it provides
+a comprehensive set of features to secure your applications and manage user
+access effectively.
+
+## Welcome to Shield
+
+Shield is an enterprise-grade authentication and authorization microservice that
+prioritizes security, performance, and developer experience. Written in Rust, it
+ensures memory safety and concurrent operation while delivering blazing-fast
+authentication services for your applications.
+
+### Key Features
+
+#### Multi-tenant Architecture
+
+- **Organization Management:** Create and manage multiple organizations within a
+ single instance
+- **Isolated Data Storage:** Ensure complete data separation between tenants
+- **Custom Configurations:** Set tenant-specific authentication policies and rules
+
+#### Comprehensive User Management
+
+- **User Lifecycle:** Handle user registration, verification, and deactivation
+- **Profile Management:** Store and manage user profiles and preferences
+- **Password Policies:** Enforce strong password requirements and rotation policies
+
+#### Advanced Access Control
+
+- **Role-based Access Control (RBAC):**
+ - Define granular roles and permissions
+ - Hierarchical role structure
+ - Dynamic permission assignment
+ - Role inheritance support
+
+#### Robust Session Management
+
+- **Secure Session Handling:** JWT-based session management
+- **Configurable Session Policies:**
+ - Custom session duration
+ - Concurrent session limits
+ - Device tracking and management
+- **Session Monitoring:** Track and audit active sessions
+
+#### Enterprise-grade API Key Management
+
+- **Flexible Key Generation:**
+ - Customizable key formats
+ - Scope-based restrictions
+ - Environment-specific keys (development, staging, production)
+- **Security Features:**
+ - Automated key rotation
+ - Rate limiting controls
+ - Configurable expiration
+ - IP-based access controls (whitelist/blacklist)
+ - Instant key revocation
+ - Usage analytics and monitoring
+
+### Performance & Security
+
+- Built with Rust for maximum performance and safety
+- Minimal memory footprint
+- Designed for high-concurrency environments
+- Regular security audits and updates
+
+### Roadmap Features
+
+The following features are under active development and will be available in
+upcoming releases:
+
+#### Authentication Methods
+
+- Two-factor Authentication (2FA)
+- Email Verification
+- Social Authentication
+
+#### Enterprise Integration
+
+- OAuth2 Provider
+- OpenID Connect Support
+- SAML 2.0 Integration
+- LDAP Directory Services
+- FIDO2 Passwordless Authentication
+
+#### Additional Security Features
+
+- Brute-force Protection
+- Audit Logging
+- Compliance Reporting
+- Security Event Monitoring
+
+### Getting Started
+
+Visit our [Quick Start Guide](/getting-started) to begin integrating Shield into
+your application, or explore our [Usage Guide](/usage-guide/login) for detailed
+implementation guidance.
diff --git a/content/meta.json b/content/meta.json
index 137117e..2d5c361 100644
--- a/content/meta.json
+++ b/content/meta.json
@@ -5,6 +5,6 @@
"---Usage Guide---",
"...usage-guide",
"---Contribution Helper---",
- "..."
+ "architectural-resource"
]
}
diff --git a/content/usage-guide/login.mdx b/content/usage-guide/login.mdx
index 609428c..84892d5 100644
--- a/content/usage-guide/login.mdx
+++ b/content/usage-guide/login.mdx
@@ -1,24 +1,21 @@
---
title: Login
description: The Admin Login API is used to authenticate the admin user. For this api only the user having `realm admin role` is going to be considered as admin.
+full: true
---
-## Endpoint
+This endpoint can be used for login. You have to provide the `email` and `password`
+of the user. The response will contain the `access_token` and `refresh_token`
+along with user and few other details.
-```bash
-{YOUR-SHIELD-URL}/realms/:realm_id/clients/:client_id/admin-login
-```
+## Playground
-Replace `:realm_id` with your realm ID and `:client_id` with your client ID.
-
-Example curl command:
-
-```bash
-curl -X POST \
- https://shield.example.com/realms/:realm_id/clients/:client_id/admin-login \
- -H 'Content-Type: application/json' \
- -d '{
- "email": "admin@admin.com",
- "password": "12345"
- }'
-```
+
diff --git a/lib/source.ts b/lib/source.ts
index 8842052..afe8d95 100644
--- a/lib/source.ts
+++ b/lib/source.ts
@@ -3,6 +3,8 @@ import { createMDXSource } from "fumadocs-mdx";
import { loader } from "fumadocs-core/source";
import { icons } from "lucide-react";
import { createElement } from "react";
+import { createOpenAPI } from "fumadocs-openapi/server";
+import { attachFile } from "fumadocs-openapi/server";
export const source = loader({
baseUrl: "/",
@@ -16,3 +18,7 @@ export const source = loader({
if (icon in icons) return createElement(icons[icon as keyof typeof icons]);
},
});
+
+export const openapi = createOpenAPI({
+ // options
+});
diff --git a/package.json b/package.json
index f68bf64..c2e63fb 100644
--- a/package.json
+++ b/package.json
@@ -11,11 +11,13 @@
"dependencies": {
"fumadocs-core": "14.1.1",
"fumadocs-mdx": "11.1.1",
+ "fumadocs-openapi": "^5.5.9",
"fumadocs-ui": "14.1.1",
"lucide-react": "^0.454.0",
"next": "15.0.2",
"react": "^18.3.1",
- "react-dom": "^18.3.1"
+ "react-dom": "^18.3.1",
+ "shiki": "^1.22.2"
},
"devDependencies": {
"@types/node": "22.8.4",
diff --git a/tailwind.config.js b/tailwind.config.js
index d61f542..6961226 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -8,6 +8,7 @@ export default {
"./content/**/*.{md,mdx}",
"./mdx-components.{ts,tsx}",
"./node_modules/fumadocs-ui/dist/**/*.js",
+ "./node_modules/fumadocs-openapi/dist/**/*.js",
],
presets: [
createPreset({