fix: terminal text alignment

This commit is contained in:
quinton11
2023-06-19 09:32:55 +00:00
parent 5a4a36a06a
commit 7e8ba077ae
5 changed files with 35 additions and 10 deletions
+13 -5
View File
@@ -528,7 +528,8 @@ func browserCliLogin() (models.UserCredentials, error) {
timeout := time.After(time.Second * time.Duration(SERVER_TIMEOUT)) timeout := time.After(time.Second * time.Duration(SERVER_TIMEOUT))
quit := make(chan bool) quit := make(chan bool)
// //terminal state
var oldState term.State
//create handler //create handler
c := cors.New(cors.Options{ c := cors.New(cors.Options{
@@ -541,21 +542,24 @@ func browserCliLogin() (models.UserCredentials, error) {
corsHandler := c.Handler(browserLoginHandler(success, failure)) corsHandler := c.Handler(browserLoginHandler(success, failure))
log.Debug().Msgf("Callback server listening on port %d", callbackPort) log.Debug().Msgf("Callback server listening on port %d", callbackPort)
go quitBrowserLogin(quit) go quitBrowserLogin(quit, &oldState)
go http.Serve(listener, corsHandler) go http.Serve(listener, corsHandler)
for { for {
select { select {
case loginResponse := <-success: case loginResponse := <-success:
err = closeListener(&listener) err = closeListener(&listener)
restoreTerminal(&oldState)
return loginResponse, nil return loginResponse, nil
case err = <-failure: case err = <-failure:
err = closeListener(&listener) err = closeListener(&listener)
restoreTerminal(&oldState)
return models.UserCredentials{}, err return models.UserCredentials{}, err
case _ = <-timeout: case _ = <-timeout:
err = closeListener(&listener) err = closeListener(&listener)
restoreTerminal(&oldState)
return models.UserCredentials{}, errors.New("server timeout") return models.UserCredentials{}, errors.New("server timeout")
case _ = <-quit: 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 // listens to 'q' input on terminal and
// sends 'true' to 'quit' channel // 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())) oldState, err := term.MakeRaw(int(os.Stdin.Fd()))
if err != nil { if err != nil {
fmt.Println(err)
return return
} }
defer term.Restore(int(os.Stdin.Fd()), oldState) *oState = *oldState
defer restoreTerminal(oldState)
b := make([]byte, 1) b := make([]byte, 1)
for { for {
_, _ = os.Stdin.Read(b) _, _ = os.Stdin.Read(b)
@@ -39,7 +39,7 @@ export default function InitialLoginStep({
setIsLoading(true); setIsLoading(true);
const queryParams = new URLSearchParams(location.search) const queryParams = new URLSearchParams(location.search)
if (queryParams) { if (queryParams && queryParams.get("callback_port")) {
const callbackPort = queryParams.get("callback_port") const callbackPort = queryParams.get("callback_port")
//attemptCliLogin //attemptCliLogin
+2 -2
View File
@@ -79,7 +79,7 @@ export default function MFAStep({
setIsLoading(true); setIsLoading(true);
const queryParams = new URLSearchParams(location.search) const queryParams = new URLSearchParams(location.search)
if (queryParams){ if (queryParams && queryParams.get("callback_port")){
const callbackPort = queryParams.get("callback_port") const callbackPort = queryParams.get("callback_port")
//attemptCliLogin //attemptCliLogin
@@ -94,7 +94,7 @@ export default function MFAStep({
// case: login was successful // case: login was successful
const cliUrl = `http://localhost:${callbackPort}` const cliUrl = `http://localhost:${callbackPort}`
//send request to server endpoint //send request to server endpoint
const instance = axios.create() const instance = axios.create()
const cliResp = await instance.post(cliUrl,{...isCliLoginSuccessful.loginResponse,email}) const cliResp = await instance.post(cliUrl,{...isCliLoginSuccessful.loginResponse,email})
+1 -1
View File
@@ -24,7 +24,7 @@ const userKeys = {
getOrgUsers: (orgId: string) => [{ orgId }, 'user'] getOrgUsers: (orgId: string) => [{ orgId }, 'user']
}; };
const fetchUserDetails = async () => { export const fetchUserDetails = async () => {
const { data } = await apiRequest.get<{ user: User }>('/api/v1/user'); const { data } = await apiRequest.get<{ user: User }>('/api/v1/user');
return data.user; return data.user;
+18 -1
View File
@@ -4,13 +4,15 @@ import Head from 'next/head';
import Image from 'next/image'; import Image from 'next/image';
import Link from 'next/link'; import Link from 'next/link';
import { useRouter } from 'next/router'; import { useRouter } from 'next/router';
import axios from "axios"
// import ListBox from '@app/components/basic/Listbox'; // import ListBox from '@app/components/basic/Listbox';
import InitialLoginStep from '@app/components/login/InitialLoginStep'; import InitialLoginStep from '@app/components/login/InitialLoginStep';
import MFAStep from '@app/components/login/MFAStep'; import MFAStep from '@app/components/login/MFAStep';
import PasswordInputStep from '@app/components/login/PasswordInputStep'; import PasswordInputStep from '@app/components/login/PasswordInputStep';
import { useProviderAuth } from '@app/hooks/useProviderAuth'; 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'; import getWorkspaces from './api/workspace/getWorkspaces';
@@ -20,6 +22,7 @@ export default function Login() {
const [password, setPassword] = useState(''); const [password, setPassword] = useState('');
const [step, setStep] = useState(1); const [step, setStep] = useState(1);
const { t } = useTranslation(); const { t } = useTranslation();
// const lang = router.locale ?? 'en'; // const lang = router.locale ?? 'en';
const { const {
providerAuthToken, providerAuthToken,
@@ -44,6 +47,20 @@ export default function Login() {
try { try {
const userWorkspaces = await getWorkspaces(); const userWorkspaces = await getWorkspaces();
userWorkspace = userWorkspaces[0] && userWorkspaces[0]._id; 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}`); router.push(`/dashboard/${userWorkspace}`);
} catch (error) { } catch (error) {
console.log('Error - Not logged in yet'); console.log('Error - Not logged in yet');