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({