From e8db91fe9bb61adf4b0d78e4b55a1b102e82a183 Mon Sep 17 00:00:00 2001 From: slumbering Date: Mon, 14 Jun 2021 14:13:31 +0200 Subject: [PATCH] docs: :bug: fix user auth issue + refacto api calls Signed-off-by: slumbering --- website/src/api/github.js | 72 +++++++++++-------- .../src/components/DocPageAuthentication.js | 2 +- website/src/theme/DocPage/index.js | 12 ++-- 3 files changed, 48 insertions(+), 38 deletions(-) diff --git a/website/src/api/github.js b/website/src/api/github.js index 435e097b..ce2b66df 100644 --- a/website/src/api/github.js +++ b/website/src/api/github.js @@ -4,55 +4,65 @@ const AxiosInstance = axios.create({ headers: { 'Accept': 'application/vnd.github.v3+json' }, }); -async function getAccessToken(code) { - +function bindApiCall({ url, config, errorMessage }) { try { - const getAccessToken = await AxiosInstance.get('https://github.com/login/oauth/access_token', { + const apiCall = AxiosInstance.get(url, { + ...config, + validateStatus: function (status) { + return status < 500; // Resolve only if the status code is less than 500 + } + }) + + return apiCall + } catch (error) { + console.log(errorMessage, error.message) + } +} + +async function getAccessToken(code) { + const accessToken = await bindApiCall({ + url: 'https://github.com/login/oauth/access_token', + config: { params: { code, client_id: 'cd8f9be2562bfc8d6cfc', client_secret: '2509358055095d52dfd7331d072f378e7f16940f', }, - validateStatus: function (status) { - return status < 500; // Resolve only if the status code is less than 500 - } - }) + errorMessage: 'error getAccessToken' + } + }) - return getAccessToken.data; - } catch (error) { - console.log("error getAccessToken", error.message) - } + return accessToken.data } export async function getUser(access_token) { - try { - const getUserLogin = await AxiosInstance.get("https://api.github.com/user", { + const user = await bindApiCall({ + url: 'https://api.github.com/user', + config: { headers: { Authorization: `token ${access_token}` }, - validateStatus: function (status) { - return status < 500; // Resolve only if the status code is less than 500 - } - }) + }, + errorMessage: 'error getUser' + }) - return { - login: getUserLogin.data.login, - status: getUserLogin.status - } - } catch (error) { - console.log("error getUser", error.message) + return { + login: user.data?.login, + error: user.data?.error_description, + status: user.status } + } export async function checkUserCollaboratorStatus(code) { const { access_token } = await getAccessToken(code) const { login } = await getUser(access_token) - try { - const isUserCollaborator = await AxiosInstance.get(`https://docs-access.dagger.io/u/${login}`) - return { - status: isUserCollaborator.status, - access_token - } - } catch (error) { - console.log("error checkUserCollaboratorStatus", error.message); + const isUserCollaborator = await bindApiCall({ + url: `https://docs-access.dagger.io/u/${login}`, + errorMessage: 'error checkUserCollaboratorStatus' + }) + + return { + isAllowed: isUserCollaborator.data, + access_token } } \ No newline at end of file diff --git a/website/src/components/DocPageAuthentication.js b/website/src/components/DocPageAuthentication.js index 2f8f6667..8264aaeb 100644 --- a/website/src/components/DocPageAuthentication.js +++ b/website/src/components/DocPageAuthentication.js @@ -6,7 +6,7 @@ export default function DocAuthentication() { return (

Welcome on Dagger documentation

-

Please Sign in to Github in order to get access to the doc

+

Please Sign In to Github to get access to the doc

window.location.href = `//github.com/login/oauth/authorize?client_id=cd8f9be2562bfc8d6cfc&scope=user&allow_signup=false`} />
) diff --git a/website/src/theme/DocPage/index.js b/website/src/theme/DocPage/index.js index ce73867b..7f9d8c50 100644 --- a/website/src/theme/DocPage/index.js +++ b/website/src/theme/DocPage/index.js @@ -153,14 +153,14 @@ function DocPage(props) { const user = await getUser(userAccessToken) setIsUserAuthorized(user) } else { - if (!isEmpty(authQuery)) { //callback after successful auth with github) + if (!isEmpty(authQuery)) { //callback after successful auth with github const isUserCollaborator = await checkUserCollaboratorStatus(authQuery.code); - if (isUserCollaborator?.status === 200) { + if (isUserCollaborator?.isAllowed) { setUserAccessToken(isUserCollaborator.access_token) if (typeof window !== "undefined") window.localStorage.setItem('user-github-key', isUserCollaborator.access_token); - } else { - setIsUserAuthorized({ status: 401 }) } + + setIsUserAuthorized(isUserCollaborator?.isAllowed) } } setIsLoading(false) @@ -169,11 +169,11 @@ function DocPage(props) { if (isLoading) return - if ((isUserAuthorized?.status && isUserAuthorized?.status === 401)) { + if (isUserAuthorized === false) { return } - if (!isUserAuthorized) { + if (typeof isUserAuthorized == 'undefined' || isUserAuthorized?.status === 401) { return ( )