From e956d33a81a1ccb1626a2ecb386967db6d6ce1f9 Mon Sep 17 00:00:00 2001 From: vibhanshub <140522517+vibhanshub@users.noreply.github.com> Date: Wed, 7 Feb 2024 20:03:57 +0000 Subject: [PATCH] Add VA Auth0 integration (#325) * Wip * wip * auth0 works * token verify works * Use variables * Add azure integration. WIP. * Clean up code * wip * Support return value for fetch_visitor_authentication event * Disabling button not working * Integration UI complete * Azure integration working * Wip * Add Okta integration and cleanup * Cleanup code * Delete Okta and Azure integration * Delete spec file * Remove runtime changes * Make requested changes in Auth0 integration * Update package.json * Update package lock * Update lint script * Update package-lock * Revert package-lock.json * Update package-lock again * Revert to working package-lock.json * Add logo and update summary * Make requested changes * Update package lock file * Update summary * Add line breaks * Copy lock from main and npm install * Use latest assets and update manifest * Remove comment from manifest * Use URL package --- integrations/va-auth0/.eslintrc.json | 3 + .../va-auth0/assets/auth0-preview.png | Bin 0 -> 25546 bytes integrations/va-auth0/assets/icon.png | Bin 0 -> 9954 bytes integrations/va-auth0/gitbook-manifest.yaml | 30 ++ integrations/va-auth0/package.json | 20 ++ integrations/va-auth0/src/index.tsx | 284 ++++++++++++++++++ integrations/va-auth0/tsconfig.json | 3 + package-lock.json | 16 + 8 files changed, 356 insertions(+) create mode 100644 integrations/va-auth0/.eslintrc.json create mode 100644 integrations/va-auth0/assets/auth0-preview.png create mode 100644 integrations/va-auth0/assets/icon.png create mode 100644 integrations/va-auth0/gitbook-manifest.yaml create mode 100644 integrations/va-auth0/package.json create mode 100644 integrations/va-auth0/src/index.tsx create mode 100644 integrations/va-auth0/tsconfig.json diff --git a/integrations/va-auth0/.eslintrc.json b/integrations/va-auth0/.eslintrc.json new file mode 100644 index 000000000..2486b4b2d --- /dev/null +++ b/integrations/va-auth0/.eslintrc.json @@ -0,0 +1,3 @@ +{ + "extends": ["@gitbook/eslint-config/integration"] +} diff --git a/integrations/va-auth0/assets/auth0-preview.png b/integrations/va-auth0/assets/auth0-preview.png new file mode 100644 index 0000000000000000000000000000000000000000..74fcaee102c7f52c8c99e24c7871f023acb1c142 GIT binary patch literal 25546 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 literal 0 HcmV?d00001 diff --git a/integrations/va-auth0/assets/icon.png b/integrations/va-auth0/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9efca3b96bdd6d38ad50781355895009775a8962 GIT binary patch literal 9954 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 literal 0 HcmV?d00001 diff --git a/integrations/va-auth0/gitbook-manifest.yaml b/integrations/va-auth0/gitbook-manifest.yaml new file mode 100644 index 000000000..dd9cc1b8d --- /dev/null +++ b/integrations/va-auth0/gitbook-manifest.yaml @@ -0,0 +1,30 @@ +name: VA-Auth0 +title: VA Auth0 +icon: ./assets/icon.png +previewImages: + - ./assets/auth0-preview.png +description: Visitor Authentication with Auth0 +visibility: public +script: ./src/index.tsx +scopes: + - space:metadata:read + - space:visitor:auth + - space:content:read +organization: d8f63b60-89ae-11e7-8574-5927d48c4877 +summary: | + # Overview + Visitor Authentication allows you to publish content behind an authentication wall, so your content is only accessible to people you choose. + + This integration lets you control access to your published content as determined by Auth0. + + # Configure + Install this integration on a space and then populate the configuration screen with the details of your Auth0 application and Auth0 instance. + You can then open the Share menu, publish the space with Visitor Authentication, choose this integration as the authentication backend, and hit Save. + + Your space is now published with Visitor Authentication using Auth0. + +categories: + - other +configurations: + space: + componentId: config diff --git a/integrations/va-auth0/package.json b/integrations/va-auth0/package.json new file mode 100644 index 000000000..6e2ff91d0 --- /dev/null +++ b/integrations/va-auth0/package.json @@ -0,0 +1,20 @@ +{ + "name": "@gitbook/integration-va-auth0", + "version": "0.0.1", + "private": true, + "dependencies": { + "@gitbook/api": "*", + "@gitbook/runtime": "*", + "itty-router": "^4.0.14", + "@tsndr/cloudflare-worker-jwt": "2.3.2" + }, + "devDependencies": { + "@gitbook/cli": "*" + }, + "scripts": { + "lint": "eslint ./**/*.ts*", + "typecheck": "tsc --noEmit", + "publish-integrations-staging": "gitbook publish .", + "publish-integrations": "gitbook publish ." + } +} diff --git a/integrations/va-auth0/src/index.tsx b/integrations/va-auth0/src/index.tsx new file mode 100644 index 000000000..700477dbe --- /dev/null +++ b/integrations/va-auth0/src/index.tsx @@ -0,0 +1,284 @@ +import { sign } from '@tsndr/cloudflare-worker-jwt'; +import { Router } from 'itty-router'; + +import { IntegrationInstallationConfiguration } from '@gitbook/api'; +import { + createIntegration, + FetchEventCallback, + Logger, + RuntimeContext, + RuntimeEnvironment, + createComponent, +} from '@gitbook/runtime'; + +const logger = Logger('auth0.visitor-auth'); + +type Auth0RuntimeEnvironment = RuntimeEnvironment<{}, Auth0SpaceInstallationConfiguration>; + +type Auth0RuntimeContext = RuntimeContext; + +type Auth0SpaceInstallationConfiguration = { + client_id?: string; + issuer_base_url?: string; + client_secret?: string; +}; + +type Auth0State = Auth0SpaceInstallationConfiguration; + +type Auth0Props = { + installation: { + configuration?: IntegrationInstallationConfiguration; + }; + spaceInstallation: { + configuration?: Auth0SpaceInstallationConfiguration; + }; +}; + +export type Auth0Action = { action: 'save.config' }; + +const configBlock = createComponent({ + componentId: 'config', + initialState: (props) => { + return { + client_id: props.spaceInstallation.configuration?.client_id?.toString() || '', + issuer_base_url: + props.spaceInstallation.configuration?.issuer_base_url?.toString() || '', + client_secret: props.spaceInstallation.configuration?.client_secret?.toString() || '', + }; + }, + action: async (element, action, context) => { + switch (action.action) { + case 'save.config': + const { api, environment } = context; + const spaceInstallation = environment.spaceInstallation; + + const configurationBody = { + ...spaceInstallation.configuration, + client_id: element.state.client_id, + client_secret: element.state.client_secret, + issuer_base_url: element.state.issuer_base_url, + }; + await api.integrations.updateIntegrationSpaceInstallation( + spaceInstallation.integration, + spaceInstallation.installation, + spaceInstallation.space, + { + configuration: { + ...configurationBody, + }, + } + ); + return element; + } + }, + render: async (element, context) => { + const VACallbackURL = `${context.environment.spaceInstallation?.urls?.publicEndpoint}/visitor-auth/response`; + return ( + + + The unique identifier of your Auth0 application. + + {' '} + More Details + + + } + element={} + /> + + + The Auth0 domain (also known as tenant). + + {' '} + More Details + + + } + element={} + /> + + + The secret used for signing and validating tokens. + + {' '} + More Details + + + } + element={} + /> + + + } + /> + + + The following URL needs to be saved as an allowed callback URL in Auth0: + + + + ); + }, +}); + +const handleFetchEvent: FetchEventCallback = async (request, context) => { + const { environment } = context; + const installationURL = environment.spaceInstallation?.urls?.publicEndpoint; + if (installationURL) { + const router = Router({ + base: new URL(installationURL).pathname, + }); + + router.get('/visitor-auth/response', async (request) => { + if (context.environment.spaceInstallation?.space) { + const space = await context.api.spaces.getSpaceById( + context.environment.spaceInstallation?.space + ); + const spaceData = space.data; + const privateKey = context.environment.signingSecrets.spaceInstallation; + let token; + try { + token = await sign( + { exp: Math.floor(Date.now() / 1000) + 1 * (60 * 60) }, + privateKey + ); + } catch (e) { + return new Response('Error: Could not sign JWT token', { + status: 500, + }); + } + + const issuerBaseUrl = environment.spaceInstallation?.configuration.issuer_base_url; + const clientId = environment.spaceInstallation?.configuration.client_id; + const clientSecret = environment.spaceInstallation?.configuration.client_secret; + if (clientId && clientSecret) { + const searchParams = new URLSearchParams({ + grant_type: 'authorization_code', + client_id: clientId, + client_secret: clientSecret, + code: `${request.query.code}`, + redirect_uri: `${installationURL}/visitor-auth/response`, + }); + const accessTokenURL = `${issuerBaseUrl}/oauth/token/`; + const resp: any = await fetch(accessTokenURL, { + method: 'POST', + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + body: searchParams, + }) + .then((response) => response.json()) + .catch((err) => { + return new Response('Error: Could not fetch access token from Auth0', { + status: 401, + }); + }); + + if ('access_token' in resp) { + let url; + if (request.query.state) { + url = new URL(`${spaceData.urls?.published}${request.query.state}`); + url.searchParams.append('jwt_token', token); + } else { + url = new URL(spaceData.urls?.published); + url.searchParams.append('jwt_token', token); + } + if (spaceData.urls?.published && token) { + return Response.redirect(url.toString()); + } else { + return new Response( + "Error: Either JWT token or space's published URL is missing", + { + status: 500, + } + ); + } + } else { + return new Response('Error: No Access Token found in response from Auth0', { + status: 401, + }); + } + } else { + return new Response('Error: Either ClientId or Client Secret is missing', { + status: 400, + }); + } + } + }); + + let response; + try { + response = await router.handle(request, context); + } catch (error: any) { + logger.error('error handling request', error); + return new Response(error.message, { + status: error.status || 500, + }); + } + + if (!response) { + return new Response(`No route matching ${request.method} ${request.url}`, { + status: 404, + }); + } + + return response; + } +}; + +export default createIntegration({ + fetch: handleFetchEvent, + components: [configBlock], + fetch_visitor_authentication: async (event, context) => { + const { environment } = context; + const installationURL = environment.spaceInstallation?.urls?.publicEndpoint; + const issuerBaseUrl = environment.spaceInstallation?.configuration.issuer_base_url; + const clientId = environment.spaceInstallation?.configuration.client_id; + const location = event.location ? event.location : ''; + + const url = new URL(`${issuerBaseUrl}/authorize`); + url.searchParams.append('client_id', clientId); + url.searchParams.append('response_type', 'code'); + url.searchParams.append('redirect_uri', `${installationURL}/visitor-auth/response`); + url.searchParams.append('state', location); + + try { + return Response.redirect(url.toString()); + } catch (e) { + return new Response(e.message, { + status: e.status || 500, + }); + } + }, +}); diff --git a/integrations/va-auth0/tsconfig.json b/integrations/va-auth0/tsconfig.json new file mode 100644 index 000000000..1a48f875b --- /dev/null +++ b/integrations/va-auth0/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@gitbook/tsconfig/integration.json" +} diff --git a/package-lock.json b/package-lock.json index a871ffcab..443e1d8c5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -792,6 +792,18 @@ "@gitbook/cli": "*" } }, + "integrations/va-auth0": { + "version": "0.0.1", + "dependencies": { + "@gitbook/api": "*", + "@gitbook/runtime": "*", + "@tsndr/cloudflare-worker-jwt": "2.3.2", + "itty-router": "^4.0.14" + }, + "devDependencies": { + "@gitbook/cli": "*" + } + }, "integrations/va-azure": { "version": "0.0.1", "dependencies": { @@ -3220,6 +3232,10 @@ "resolved": "integrations/toucantoco", "link": true }, + "node_modules/@gitbook/integration-va-auth0": { + "resolved": "integrations/va-auth0", + "link": true + }, "node_modules/@gitbook/integration-va-azure": { "resolved": "integrations/va-azure", "link": true