diff --git a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/index.js b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/index.js index fc274f47d..9c32365c6 100644 --- a/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/index.js +++ b/packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode/index.js @@ -217,13 +217,19 @@ const OAuth2AuthorizationCode = ({ save, item = {}, request, handleRun, updateAu {inputsConfig.map((input) => { - const { key, label, isSecret } = input; + let { key, label, isSecret } = input; + let value = oAuth[key] || ''; + let shouldAuthorizeInDefaultBrowser = key == 'callbackUrl' && Boolean(authorizeInDefaultBrowser); + if (shouldAuthorizeInDefaultBrowser) { + value = 'http://localhost:9876/callback' + } + console.log("input", shouldAuthorizeInDefaultBrowser); return (
-
+
handleChange(key, val)} @@ -231,6 +237,7 @@ const OAuth2AuthorizationCode = ({ save, item = {}, request, handleRun, updateAu collection={collection} item={item} isSecret={isSecret} + readOnly={shouldAuthorizeInDefaultBrowser} />
diff --git a/packages/bruno-app/src/components/SingleLineEditor/StyledWrapper.js b/packages/bruno-app/src/components/SingleLineEditor/StyledWrapper.js index 592a75b28..fd6da2825 100644 --- a/packages/bruno-app/src/components/SingleLineEditor/StyledWrapper.js +++ b/packages/bruno-app/src/components/SingleLineEditor/StyledWrapper.js @@ -5,6 +5,10 @@ const StyledWrapper = styled.div` height: 30px; overflow-y: hidden; overflow-x: hidden; + + &.disabled { + opacity: 0.5; + } .CodeMirror { background: transparent; diff --git a/packages/bruno-app/src/components/SingleLineEditor/index.js b/packages/bruno-app/src/components/SingleLineEditor/index.js index 16413bdf3..5f733380d 100644 --- a/packages/bruno-app/src/components/SingleLineEditor/index.js +++ b/packages/bruno-app/src/components/SingleLineEditor/index.js @@ -53,6 +53,7 @@ class SingleLineEditor extends Component { }, scrollbarStyle: null, tabindex: 0, + readOnly: this.props.readOnly, extraKeys: { Enter: runHandler, 'Ctrl-Enter': runHandler, @@ -127,6 +128,9 @@ class SingleLineEditor extends Component { if (this.props.theme !== prevProps.theme && this.editor) { this.editor.setOption('theme', this.props.theme === 'dark' ? 'monokai' : 'default'); } + if (this.props.readOnly !== prevProps.readOnly && this.editor) { + this.editor.setOption('readOnly', this.props.readOnly); + } if (this.props.value !== prevProps.value && this.props.value !== this.cachedValue && this.editor) { this.cachedValue = String(this.props.value); this.editor.setValue(String(this.props.value) || ''); @@ -175,7 +179,7 @@ class SingleLineEditor extends Component { render() { return (
- + {this.secretEye(this.props.isSecret)}
); diff --git a/packages/bruno-electron/src/ipc/network/interpolate-vars.js b/packages/bruno-electron/src/ipc/network/interpolate-vars.js index 381bac733..618d98506 100644 --- a/packages/bruno-electron/src/ipc/network/interpolate-vars.js +++ b/packages/bruno-electron/src/ipc/network/interpolate-vars.js @@ -197,7 +197,7 @@ const interpolateVars = (request, envVariables = {}, runtimeVariables = {}, proc request.oauth2.autoFetchToken = _interpolate(request.oauth2.autoFetchToken); request.oauth2.autoRefreshToken = _interpolate(request.oauth2.autoRefreshToken); request.oauth2.autoRefreshToken = _interpolate(request.oauth2.autoRefreshToken); - request.oauth2.authorizeInDefaultBrowser = _interpolate(request.oauth2.authorizeInDefaultBrowser); + request.oauth2.authorizeInDefaultBrowser = _interpolate(request.oauth2.authorizeInDefaultBrowser) || false; break; case 'client_credentials': request.oauth2.accessTokenUrl = _interpolate(request.oauth2.accessTokenUrl) || ''; diff --git a/packages/bruno-electron/src/ipc/network/prepare-request.js b/packages/bruno-electron/src/ipc/network/prepare-request.js index ef7ed8243..b130e75a4 100644 --- a/packages/bruno-electron/src/ipc/network/prepare-request.js +++ b/packages/bruno-electron/src/ipc/network/prepare-request.js @@ -207,7 +207,8 @@ const setAuthHeaders = (axiosRequest, request, collectionRoot) => { tokenHeaderPrefix: get(request, 'auth.oauth2.tokenHeaderPrefix'), tokenQueryKey: get(request, 'auth.oauth2.tokenQueryKey'), autoFetchToken: get(request, 'auth.oauth2.autoFetchToken'), - autoRefreshToken: get(request, 'auth.oauth2.autoRefreshToken') + autoRefreshToken: get(request, 'auth.oauth2.autoRefreshToken'), + authorizeInDefaultBrowser: get(request, 'auth.oauth2.authorizeInDefaultBrowser') }; break; case 'client_credentials': diff --git a/packages/bruno-electron/src/utils/oauth2-server.js b/packages/bruno-electron/src/utils/oauth2-server.js index d809808cf..1e41aaf89 100644 --- a/packages/bruno-electron/src/utils/oauth2-server.js +++ b/packages/bruno-electron/src/utils/oauth2-server.js @@ -1,9 +1,9 @@ const express = require("express"); const { shell } = require("electron"); - -const BRUNO_OAUTH2_SERVER_PORT = 9876; let { exec } = require('child_process'); const portToPid = require("./pid-port"); +const BRUNO_OAUTH2_SERVER_PORT = 9876; +const BRUNO_OAUTH2_SERVER_CALLBACK_URL = `http://localhost:9876/callback`; let server; @@ -31,9 +31,10 @@ const freePort = async () => { } async function getOauth2AuthorizationCodeUsingDefaultBrowser({ authorizeUrl, port = BRUNO_OAUTH2_SERVER_PORT }) { - await server?.close?.(); - await freePort(); - const redirectUri = `http://localhost:${port}/callback`; + await server?.close?.(); + // test and refactor before uncommenting + // await freePort(); + const redirectUri = BRUNO_OAUTH2_SERVER_CALLBACK_URL; const parsedAuthorizeUrl = new URL(authorizeUrl); parsedAuthorizeUrl?.searchParams.set('redirect_uri', redirectUri); const finalAuthorizeUrl = parsedAuthorizeUrl.href; @@ -65,4 +66,4 @@ async function getOauth2AuthorizationCodeUsingDefaultBrowser({ authorizeUrl, por }); } -module.exports = { getOauth2AuthorizationCodeUsingDefaultBrowser }; +module.exports = { getOauth2AuthorizationCodeUsingDefaultBrowser, BRUNO_OAUTH2_SERVER_CALLBACK_URL }; diff --git a/packages/bruno-electron/src/utils/oauth2.js b/packages/bruno-electron/src/utils/oauth2.js index bdc5473ad..9ae4e7a46 100644 --- a/packages/bruno-electron/src/utils/oauth2.js +++ b/packages/bruno-electron/src/utils/oauth2.js @@ -4,7 +4,7 @@ const { authorizeUserInWindow } = require('../ipc/network/authorize-user-in-wind const Oauth2Store = require('../store/oauth2'); const { makeAxiosInstance } = require('../ipc/network/axios-instance'); const { safeParseJSON, safeStringifyJSON, uuid } = require('./common'); -const { getOauth2AuthorizationCodeUsingDefaultBrowser } = require('./oauth2-server'); +const { getOauth2AuthorizationCodeUsingDefaultBrowser, BRUNO_OAUTH2_SERVER_CALLBACK_URL } = require('./oauth2-server'); const oauth2Store = new Oauth2Store(); @@ -51,6 +51,7 @@ const getOAuth2TokenUsingAuthorizationCode = async ({ request, collectionUid, fo credentialsId, autoRefreshToken, autoFetchToken, + authorizeInDefaultBrowser } = oAuth; const url = requestCopy?.oauth2?.accessTokenUrl; if (!forceFetch) { @@ -118,7 +119,7 @@ const getOAuth2TokenUsingAuthorizationCode = async ({ request, collectionUid, fo const data = { grant_type: 'authorization_code', code: authorizationCode, - redirect_uri: callbackUrl, + redirect_uri: authorizeInDefaultBrowser ? BRUNO_OAUTH2_SERVER_CALLBACK_URL : callbackUrl, client_id: clientId, }; if (clientSecret && credentialsPlacement !== "basic_auth_header") {