diff --git a/app/package-lock.json b/app/package-lock.json index b9cf1b6..f903c7f 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@authorizerdev/authorizer-react": "0.9.0-beta.3", + "@authorizerdev/authorizer-react": "0.9.0-beta.6", "@types/react": "^17.0.15", "@types/react-dom": "^17.0.9", "esbuild": "^0.12.17", @@ -35,9 +35,9 @@ } }, "node_modules/@authorizerdev/authorizer-react": { - "version": "0.9.0-beta.3", - "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-react/-/authorizer-react-0.9.0-beta.3.tgz", - "integrity": "sha512-P93PW6W3Qm9BW3160gn0Ce+64UCFAOpoEOHf5537LgFPE8LpNAIU3EI6EtMNkOJS58pu1h2UkfyRyX/j0Pohjw==", + "version": "0.9.0-beta.6", + "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-react/-/authorizer-react-0.9.0-beta.6.tgz", + "integrity": "sha512-5kGUUb0d/GQD24eoHeB/4WOloYeMT//Pdch8xmOKUetHk3t62rPtu1ADmitcfkhJUlM9St3fRZsaubPqdE9tvg==", "dependencies": { "@authorizerdev/authorizer-js": "^0.4.0-beta.0", "final-form": "^4.20.2", @@ -837,9 +837,9 @@ } }, "@authorizerdev/authorizer-react": { - "version": "0.9.0-beta.3", - "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-react/-/authorizer-react-0.9.0-beta.3.tgz", - "integrity": "sha512-P93PW6W3Qm9BW3160gn0Ce+64UCFAOpoEOHf5537LgFPE8LpNAIU3EI6EtMNkOJS58pu1h2UkfyRyX/j0Pohjw==", + "version": "0.9.0-beta.6", + "resolved": "https://registry.npmjs.org/@authorizerdev/authorizer-react/-/authorizer-react-0.9.0-beta.6.tgz", + "integrity": "sha512-5kGUUb0d/GQD24eoHeB/4WOloYeMT//Pdch8xmOKUetHk3t62rPtu1ADmitcfkhJUlM9St3fRZsaubPqdE9tvg==", "requires": { "@authorizerdev/authorizer-js": "^0.4.0-beta.0", "final-form": "^4.20.2", diff --git a/app/package.json b/app/package.json index ce6d03e..2076745 100644 --- a/app/package.json +++ b/app/package.json @@ -11,7 +11,7 @@ "author": "Lakhan Samani", "license": "ISC", "dependencies": { - "@authorizerdev/authorizer-react": "0.9.0-beta.3", + "@authorizerdev/authorizer-react": "0.9.0-beta.6", "@types/react": "^17.0.15", "@types/react-dom": "^17.0.9", "esbuild": "^0.12.17", diff --git a/app/src/App.tsx b/app/src/App.tsx index 284e3ad..1131b59 100644 --- a/app/src/App.tsx +++ b/app/src/App.tsx @@ -2,10 +2,33 @@ import React from 'react'; import { BrowserRouter } from 'react-router-dom'; import { AuthorizerProvider } from '@authorizerdev/authorizer-react'; import Root from './Root'; +import { createRandomString } from './utils/common'; export default function App() { - // @ts-ignore - const globalState: Record = window['__authorizer__']; + const searchParams = new URLSearchParams(window.location.search); + const state = searchParams.get('state') || createRandomString(); + const scope = searchParams.get('scope') + ? searchParams.get('scope')?.toString().split(' ') + : `openid profile email`; + + const urlProps: Record = { + state, + scope, + }; + + const redirectURL = + searchParams.get('redirect_uri') || searchParams.get('redirectURL'); + if (redirectURL) { + urlProps.redirectURL = redirectURL; + } else { + urlProps.redirectURL = window.location.origin; + } + const globalState: Record = { + // @ts-ignore + ...window['__authorizer__'], + ...urlProps, + }; + return (
- +
diff --git a/app/src/Root.tsx b/app/src/Root.tsx index 42d0699..d62ded8 100644 --- a/app/src/Root.tsx +++ b/app/src/Root.tsx @@ -6,14 +6,20 @@ const ResetPassword = lazy(() => import('./pages/rest-password')); const Login = lazy(() => import('./pages/login')); const Dashboard = lazy(() => import('./pages/dashboard')); -export default function Root() { +export default function Root({ + globalState, +}: { + globalState: Record; +}) { const { token, loading, config } = useAuthorizer(); useEffect(() => { if (token) { - console.log({ token }); let redirectURL = config.redirectURL || '/app'; - const params = `access_token=${token.access_token}&id_token=${token.id_token}&expires_in=${token.expires_in}&refresh_token=${token.refresh_token}`; + let params = `access_token=${token.access_token}&id_token=${token.id_token}&expires_in=${token.expires_in}&state=${globalState.state}`; + if (token.refresh_token) { + params += `&refresh_token=${token.refresh_token}`; + } const url = new URL(redirectURL); if (redirectURL.includes('?')) { redirectURL = `${redirectURL}&${params}`; diff --git a/app/src/utils/common.ts b/app/src/utils/common.ts new file mode 100644 index 0000000..278e4dd --- /dev/null +++ b/app/src/utils/common.ts @@ -0,0 +1,22 @@ +export const getCrypto = () => { + //ie 11.x uses msCrypto + return (window.crypto || (window as any).msCrypto) as Crypto; +}; + +export const createRandomString = () => { + const charset = + '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_~.'; + let random = ''; + const randomValues = Array.from( + getCrypto().getRandomValues(new Uint8Array(43)) + ); + randomValues.forEach((v) => (random += charset[v % charset.length])); + return random; +}; + +export const createQueryParams = (params: any) => { + return Object.keys(params) + .filter((k) => typeof params[k] !== 'undefined') + .map((k) => encodeURIComponent(k) + '=' + encodeURIComponent(params[k])) + .join('&'); +}; diff --git a/server/email/verification_email.go b/server/email/verification_email.go index 2c10ef4..bb0881f 100644 --- a/server/email/verification_email.go +++ b/server/email/verification_email.go @@ -1,7 +1,7 @@ package email import ( - "fmt" + "log" "github.com/authorizerdev/authorizer/server/constants" "github.com/authorizerdev/authorizer/server/envstore" @@ -107,7 +107,7 @@ func SendVerificationMail(toEmail, token, hostname string) error { err := SendMail(Receiver, Subject, message) if err != nil { - fmt.Println("=> error sending email:", err) + log.Println("=> error sending email:", err) } return err }