Skip to content

Commit dbba221

Browse files
lohxt1helloanoop
authored andcommitted
fix: proxy and certs not being used for oauth2 calls
1 parent 8908828 commit dbba221

File tree

4 files changed

+32
-40
lines changed

4 files changed

+32
-40
lines changed

packages/bruno-app/src/components/ResponsePane/Timeline/TimelineItem/Common/Time/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export const RelativeTime = ({ timestamp }) => {
2727
useEffect(() => {
2828
const interval = setInterval(() => {
2929
setRelativeTime(getRelativeTime(new Date(timestamp)));
30-
}, 60000);
30+
}, 1000);
3131

3232
return () => clearInterval(interval);
3333
}, [timestamp]);

packages/bruno-electron/src/ipc/collection.js

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,12 +31,11 @@ const { deleteCookiesForDomain, getDomainsWithCookies, addCookieForDomain, modif
3131
const EnvironmentSecretsStore = require('../store/env-secrets');
3232
const CollectionSecurityStore = require('../store/collection-security');
3333
const UiStateSnapshotStore = require('../store/ui-state-snapshot');
34-
const Oauth2Store = require('../store/oauth2');
3534
const interpolateVars = require('./network/interpolate-vars');
3635
const { getEnvVars, getTreePathFromCollectionToItem, mergeVars } = require('../utils/collection');
3736
const { getProcessEnvVars } = require('../store/process-env');
3837
const { getOAuth2TokenUsingAuthorizationCode, getOAuth2TokenUsingClientCredentials, getOAuth2TokenUsingPasswordCredentials, refreshOauth2Token } = require('../utils/oauth2');
39-
const { configureRequestWithCertsAndProxy } = require('./network');
38+
const { getCertsAndProxyConfig } = require('./network');
4039
const { parseBruFileMeta, hydrateRequestWithUuid } = require('../utils/collection');
4140

4241
const environmentSecretsStore = new EnvironmentSecretsStore();
@@ -917,29 +916,28 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection
917916
}
918917

919918
interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars);
920-
const {newRequest} = await configureRequestWithCertsAndProxy({
919+
const certsAndProxyConfig = await getCertsAndProxyConfig({
921920
collectionUid,
922921
request: requestCopy,
923922
envVars,
924923
runtimeVariables,
925924
processEnvVars,
926925
collectionPath
927926
});
928-
requestCopy = newRequest
929927
const { oauth2: { grantType }} = requestCopy || {};
930928
let credentials, url, credentialsId;
931929
switch (grantType) {
932930
case 'authorization_code':
933931
interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars);
934-
({ credentials, url, credentialsId, debugInfo } = await getOAuth2TokenUsingAuthorizationCode({ request: requestCopy, collectionUid, forceFetch: true }));
932+
({ credentials, url, credentialsId, debugInfo } = await getOAuth2TokenUsingAuthorizationCode({ request: requestCopy, collectionUid, forceFetch: true, certsAndProxyConfig }));
935933
break;
936934
case 'client_credentials':
937935
interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars);
938-
({ credentials, url, credentialsId, debugInfo } = await getOAuth2TokenUsingClientCredentials({ request: requestCopy, collectionUid, forceFetch: true }));
936+
({ credentials, url, credentialsId, debugInfo } = await getOAuth2TokenUsingClientCredentials({ request: requestCopy, collectionUid, forceFetch: true, certsAndProxyConfig }));
939937
break;
940938
case 'password':
941939
interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars);
942-
({ credentials, url, credentialsId, debugInfo } = await getOAuth2TokenUsingPasswordCredentials({ request: requestCopy, collectionUid, forceFetch: true }));
940+
({ credentials, url, credentialsId, debugInfo } = await getOAuth2TokenUsingPasswordCredentials({ request: requestCopy, collectionUid, forceFetch: true, certsAndProxyConfig }));
943941
break;
944942
}
945943
return { credentials, url, collectionUid, credentialsId, debugInfo };
@@ -1007,16 +1005,15 @@ const registerRendererEventHandlers = (mainWindow, watcher, lastOpenedCollection
10071005
const envVars = getEnvVars(environment);
10081006
const processEnvVars = getProcessEnvVars(collectionUid);
10091007
interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars);
1010-
const {newRequest} = await configureRequestWithCertsAndProxy({
1008+
const certsAndProxyConfig = await getCertsAndProxyConfig({
10111009
collectionUid,
10121010
request: requestCopy,
10131011
envVars,
10141012
runtimeVariables,
10151013
processEnvVars,
10161014
collectionPath
10171015
});
1018-
requestCopy = newRequest
1019-
let { credentials, url, credentialsId, debugInfo } = await refreshOauth2Token(requestCopy, collectionUid);
1016+
let { credentials, url, credentialsId, debugInfo } = await refreshOauth2Token({ requestCopy, collectionUid, certsAndProxyConfig });
10201017
return { credentials, url, collectionUid, credentialsId, debugInfo };
10211018
}
10221019
} catch (error) {

packages/bruno-electron/src/ipc/network/index.js

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ const { addCookieToJar, getDomainsWithCookies, getCookieStringForUrl } = require
2626
const { createFormData } = require('../../utils/form-data');
2727
const { findItemInCollectionByPathname, sortFolder, getAllRequestsInFolderRecursively, getEnvVars } = require('../../utils/collection');
2828
const { getOAuth2TokenUsingAuthorizationCode, getOAuth2TokenUsingClientCredentials, getOAuth2TokenUsingPasswordCredentials } = require('../../utils/oauth2');
29-
const { setupProxyAgents } = require('../../utils/proxy-util');
3029
const { preferencesUtil } = require('../../store/preferences');
3130
const { getProcessEnvVars } = require('../../store/process-env');
3231
const { getBrunoConfig } = require('../../store/bruno-config');
@@ -53,7 +52,7 @@ const getJsSandboxRuntime = (collection) => {
5352
return securityConfig.jsSandboxMode === 'safe' ? 'quickjs' : 'vm2';
5453
};
5554

56-
const configureRequestWithCertsAndProxy = async ({
55+
const getCertsAndProxyConfig = async ({
5756
collectionUid,
5857
request,
5958
envVars,
@@ -150,16 +149,8 @@ const configureRequestWithCertsAndProxy = async ({
150149
proxyConfig = preferencesUtil.getGlobalProxyConfig();
151150
proxyMode = get(proxyConfig, 'mode', 'off');
152151
}
153-
154-
setupProxyAgents({
155-
requestConfig: request,
156-
proxyMode,
157-
proxyConfig,
158-
httpsAgentRequestFields,
159-
interpolationOptions
160-
});
161-
162-
return {proxyMode, newRequest: request, proxyConfig, httpsAgentRequestFields, interpolationOptions};
152+
153+
return { proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions };
163154
}
164155

165156
const configureRequest = async (
@@ -175,7 +166,7 @@ const configureRequest = async (
175166
request.url = `http://${request.url}`;
176167
}
177168

178-
const {proxyMode, newRequest, proxyConfig, httpsAgentRequestFields, interpolationOptions} = await configureRequestWithCertsAndProxy({
169+
const certsAndProxyConfig = await getCertsAndProxyConfig({
179170
collectionUid,
180171
request,
181172
envVars,
@@ -184,7 +175,6 @@ const configureRequest = async (
184175
collectionPath
185176
});
186177

187-
request = newRequest
188178
let requestMaxRedirects = request.maxRedirects
189179
request.maxRedirects = 0
190180

@@ -193,6 +183,7 @@ const configureRequest = async (
193183
requestMaxRedirects = 5; // Default to 5 redirects
194184
}
195185

186+
let { proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions } = certsAndProxyConfig;
196187
let axiosInstance = makeAxiosInstance({
197188
proxyMode,
198189
proxyConfig,
@@ -213,7 +204,7 @@ const configureRequest = async (
213204
switch (grantType) {
214205
case 'authorization_code':
215206
interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars);
216-
({ credentials, url: oauth2Url, credentialsId, debugInfo } = await getOAuth2TokenUsingAuthorizationCode({ request: requestCopy, collectionUid }));
207+
({ credentials, url: oauth2Url, credentialsId, debugInfo } = await getOAuth2TokenUsingAuthorizationCode({ request: requestCopy, collectionUid, certsAndProxyConfig }));
217208
request.oauth2Credentials = { credentials, url: oauth2Url, collectionUid, credentialsId, debugInfo, folderUid: request.oauth2Credentials?.folderUid };
218209
if (tokenPlacement == 'header') {
219210
request.headers['Authorization'] = `${tokenHeaderPrefix} ${credentials?.access_token}`;
@@ -229,7 +220,7 @@ const configureRequest = async (
229220
break;
230221
case 'client_credentials':
231222
interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars);
232-
({ credentials, url: oauth2Url, credentialsId, debugInfo } = await getOAuth2TokenUsingClientCredentials({ request: requestCopy, collectionUid }));
223+
({ credentials, url: oauth2Url, credentialsId, debugInfo } = await getOAuth2TokenUsingClientCredentials({ request: requestCopy, collectionUid, certsAndProxyConfig }));
233224
request.oauth2Credentials = { credentials, url: oauth2Url, collectionUid, credentialsId, debugInfo, folderUid: request.oauth2Credentials?.folderUid };
234225
if (tokenPlacement == 'header') {
235226
request.headers['Authorization'] = `${tokenHeaderPrefix} ${credentials?.access_token}`;
@@ -245,7 +236,7 @@ const configureRequest = async (
245236
break;
246237
case 'password':
247238
interpolateVars(requestCopy, envVars, runtimeVariables, processEnvVars);
248-
({ credentials, url: oauth2Url, credentialsId, debugInfo } = await getOAuth2TokenUsingPasswordCredentials({ request: requestCopy, collectionUid }));
239+
({ credentials, url: oauth2Url, credentialsId, debugInfo } = await getOAuth2TokenUsingPasswordCredentials({ request: requestCopy, collectionUid, certsAndProxyConfig }));
249240
request.oauth2Credentials = { credentials, url: oauth2Url, collectionUid, credentialsId, debugInfo, folderUid: request.oauth2Credentials?.folderUid };
250241
if (tokenPlacement == 'header') {
251242
request.headers['Authorization'] = `${tokenHeaderPrefix} ${credentials?.access_token}`;
@@ -1320,4 +1311,4 @@ const registerNetworkIpc = (mainWindow) => {
13201311

13211312
module.exports = registerNetworkIpc;
13221313
module.exports.configureRequest = configureRequest;
1323-
module.exports.configureRequestWithCertsAndProxy = configureRequestWithCertsAndProxy;
1314+
module.exports.getCertsAndProxyConfig = getCertsAndProxyConfig;

packages/bruno-electron/src/utils/oauth2.js

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ const isTokenExpired = (credentials) => {
4444

4545
// AUTHORIZATION CODE
4646

47-
const getOAuth2TokenUsingAuthorizationCode = async ({ request, collectionUid, forceFetch = false }) => {
47+
const getOAuth2TokenUsingAuthorizationCode = async ({ request, collectionUid, forceFetch = false, certsAndProxyConfig }) => {
4848
let codeVerifier = generateCodeVerifier();
4949
let codeChallenge = generateCodeChallenge(codeVerifier);
5050

@@ -76,7 +76,7 @@ const getOAuth2TokenUsingAuthorizationCode = async ({ request, collectionUid, fo
7676
if (autoRefreshToken && storedCredentials.refresh_token) {
7777
// Try to refresh token
7878
try {
79-
const refreshedCredentialsData = await refreshOauth2Token(requestCopy, collectionUid);
79+
const refreshedCredentialsData = await refreshOauth2Token({ requestCopy, collectionUid, certsAndProxyConfig });
8080
return { collectionUid, url, credentials: refreshedCredentialsData.credentials, credentialsId };
8181
} catch (error) {
8282
// Refresh failed
@@ -149,7 +149,8 @@ const getOAuth2TokenUsingAuthorizationCode = async ({ request, collectionUid, fo
149149
let axiosResponseInfo = null;
150150

151151
try {
152-
const axiosInstance = makeAxiosInstance();
152+
const { proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions } = certsAndProxyConfig;
153+
const axiosInstance = makeAxiosInstance({ proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions });
153154
// Interceptor to capture request data
154155
axiosInstance.interceptors.request.use((config) => {
155156
const requestData = typeof config?.data === 'string' ? config?.data : safeStringifyJSON(config?.data);
@@ -282,7 +283,7 @@ const getOAuth2AuthorizationCode = (request, codeChallenge, collectionUid) => {
282283

283284
// CLIENT CREDENTIALS
284285

285-
const getOAuth2TokenUsingClientCredentials = async ({ request, collectionUid, forceFetch = false }) => {
286+
const getOAuth2TokenUsingClientCredentials = async ({ request, collectionUid, forceFetch = false, certsAndProxyConfig }) => {
286287
let requestCopy = cloneDeep(request);
287288
const oAuth = get(requestCopy, 'oauth2', {});
288289
const {
@@ -310,7 +311,7 @@ const getOAuth2TokenUsingClientCredentials = async ({ request, collectionUid, fo
310311
if (autoRefreshToken && storedCredentials.refresh_token) {
311312
// Try to refresh token
312313
try {
313-
const refreshedCredentialsData = await refreshOauth2Token(requestCopy, collectionUid);
314+
const refreshedCredentialsData = await refreshOauth2Token({ requestCopy, collectionUid, certsAndProxyConfig });
314315
return { collectionUid, url, credentials: refreshedCredentialsData.credentials, credentialsId };
315316
} catch (error) {
316317
clearOauth2Credentials({ collectionUid, url, credentialsId });
@@ -375,7 +376,8 @@ const getOAuth2TokenUsingClientCredentials = async ({ request, collectionUid, fo
375376
let debugInfo = { data: [] };
376377

377378
try {
378-
const axiosInstance = makeAxiosInstance();
379+
const { proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions } = certsAndProxyConfig;
380+
const axiosInstance = makeAxiosInstance({ proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions });
379381
axiosInstance.interceptors.request.use((config) => {
380382
const requestData = typeof config?.data === 'string' ? config?.data : safeStringifyJSON(config?.data);
381383
axiosRequestInfo = {
@@ -465,7 +467,7 @@ const getOAuth2TokenUsingClientCredentials = async ({ request, collectionUid, fo
465467

466468
// PASSWORD CREDENTIALS
467469

468-
const getOAuth2TokenUsingPasswordCredentials = async ({ request, collectionUid, forceFetch = false }) => {
470+
const getOAuth2TokenUsingPasswordCredentials = async ({ request, collectionUid, forceFetch = false, certsAndProxyConfig }) => {
469471
let requestCopy = cloneDeep(request);
470472
const oAuth = get(requestCopy, 'oauth2', {});
471473
const {
@@ -494,7 +496,7 @@ const getOAuth2TokenUsingPasswordCredentials = async ({ request, collectionUid,
494496
if (autoRefreshToken && storedCredentials.refresh_token) {
495497
// Try to refresh token
496498
try {
497-
const refreshedCredentialsData = await refreshOauth2Token(requestCopy, collectionUid);
499+
const refreshedCredentialsData = await refreshOauth2Token({ requestCopy, collectionUid, certsAndProxyConfig });
498500
return { collectionUid, url, credentials: refreshedCredentialsData.credentials, credentialsId };
499501
} catch (error) {
500502
clearOauth2Credentials({ collectionUid, url, credentialsId });
@@ -562,7 +564,8 @@ const getOAuth2TokenUsingPasswordCredentials = async ({ request, collectionUid,
562564
let debugInfo = { data: [] };
563565

564566
try {
565-
const axiosInstance = makeAxiosInstance();
567+
const { proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions } = certsAndProxyConfig;
568+
const axiosInstance = makeAxiosInstance({ proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions });
566569
axiosInstance.interceptors.request.use((config) => {
567570
const requestData = typeof config?.data === 'string' ? config?.data : safeStringifyJSON(config?.data);
568571
axiosRequestInfo = {
@@ -649,7 +652,7 @@ const getOAuth2TokenUsingPasswordCredentials = async ({ request, collectionUid,
649652
}
650653
};
651654

652-
const refreshOauth2Token = async (requestCopy, collectionUid) => {
655+
const refreshOauth2Token = async ({ requestCopy, collectionUid, certsAndProxyConfig }) => {
653656
const oAuth = get(requestCopy, 'oauth2', {});
654657
const { clientId, clientSecret, credentialsId } = oAuth;
655658
const url = oAuth.refreshTokenUrl ? oAuth.refreshTokenUrl : oAuth.accessTokenUrl;
@@ -680,7 +683,8 @@ const refreshOauth2Token = async (requestCopy, collectionUid) => {
680683
let axiosResponseInfo = null;
681684
let debugInfo = { data: [] };
682685

683-
const axiosInstance = makeAxiosInstance();
686+
const { proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions } = certsAndProxyConfig;
687+
const axiosInstance = makeAxiosInstance({ proxyMode, proxyConfig, httpsAgentRequestFields, interpolationOptions });
684688
axiosInstance.interceptors.request.use((config) => {
685689
const requestData = typeof config?.data === 'string' ? config?.data : safeStringifyJSON(config?.data);
686690
axiosRequestInfo = {

0 commit comments

Comments
 (0)