From 83ad1b6142a9f60ac5fc0b4b26998f7fe82d32fb Mon Sep 17 00:00:00 2001 From: Terry Sutton Date: Fri, 4 Nov 2022 11:26:30 -0230 Subject: [PATCH 1/2] Port JWTgenerator --- apps/docs/components/JwtGenerator.js | 117 +++++++++++++++++++++ apps/docs/components/index.tsx | 5 +- apps/docs/docs/guides/hosting/overview.mdx | 2 - 3 files changed, 121 insertions(+), 3 deletions(-) create mode 100644 apps/docs/components/JwtGenerator.js diff --git a/apps/docs/components/JwtGenerator.js b/apps/docs/components/JwtGenerator.js new file mode 100644 index 00000000000..d4c39218734 --- /dev/null +++ b/apps/docs/components/JwtGenerator.js @@ -0,0 +1,117 @@ +import React, { useState } from 'react' +import KJUR from 'jsrsasign' +import CodeBlock from './CodeBlock/CodeBlock' +import { Button } from 'ui' + +const JWT_HEADER = { alg: 'HS256', typ: 'JWT' } +const now = new Date() +const today = new Date(now.getFullYear(), now.getMonth(), now.getDate()) +const fiveYears = new Date(now.getFullYear() + 5, now.getMonth(), now.getDate()) +const anonToken = ` +{ + "role": "anon", + "iss": "supabase", + "iat": ${Math.floor(today / 1000)}, + "exp": ${Math.floor(fiveYears / 1000)} +} +`.trim() + +const serviceToken = ` +{ + "role": "service_role", + "iss": "supabase", + "iat": ${Math.floor(today / 1000)}, + "exp": ${Math.floor(fiveYears / 1000)} +} +`.trim() + +export default function JwtGenerator({}) { + const secret = [...Array(40)].map(() => Math.random().toString(36)[2]).join('') + + const [jwtSecret, setJwtSecret] = useState(secret) + const [token, setToken] = useState(anonToken) + const [signedToken, setSignedToken] = useState('') + + const handleKeySelection = (e) => { + const val = e.target.value + if (val == 'service') setToken(serviceToken) + else setToken(anonToken) + } + const generate = () => { + const signedJWT = KJUR.jws.JWS.sign(null, JWT_HEADER, token, jwtSecret) + setSignedToken(signedJWT) + } + + return ( +
+
+ + setJwtSecret(e.target.value)} + /> +
+
+ + +
+
+ +