From 7e8ba077ae97c625d0a07e3f8bae909775124a9b Mon Sep 17 00:00:00 2001 From: quinton11 Date: Mon, 19 Jun 2023 09:32:55 +0000 Subject: [PATCH] fix: terminal text alignment --- cli/packages/cmd/login.go | 18 +++++++++++++----- .../src/components/login/InitialLoginStep.tsx | 2 +- frontend/src/components/login/MFAStep.tsx | 4 ++-- frontend/src/hooks/api/users/queries.tsx | 2 +- frontend/src/pages/login.tsx | 19 ++++++++++++++++++- 5 files changed, 35 insertions(+), 10 deletions(-) diff --git a/cli/packages/cmd/login.go b/cli/packages/cmd/login.go index ef5e9759b..9133d3101 100644 --- a/cli/packages/cmd/login.go +++ b/cli/packages/cmd/login.go @@ -528,7 +528,8 @@ func browserCliLogin() (models.UserCredentials, error) { timeout := time.After(time.Second * time.Duration(SERVER_TIMEOUT)) quit := make(chan bool) - // + //terminal state + var oldState term.State //create handler c := cors.New(cors.Options{ @@ -541,21 +542,24 @@ func browserCliLogin() (models.UserCredentials, error) { corsHandler := c.Handler(browserLoginHandler(success, failure)) log.Debug().Msgf("Callback server listening on port %d", callbackPort) - go quitBrowserLogin(quit) + go quitBrowserLogin(quit, &oldState) go http.Serve(listener, corsHandler) for { select { case loginResponse := <-success: err = closeListener(&listener) + restoreTerminal(&oldState) return loginResponse, nil case err = <-failure: err = closeListener(&listener) + restoreTerminal(&oldState) return models.UserCredentials{}, err case _ = <-timeout: err = closeListener(&listener) + restoreTerminal(&oldState) return models.UserCredentials{}, errors.New("server timeout") case _ = <-quit: @@ -565,16 +569,20 @@ func browserCliLogin() (models.UserCredentials, error) { } } +func restoreTerminal(oldState *term.State) { + term.Restore(int(os.Stdin.Fd()), oldState) +} + // listens to 'q' input on terminal and // sends 'true' to 'quit' channel -func quitBrowserLogin(quit chan bool) { +func quitBrowserLogin(quit chan bool, oState *term.State) { // oldState, err := term.MakeRaw(int(os.Stdin.Fd())) if err != nil { - fmt.Println(err) return } - defer term.Restore(int(os.Stdin.Fd()), oldState) + *oState = *oldState + defer restoreTerminal(oldState) b := make([]byte, 1) for { _, _ = os.Stdin.Read(b) diff --git a/frontend/src/components/login/InitialLoginStep.tsx b/frontend/src/components/login/InitialLoginStep.tsx index be8b31667..42105253c 100644 --- a/frontend/src/components/login/InitialLoginStep.tsx +++ b/frontend/src/components/login/InitialLoginStep.tsx @@ -39,7 +39,7 @@ export default function InitialLoginStep({ setIsLoading(true); const queryParams = new URLSearchParams(location.search) - if (queryParams) { + if (queryParams && queryParams.get("callback_port")) { const callbackPort = queryParams.get("callback_port") //attemptCliLogin diff --git a/frontend/src/components/login/MFAStep.tsx b/frontend/src/components/login/MFAStep.tsx index acf6a2ac9..85341620c 100644 --- a/frontend/src/components/login/MFAStep.tsx +++ b/frontend/src/components/login/MFAStep.tsx @@ -79,7 +79,7 @@ export default function MFAStep({ setIsLoading(true); const queryParams = new URLSearchParams(location.search) - if (queryParams){ + if (queryParams && queryParams.get("callback_port")){ const callbackPort = queryParams.get("callback_port") //attemptCliLogin @@ -94,7 +94,7 @@ export default function MFAStep({ // case: login was successful const cliUrl = `http://localhost:${callbackPort}` - //send request to server endpoint + //send request to server endpoint const instance = axios.create() const cliResp = await instance.post(cliUrl,{...isCliLoginSuccessful.loginResponse,email}) diff --git a/frontend/src/hooks/api/users/queries.tsx b/frontend/src/hooks/api/users/queries.tsx index ef6dcc726..b700374f1 100644 --- a/frontend/src/hooks/api/users/queries.tsx +++ b/frontend/src/hooks/api/users/queries.tsx @@ -24,7 +24,7 @@ const userKeys = { getOrgUsers: (orgId: string) => [{ orgId }, 'user'] }; -const fetchUserDetails = async () => { +export const fetchUserDetails = async () => { const { data } = await apiRequest.get<{ user: User }>('/api/v1/user'); return data.user; diff --git a/frontend/src/pages/login.tsx b/frontend/src/pages/login.tsx index 61276f35a..ab28bba44 100644 --- a/frontend/src/pages/login.tsx +++ b/frontend/src/pages/login.tsx @@ -4,13 +4,15 @@ import Head from 'next/head'; import Image from 'next/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; +import axios from "axios" // import ListBox from '@app/components/basic/Listbox'; import InitialLoginStep from '@app/components/login/InitialLoginStep'; import MFAStep from '@app/components/login/MFAStep'; import PasswordInputStep from '@app/components/login/PasswordInputStep'; import { useProviderAuth } from '@app/hooks/useProviderAuth'; -import { isLoggedIn } from '@app/reactQuery'; +import { getAuthToken, isLoggedIn } from '@app/reactQuery'; +import { fetchUserDetails } from '~/hooks/api/users/queries'; import getWorkspaces from './api/workspace/getWorkspaces'; @@ -20,6 +22,7 @@ export default function Login() { const [password, setPassword] = useState(''); const [step, setStep] = useState(1); const { t } = useTranslation(); + // const lang = router.locale ?? 'en'; const { providerAuthToken, @@ -44,6 +47,20 @@ export default function Login() { try { const userWorkspaces = await getWorkspaces(); userWorkspace = userWorkspaces[0] && userWorkspaces[0]._id; + + //user details + const userDetails = await fetchUserDetails() + //send details back to client + + const queryParams = new URLSearchParams(location.search) + if(queryParams && queryParams.get("callback_port")){ + const callback_port = queryParams.get("callback_port") + + //send post request to cli with details + const cliUrl = `http://localhost:${callback_port}` + const instance = axios.create() + const cliResp = await instance.post(cliUrl,{email:userDetails.email,privateKey:localStorage.getItem("PRIVATE_KEY"),JTWToken:getAuthToken()}) + } router.push(`/dashboard/${userWorkspace}`); } catch (error) { console.log('Error - Not logged in yet');