From beea2c2eabbd7cd6195658d3dccb7ad94538f034 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Fri, 26 Jan 2024 10:16:06 +0000 Subject: [PATCH 01/15] Add auth example --- .../static/toolpad/marketing/authentication.png | Bin 0 -> 37248 bytes docs/src/modules/components/ExamplesGrid.js | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100644 docs/public/static/toolpad/marketing/authentication.png diff --git a/docs/public/static/toolpad/marketing/authentication.png b/docs/public/static/toolpad/marketing/authentication.png new file mode 100644 index 0000000000000000000000000000000000000000..0850850aaa0f086db7437ef6f78f36539704bbec GIT binary patch literal 37248 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 Date: Fri, 26 Jan 2024 10:19:45 +0000 Subject: [PATCH 02/15] Add examples themselves --- examples/auth/.env.example | 11 +++++++ examples/auth/README.md | 29 +++++++++++++++++++ examples/auth/package.json | 13 +++++++++ examples/auth/toolpad/.gitignore | 1 + examples/auth/toolpad/application.yml | 17 +++++++++++ .../auth/toolpad/pages/protectedpage/page.yml | 14 +++++++++ packages/toolpad-app/src/server/auth.ts | 9 ++++++ pnpm-lock.yaml | 2 +- pnpm-workspace.yaml | 1 + 9 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 examples/auth/.env.example create mode 100644 examples/auth/README.md create mode 100644 examples/auth/package.json create mode 100644 examples/auth/toolpad/.gitignore create mode 100644 examples/auth/toolpad/application.yml create mode 100644 examples/auth/toolpad/pages/protectedpage/page.yml diff --git a/examples/auth/.env.example b/examples/auth/.env.example new file mode 100644 index 00000000000..00906d101f7 --- /dev/null +++ b/examples/auth/.env.example @@ -0,0 +1,11 @@ +TOOLPAD_AUTH_SECRET=u43rXwzRvl4PDZhAqeciOW4KLfYIl2Aa9B5Wet+rJSI= + +TOOLPAD_GITHUB_CLIENT_ID= +TOOLPAD_GITHUB_CLIENT_SECRET= + +TOOLPAD_GOOGLE_CLIENT_ID= +TOOLPAD_GOOGLE_CLIENT_SECRET= + +TOOLPAD_AZURE_AD_CLIENT_ID= +TOOLPAD_AZURE_AD_CLIENT_SECRET= +TOOLPAD_AZURE_AD_TENANT_ID= \ No newline at end of file diff --git a/examples/auth/README.md b/examples/auth/README.md new file mode 100644 index 00000000000..520c092eb22 --- /dev/null +++ b/examples/auth/README.md @@ -0,0 +1,29 @@ +# Authentication + +

An app that shows how to set up authentication in Toolpad.

+ +Example showcasing custom server integration of Toolpad apps. [The docs](https://mui.com/toolpad/concepts/authentication/). + +
+ Authentication + + +## How to run + +Use `create-toolpad-app` to bootstrap the example: + +```bash +npx create-toolpad-app@latest --example auth +``` + +```bash +yarn create toolpad-app --example auth +``` + +```bash +pnpm create toolpad-app --example auth +``` + +or: + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/fork/github/mui/mui-toolpad/tree/master/examples/auth) diff --git a/examples/auth/package.json b/examples/auth/package.json new file mode 100644 index 00000000000..4f0696380e4 --- /dev/null +++ b/examples/auth/package.json @@ -0,0 +1,13 @@ +{ + "name": "auth", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "toolpad dev", + "build": "toolpad build", + "start": "toolpad start" + }, + "dependencies": { + "@mui/toolpad": "0.1.48" + } +} diff --git a/examples/auth/toolpad/.gitignore b/examples/auth/toolpad/.gitignore new file mode 100644 index 00000000000..5f1e4d07bfd --- /dev/null +++ b/examples/auth/toolpad/.gitignore @@ -0,0 +1 @@ +.generated diff --git a/examples/auth/toolpad/application.yml b/examples/auth/toolpad/application.yml new file mode 100644 index 00000000000..d8b017e5f7d --- /dev/null +++ b/examples/auth/toolpad/application.yml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: application +spec: + { + authentication: + { + providers: + [ + { provider: github }, + { provider: google }, + { provider: azure-ad }, + { provider: credentials }, + ], + restrictedDomains: [], + }, + authorization: {}, + } diff --git a/examples/auth/toolpad/pages/protectedpage/page.yml b/examples/auth/toolpad/pages/protectedpage/page.yml new file mode 100644 index 00000000000..fd9e0612f25 --- /dev/null +++ b/examples/auth/toolpad/pages/protectedpage/page.yml @@ -0,0 +1,14 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/mui/mui-toolpad/v0.1.48/docs/schemas/v1/definitions.json#properties/Page + +apiVersion: v1 +kind: page +spec: + alias: + - sP_2TKM + title: Protected Page + displayName: Protected Page + content: + - component: Text + name: text + props: + value: Only authenticated users can see me. diff --git a/packages/toolpad-app/src/server/auth.ts b/packages/toolpad-app/src/server/auth.ts index ccbe4e1c8af..a1180448031 100644 --- a/packages/toolpad-app/src/server/auth.ts +++ b/packages/toolpad-app/src/server/auth.ts @@ -6,6 +6,7 @@ import AzureADProvider from '@auth/core/providers/azure-ad'; import { getToken } from '@auth/core/jwt'; import { AuthConfig, TokenSet } from '@auth/core/types'; import { OAuthConfig } from '@auth/core/providers'; +import chalk from 'chalk'; import * as appDom from '@mui/toolpad-core/appDom'; import { asyncHandler } from '../utils/express'; import { adaptRequestFromExpressToFetch } from './httpApiAdapters'; @@ -17,6 +18,14 @@ const SKIP_VERIFICATION_PROVIDERS: appDom.AuthProvider[] = [ ]; export function createAuthHandler(project: ToolpadProject): Router { + if (!process.env.TOOLPAD_AUTH_SECRET) { + console.error( + `\n${chalk.red( + 'Missing secret for authentication. Please provide a secret in the TOOLPAD_AUTH_SECRET environment variable. Read more at https://mui.com/toolpad/concepts/authentication/#authentication-secret', + )}\n`, + ); + } + const { base } = project.options; const router = express.Router(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 94e85ce4e45..2743654f721 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15251,4 +15251,4 @@ packages: - debug - encoding - supports-color - - utf-8-validate + - utf-8-validate \ No newline at end of file diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 6e7e91713fc..32b6d325d7c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,3 +2,4 @@ packages: - 'packages/*' - 'docs' - 'test' + - 'examples/auth' From 31930197d75a9fabb8cc231b2fae19a2d63a03c5 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Fri, 26 Jan 2024 10:21:57 +0000 Subject: [PATCH 03/15] Update readme --- examples/auth/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/auth/README.md b/examples/auth/README.md index 520c092eb22..54ef4c288e5 100644 --- a/examples/auth/README.md +++ b/examples/auth/README.md @@ -2,7 +2,7 @@

An app that shows how to set up authentication in Toolpad.

-Example showcasing custom server integration of Toolpad apps. [The docs](https://mui.com/toolpad/concepts/authentication/). +Example showcasing how to set up authentication providers in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). Authentication From 4c1c3f9e1a2e681bf9696518ffb39480b11f3247 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Fri, 26 Jan 2024 10:22:54 +0000 Subject: [PATCH 04/15] Remove pnpm workspace --- pnpm-workspace.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 32b6d325d7c..6e7e91713fc 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -2,4 +2,3 @@ packages: - 'packages/*' - 'docs' - 'test' - - 'examples/auth' From 2fe534a11b5547e141d557d03283d0b27db30d63 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Thu, 8 Feb 2024 21:07:56 +0000 Subject: [PATCH 05/15] Remove Azure examples --- examples/auth/.env.example | 6 +----- examples/auth/package.json | 2 +- pnpm-lock.yaml | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/examples/auth/.env.example b/examples/auth/.env.example index 00906d101f7..4f3b70013de 100644 --- a/examples/auth/.env.example +++ b/examples/auth/.env.example @@ -4,8 +4,4 @@ TOOLPAD_GITHUB_CLIENT_ID= TOOLPAD_GITHUB_CLIENT_SECRET= TOOLPAD_GOOGLE_CLIENT_ID= -TOOLPAD_GOOGLE_CLIENT_SECRET= - -TOOLPAD_AZURE_AD_CLIENT_ID= -TOOLPAD_AZURE_AD_CLIENT_SECRET= -TOOLPAD_AZURE_AD_TENANT_ID= \ No newline at end of file +TOOLPAD_GOOGLE_CLIENT_SECRET= \ No newline at end of file diff --git a/examples/auth/package.json b/examples/auth/package.json index 4f0696380e4..f85f62923dc 100644 --- a/examples/auth/package.json +++ b/examples/auth/package.json @@ -8,6 +8,6 @@ "start": "toolpad start" }, "dependencies": { - "@mui/toolpad": "0.1.48" + "@mui/toolpad": "0.1.49" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 89e59544130..ac6dac4f31b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15281,4 +15281,4 @@ packages: - debug - encoding - supports-color - - utf-8-validate \ No newline at end of file + - utf-8-validate From 943c0b1a0d6a130c4386471ff715ccda45439d75 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Thu, 8 Feb 2024 21:09:34 +0000 Subject: [PATCH 06/15] Remove more Azure and credentials --- examples/auth/toolpad/application.yml | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/examples/auth/toolpad/application.yml b/examples/auth/toolpad/application.yml index d8b017e5f7d..9536dee88f9 100644 --- a/examples/auth/toolpad/application.yml +++ b/examples/auth/toolpad/application.yml @@ -3,15 +3,6 @@ kind: application spec: { authentication: - { - providers: - [ - { provider: github }, - { provider: google }, - { provider: azure-ad }, - { provider: credentials }, - ], - restrictedDomains: [], - }, + { providers: [{ provider: github }, { provider: google }], restrictedDomains: [] }, authorization: {}, } From 7f81a063743edcc61fed6b4363bc142af3a93f67 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 18:33:03 +0000 Subject: [PATCH 07/15] Split examples for Github and Google, link to OAuth client instructions in READMEs --- CONTRIBUTING.md | 2 +- .../static/toolpad/marketing/auth-github.png | Bin 0 -> 19061 bytes .../static/toolpad/marketing/auth-google.png | Bin 0 -> 19292 bytes .../toolpad/marketing/authentication.png | Bin 37248 -> 0 bytes docs/src/modules/components/ExamplesGrid.js | 10 +++--- examples/auth-github/.env.example | 4 +++ examples/auth-github/README.md | 31 ++++++++++++++++++ examples/{auth => auth-github}/package.json | 2 +- .../{auth => auth-github}/toolpad/.gitignore | 0 examples/auth-github/toolpad/application.yml | 6 ++++ .../toolpad/pages/protectedpage/page.yml | 2 +- examples/{auth => auth-google}/.env.example | 3 -- examples/auth-google/README.md | 31 ++++++++++++++++++ examples/auth-google/package.json | 13 ++++++++ examples/auth-google/toolpad/.gitignore | 1 + examples/auth-google/toolpad/application.yml | 6 ++++ .../toolpad/pages/protectedpage/page.yml | 14 ++++++++ examples/auth/README.md | 29 ---------------- examples/auth/toolpad/application.yml | 8 ----- pnpm-lock.yaml | 6 ++++ 20 files changed, 120 insertions(+), 48 deletions(-) create mode 100644 docs/public/static/toolpad/marketing/auth-github.png create mode 100644 docs/public/static/toolpad/marketing/auth-google.png delete mode 100644 docs/public/static/toolpad/marketing/authentication.png create mode 100644 examples/auth-github/.env.example create mode 100644 examples/auth-github/README.md rename examples/{auth => auth-github}/package.json (89%) rename examples/{auth => auth-github}/toolpad/.gitignore (100%) create mode 100644 examples/auth-github/toolpad/application.yml rename examples/{auth => auth-github}/toolpad/pages/protectedpage/page.yml (82%) rename examples/{auth => auth-google}/.env.example (67%) create mode 100644 examples/auth-google/README.md create mode 100644 examples/auth-google/package.json create mode 100644 examples/auth-google/toolpad/.gitignore create mode 100644 examples/auth-google/toolpad/application.yml create mode 100644 examples/auth-google/toolpad/pages/protectedpage/page.yml delete mode 100644 examples/auth/README.md delete mode 100644 examples/auth/toolpad/application.yml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5ac29d8b39f..5977d0eb0e7 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,7 +62,7 @@ If your application has dependencies other than `@mui/toolpad`, you have to temp 1. Make sure to start the build in watch mode again and the run the app with ```bash - pnpm toolpad dev examples/qr-generator --dev + pnpm toolpad dev examples/qr-generator/toolpad --dev ``` ### Linking Toolpad in a folder on your system (advanced) diff --git a/docs/public/static/toolpad/marketing/auth-github.png b/docs/public/static/toolpad/marketing/auth-github.png new file mode 100644 index 0000000000000000000000000000000000000000..f0b9a4380e58bd03e1d80a076d2810b0908764a5 GIT binary patch literal 19061 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 literal 0 HcmV?d00001 diff --git a/docs/public/static/toolpad/marketing/auth-google.png b/docs/public/static/toolpad/marketing/auth-google.png new file mode 100644 index 0000000000000000000000000000000000000000..72594244a43a586c1f4701cad64f11768e775d00 GIT binary patch literal 19292 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 literal 0 HcmV?d00001 diff --git a/docs/public/static/toolpad/marketing/authentication.png b/docs/public/static/toolpad/marketing/authentication.png deleted file mode 100644 index 0850850aaa0f086db7437ef6f78f36539704bbec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37248 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 app that shows how to set up GitHub authentication in Toolpad.

+ +Example showcasing how to set up GitHub authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). + +To use this example, you need to set up your own GitHub OAuth app. You can do that by following [these instructions](https://mui.com/toolpad/concepts/authentication/#github). + +
+ GitHub Authentication + + +## How to run + +Use `create-toolpad-app` to bootstrap the example: + +```bash +npx create-toolpad-app@latest --example auth-github +``` + +```bash +yarn create toolpad-app --example auth-github +``` + +```bash +pnpm create toolpad-app --example auth-github +``` + +or: + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/fork/github/mui/mui-toolpad/tree/master/examples/auth-github) diff --git a/examples/auth/package.json b/examples/auth-github/package.json similarity index 89% rename from examples/auth/package.json rename to examples/auth-github/package.json index f85f62923dc..6eda8dbe559 100644 --- a/examples/auth/package.json +++ b/examples/auth-github/package.json @@ -1,5 +1,5 @@ { - "name": "auth", + "name": "auth-github", "version": "0.1.0", "private": true, "scripts": { diff --git a/examples/auth/toolpad/.gitignore b/examples/auth-github/toolpad/.gitignore similarity index 100% rename from examples/auth/toolpad/.gitignore rename to examples/auth-github/toolpad/.gitignore diff --git a/examples/auth-github/toolpad/application.yml b/examples/auth-github/toolpad/application.yml new file mode 100644 index 00000000000..473a698b492 --- /dev/null +++ b/examples/auth-github/toolpad/application.yml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: application +spec: + authentication: + providers: + - provider: github diff --git a/examples/auth/toolpad/pages/protectedpage/page.yml b/examples/auth-github/toolpad/pages/protectedpage/page.yml similarity index 82% rename from examples/auth/toolpad/pages/protectedpage/page.yml rename to examples/auth-github/toolpad/pages/protectedpage/page.yml index fd9e0612f25..068186965a7 100644 --- a/examples/auth/toolpad/pages/protectedpage/page.yml +++ b/examples/auth-github/toolpad/pages/protectedpage/page.yml @@ -1,4 +1,4 @@ -# yaml-language-server: $schema=https://raw.githubusercontent.com/mui/mui-toolpad/v0.1.48/docs/schemas/v1/definitions.json#properties/Page +# yaml-language-server: $schema=https://raw.githubusercontent.com/mui/mui-toolpad/v0.1.49/docs/schemas/v1/definitions.json#properties/Page apiVersion: v1 kind: page diff --git a/examples/auth/.env.example b/examples/auth-google/.env.example similarity index 67% rename from examples/auth/.env.example rename to examples/auth-google/.env.example index 4f3b70013de..c4e57f6f551 100644 --- a/examples/auth/.env.example +++ b/examples/auth-google/.env.example @@ -1,7 +1,4 @@ TOOLPAD_AUTH_SECRET=u43rXwzRvl4PDZhAqeciOW4KLfYIl2Aa9B5Wet+rJSI= -TOOLPAD_GITHUB_CLIENT_ID= -TOOLPAD_GITHUB_CLIENT_SECRET= - TOOLPAD_GOOGLE_CLIENT_ID= TOOLPAD_GOOGLE_CLIENT_SECRET= \ No newline at end of file diff --git a/examples/auth-google/README.md b/examples/auth-google/README.md new file mode 100644 index 00000000000..b915f4ffdba --- /dev/null +++ b/examples/auth-google/README.md @@ -0,0 +1,31 @@ +# Google Authentication + +

An app that shows how to set up Google authentication in Toolpad.

+ +Example showcasing how to set up Google authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). + +To use this example, you need to set up your own Google OAuth client ID. You can do that by following [these instructions](https://mui.com/toolpad/concepts/authentication/#google). + + + Google Authentication + + +## How to run + +Use `create-toolpad-app` to bootstrap the example: + +```bash +npx create-toolpad-app@latest --example auth-google +``` + +```bash +yarn create toolpad-app --example auth-google +``` + +```bash +pnpm create toolpad-app --example auth-google +``` + +or: + +[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/fork/github/mui/mui-toolpad/tree/master/examples/auth-google) diff --git a/examples/auth-google/package.json b/examples/auth-google/package.json new file mode 100644 index 00000000000..e884350d48d --- /dev/null +++ b/examples/auth-google/package.json @@ -0,0 +1,13 @@ +{ + "name": "auth-google", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "toolpad dev", + "build": "toolpad build", + "start": "toolpad start" + }, + "dependencies": { + "@mui/toolpad": "0.1.49" + } +} diff --git a/examples/auth-google/toolpad/.gitignore b/examples/auth-google/toolpad/.gitignore new file mode 100644 index 00000000000..5f1e4d07bfd --- /dev/null +++ b/examples/auth-google/toolpad/.gitignore @@ -0,0 +1 @@ +.generated diff --git a/examples/auth-google/toolpad/application.yml b/examples/auth-google/toolpad/application.yml new file mode 100644 index 00000000000..04843382aec --- /dev/null +++ b/examples/auth-google/toolpad/application.yml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: application +spec: + authentication: + providers: + - provider: google diff --git a/examples/auth-google/toolpad/pages/protectedpage/page.yml b/examples/auth-google/toolpad/pages/protectedpage/page.yml new file mode 100644 index 00000000000..068186965a7 --- /dev/null +++ b/examples/auth-google/toolpad/pages/protectedpage/page.yml @@ -0,0 +1,14 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/mui/mui-toolpad/v0.1.49/docs/schemas/v1/definitions.json#properties/Page + +apiVersion: v1 +kind: page +spec: + alias: + - sP_2TKM + title: Protected Page + displayName: Protected Page + content: + - component: Text + name: text + props: + value: Only authenticated users can see me. diff --git a/examples/auth/README.md b/examples/auth/README.md deleted file mode 100644 index 54ef4c288e5..00000000000 --- a/examples/auth/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# Authentication - -

An app that shows how to set up authentication in Toolpad.

- -Example showcasing how to set up authentication providers in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). - - - Authentication - - -## How to run - -Use `create-toolpad-app` to bootstrap the example: - -```bash -npx create-toolpad-app@latest --example auth -``` - -```bash -yarn create toolpad-app --example auth -``` - -```bash -pnpm create toolpad-app --example auth -``` - -or: - -[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/fork/github/mui/mui-toolpad/tree/master/examples/auth) diff --git a/examples/auth/toolpad/application.yml b/examples/auth/toolpad/application.yml deleted file mode 100644 index 9536dee88f9..00000000000 --- a/examples/auth/toolpad/application.yml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: application -spec: - { - authentication: - { providers: [{ provider: github }, { provider: google }], restrictedDomains: [] }, - authorization: {}, - } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ac6dac4f31b..91accf1e210 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -422,6 +422,12 @@ importers: specifier: 2.2.1 version: 2.2.1 + examples/auth-google: + dependencies: + '@mui/toolpad': + specifier: 0.1.49 + version: link:../../packages/toolpad-app + packages/create-toolpad-app: dependencies: '@mui/toolpad-utils': From e4fc8a01845a95ccb0776f62bc58b4b5f970ee00 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 18:36:58 +0000 Subject: [PATCH 08/15] restore pnpm-lock --- pnpm-lock.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 91accf1e210..ac6dac4f31b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -422,12 +422,6 @@ importers: specifier: 2.2.1 version: 2.2.1 - examples/auth-google: - dependencies: - '@mui/toolpad': - specifier: 0.1.49 - version: link:../../packages/toolpad-app - packages/create-toolpad-app: dependencies: '@mui/toolpad-utils': From d6278746d2856b682803ec01110ccbcbfcc8a6fe Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:17:26 +0000 Subject: [PATCH 09/15] Improve READMEs --- examples/auth-github/.env.example | 2 +- examples/auth-github/README.md | 6 +++++- examples/auth-google/.env.example | 2 +- examples/auth-google/README.md | 6 +++++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/examples/auth-github/.env.example b/examples/auth-github/.env.example index d970370a9b9..597ff479c84 100644 --- a/examples/auth-github/.env.example +++ b/examples/auth-github/.env.example @@ -1,4 +1,4 @@ -TOOLPAD_AUTH_SECRET=u43rXwzRvl4PDZhAqeciOW4KLfYIl2Aa9B5Wet+rJSI= +TOOLPAD_AUTH_SECRET= TOOLPAD_GITHUB_CLIENT_ID= TOOLPAD_GITHUB_CLIENT_SECRET= \ No newline at end of file diff --git a/examples/auth-github/README.md b/examples/auth-github/README.md index 6a1bfe7f585..7e336d584c4 100644 --- a/examples/auth-github/README.md +++ b/examples/auth-github/README.md @@ -4,7 +4,11 @@ Example showcasing how to set up GitHub authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set up your own GitHub OAuth app. You can do that by following [these instructions](https://mui.com/toolpad/concepts/authentication/#github). +To use this example, you need to set the environment variables shown in [env.example](env.example). +To get those values, please: + +- Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. +- Set up your own GitHub OAuth app by following [these instructions](https://mui.com/toolpad/concepts/authentication/#github). GitHub Authentication diff --git a/examples/auth-google/.env.example b/examples/auth-google/.env.example index c4e57f6f551..00ecd56d928 100644 --- a/examples/auth-google/.env.example +++ b/examples/auth-google/.env.example @@ -1,4 +1,4 @@ -TOOLPAD_AUTH_SECRET=u43rXwzRvl4PDZhAqeciOW4KLfYIl2Aa9B5Wet+rJSI= +TOOLPAD_AUTH_SECRET= TOOLPAD_GOOGLE_CLIENT_ID= TOOLPAD_GOOGLE_CLIENT_SECRET= \ No newline at end of file diff --git a/examples/auth-google/README.md b/examples/auth-google/README.md index b915f4ffdba..a702d6b8249 100644 --- a/examples/auth-google/README.md +++ b/examples/auth-google/README.md @@ -4,7 +4,11 @@ Example showcasing how to set up Google authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set up your own Google OAuth client ID. You can do that by following [these instructions](https://mui.com/toolpad/concepts/authentication/#google). +To use this example, you need to set the environment variables shown in [env.example](env.example). +To get those values, please: + +- Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. +- Set up your own Google OAuth client ID by following [these instructions](https://mui.com/toolpad/concepts/authentication/#google). Google Authentication From 918134de25ea785af3313e6048933cd3c531ef55 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:18:37 +0000 Subject: [PATCH 10/15] Fix readme links --- examples/auth-github/README.md | 2 +- examples/auth-google/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/auth-github/README.md b/examples/auth-github/README.md index 7e336d584c4..46f6ed82995 100644 --- a/examples/auth-github/README.md +++ b/examples/auth-github/README.md @@ -4,7 +4,7 @@ Example showcasing how to set up GitHub authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set the environment variables shown in [env.example](env.example). +To use this example, you need to set the environment variables shown in [examples/auth-github/env.example](env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. diff --git a/examples/auth-google/README.md b/examples/auth-google/README.md index a702d6b8249..8b0a2d1d25e 100644 --- a/examples/auth-google/README.md +++ b/examples/auth-google/README.md @@ -4,7 +4,7 @@ Example showcasing how to set up Google authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set the environment variables shown in [env.example](env.example). +To use this example, you need to set the environment variables shown in [examples/auth-google/env.example](env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. From cb30cffd22dbf3d8be53e2187a3bb86a8f216cbd Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:19:19 +0000 Subject: [PATCH 11/15] Fix again --- examples/auth-github/README.md | 2 +- examples/auth-google/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/auth-github/README.md b/examples/auth-github/README.md index 46f6ed82995..062b901aa03 100644 --- a/examples/auth-github/README.md +++ b/examples/auth-github/README.md @@ -4,7 +4,7 @@ Example showcasing how to set up GitHub authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set the environment variables shown in [examples/auth-github/env.example](env.example). +To use this example, you need to set the environment variables shown in [examples/auth-github/.env.example](env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. diff --git a/examples/auth-google/README.md b/examples/auth-google/README.md index 8b0a2d1d25e..9aefb54b7eb 100644 --- a/examples/auth-google/README.md +++ b/examples/auth-google/README.md @@ -4,7 +4,7 @@ Example showcasing how to set up Google authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set the environment variables shown in [examples/auth-google/env.example](env.example). +To use this example, you need to set the environment variables shown in [examples/auth-google/.env.example](env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. From 4b487dbd44705919f93166766f5e2154ffbbedb5 Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:20:05 +0000 Subject: [PATCH 12/15] Link names --- examples/auth-github/README.md | 2 +- examples/auth-google/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/auth-github/README.md b/examples/auth-github/README.md index 062b901aa03..c777568ebc0 100644 --- a/examples/auth-github/README.md +++ b/examples/auth-github/README.md @@ -4,7 +4,7 @@ Example showcasing how to set up GitHub authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set the environment variables shown in [examples/auth-github/.env.example](env.example). +To use this example, you need to set the environment variables shown in [examples/auth-github/.env.example](.env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. diff --git a/examples/auth-google/README.md b/examples/auth-google/README.md index 9aefb54b7eb..f06401eaaf5 100644 --- a/examples/auth-google/README.md +++ b/examples/auth-google/README.md @@ -4,7 +4,7 @@ Example showcasing how to set up Google authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set the environment variables shown in [examples/auth-google/.env.example](env.example). +To use this example, you need to set the environment variables shown in [examples/auth-google/.env.example](.env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. From eb0c552a046b40e142786b67c20b72ae2bbe2dae Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:22:12 +0000 Subject: [PATCH 13/15] Better sections --- examples/auth-github/README.md | 14 +++++++------- examples/auth-google/README.md | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/examples/auth-github/README.md b/examples/auth-github/README.md index c777568ebc0..20a898bf7ad 100644 --- a/examples/auth-github/README.md +++ b/examples/auth-github/README.md @@ -4,19 +4,19 @@ Example showcasing how to set up GitHub authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set the environment variables shown in [examples/auth-github/.env.example](.env.example). -To get those values, please: - -- Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. -- Set up your own GitHub OAuth app by following [these instructions](https://mui.com/toolpad/concepts/authentication/#github). - GitHub Authentication ## How to run -Use `create-toolpad-app` to bootstrap the example: +To use this example, you need to set the environment variables shown in [examples/auth-github/.env.example](.env.example). +To get those values, please: + +- Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. +- Set up your own GitHub OAuth app by following [these instructions](https://mui.com/toolpad/concepts/authentication/#github). + +Then, use `create-toolpad-app` to bootstrap the example: ```bash npx create-toolpad-app@latest --example auth-github diff --git a/examples/auth-google/README.md b/examples/auth-google/README.md index f06401eaaf5..fbea6a8a43c 100644 --- a/examples/auth-google/README.md +++ b/examples/auth-google/README.md @@ -4,19 +4,19 @@ Example showcasing how to set up Google authentication in a Toolpad app. [The docs](https://mui.com/toolpad/concepts/authentication/). -To use this example, you need to set the environment variables shown in [examples/auth-google/.env.example](.env.example). -To get those values, please: - -- Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. -- Set up your own Google OAuth client ID by following [these instructions](https://mui.com/toolpad/concepts/authentication/#google). - Google Authentication ## How to run -Use `create-toolpad-app` to bootstrap the example: +To use this example, you need to set the environment variables shown in [examples/auth-google/.env.example](.env.example). +To get those values, please: + +- Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. +- Set up your own Google OAuth client ID by following [these instructions](https://mui.com/toolpad/concepts/authentication/#google). + +Then, use `create-toolpad-app` to bootstrap the example: ```bash npx create-toolpad-app@latest --example auth-google From e23ae14a431d0416281a74606171636b81468d4f Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:24:04 +0000 Subject: [PATCH 14/15] Holy cow --- examples/auth-github/README.md | 2 +- examples/auth-google/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/auth-github/README.md b/examples/auth-github/README.md index 20a898bf7ad..1440fc5e561 100644 --- a/examples/auth-github/README.md +++ b/examples/auth-github/README.md @@ -10,7 +10,7 @@ Example showcasing how to set up GitHub authentication in a Toolpad app. [The do ## How to run -To use this example, you need to set the environment variables shown in [examples/auth-github/.env.example](.env.example). +To use this example, you need to set the environment variables shown in [.env.example](examples/auth-github/.env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. diff --git a/examples/auth-google/README.md b/examples/auth-google/README.md index fbea6a8a43c..f4c20974b62 100644 --- a/examples/auth-google/README.md +++ b/examples/auth-google/README.md @@ -10,7 +10,7 @@ Example showcasing how to set up Google authentication in a Toolpad app. [The do ## How to run -To use this example, you need to set the environment variables shown in [examples/auth-google/.env.example](.env.example). +To use this example, you need to set the environment variables shown in [.env.example](examples/auth-google/.env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. From dc9e303b3cca6d5a955bb5023f14c2eafb406b6b Mon Sep 17 00:00:00 2001 From: Pedro Ferreira <10789765+apedroferreira@users.noreply.github.com> Date: Tue, 13 Feb 2024 19:27:08 +0000 Subject: [PATCH 15/15] Still wrong --- examples/auth-github/README.md | 2 +- examples/auth-google/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/auth-github/README.md b/examples/auth-github/README.md index 1440fc5e561..b618d1c6ed6 100644 --- a/examples/auth-github/README.md +++ b/examples/auth-github/README.md @@ -10,7 +10,7 @@ Example showcasing how to set up GitHub authentication in a Toolpad app. [The do ## How to run -To use this example, you need to set the environment variables shown in [.env.example](examples/auth-github/.env.example). +To use this example, you need to set the environment variables shown in [.env.example](.env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret. diff --git a/examples/auth-google/README.md b/examples/auth-google/README.md index f4c20974b62..a060fe4a2fd 100644 --- a/examples/auth-google/README.md +++ b/examples/auth-google/README.md @@ -10,7 +10,7 @@ Example showcasing how to set up Google authentication in a Toolpad app. [The do ## How to run -To use this example, you need to set the environment variables shown in [.env.example](examples/auth-google/.env.example). +To use this example, you need to set the environment variables shown in [.env.example](.env.example). To get those values, please: - Follow [this section](https://mui.com/toolpad/concepts/authentication/#authentication-secret) on how to create an authentication secret.