diff --git a/apps/docs/components/JwtGenerator.js b/apps/docs/components/JwtGenerator.js new file mode 100644 index 00000000000..46dd4758e31 --- /dev/null +++ b/apps/docs/components/JwtGenerator.js @@ -0,0 +1,96 @@ +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)} + /> +
+
+ + +
+ +
+ +