Skip to content

Commit

Permalink
Do not make axios request when executing collection level Get Access …
Browse files Browse the repository at this point in the history
…Token action

The actual the authorization request is part of request preparation

usebruno#1999
usebruno#1003
  • Loading branch information
pietrygamat committed Apr 14, 2024
1 parent 6043b9a commit 6511ac6
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 78 deletions.
32 changes: 15 additions & 17 deletions packages/bruno-electron/src/ipc/network/index.js
Expand Up @@ -13,7 +13,6 @@ const { ipcMain } = require('electron');
const { isUndefined, isNull, each, get, compact, cloneDeep } = require('lodash');
const { VarsRuntime, AssertRuntime, ScriptRuntime, TestRuntime } = require('@usebruno/js');
const prepareRequest = require('./prepare-request');
const prepareCollectionRequest = require('./prepare-collection-request');
const prepareGqlIntrospectionRequest = require('./prepare-gql-introspection-request');
const { cancelTokens, saveCancelToken, deleteCancelToken } = require('../../utils/cancel-token');
const { uuid } = require('../../utils/common');
Expand Down Expand Up @@ -208,29 +207,35 @@ const configureRequest = async (
switch (request?.oauth2?.grantType) {
case 'authorization_code': {
interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars);
const { oauth2Data } = await getOAuth2DataAuthorizationCode(requestCopy, collectionUid);
const { oauth2Data, response } = await getOAuth2DataAuthorizationCode(requestCopy, collectionUid);
request.credentials = oauth2Data;
request.authRequestResponse = response;
request.headers['Authorization'] = `Bearer ${oauth2Data.access_token}`;
break;
}
case 'client_credentials': {
interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars);
const { oauth2Data } = await getOAuth2DataClientCredentials(requestCopy, collectionUid);
const { oauth2Data, response } = await getOAuth2DataClientCredentials(requestCopy, collectionUid);
request.credentials = oauth2Data;
request.authRequestResponse = response;
request.headers['Authorization'] = `Bearer ${oauth2Data.access_token}`;
break;
}
case 'password': {
interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars);
const { oauth2Data } = await getOAuth2DataPasswordCredentials(requestCopy, collectionUid);
const { oauth2Data, response } = await getOAuth2DataPasswordCredentials(requestCopy, collectionUid);
request.credentials = oauth2Data;
request.authRequestResponse = response;
request.headers['Authorization'] = `Bearer ${oauth2Data.access_token}`;
break;
}
case 'implicit': {
interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars);
const { oauth2Data } = await getOAuth2DataImplicit(requestCopy, collectionUid);
request.credentials = oauth2Data;
request.authRequestResponse = {
/*none*/
};
request.headers['Authorization'] = `Bearer ${oauth2Data.access_token}`;
break;
}
Expand Down Expand Up @@ -638,7 +643,8 @@ const registerNetworkIpc = (mainWindow) => {

const collectionRoot = get(collection, 'root', {});
const _request = collectionRoot?.request;
const request = prepareCollectionRequest(_request, collectionRoot, collectionPath);
const request = prepareRequest(_request, collectionRoot, collectionPath);

const envVars = getEnvVars(environment);
const processEnvVars = getProcessEnvVars(collectionUid);
const brunoConfig = getBrunoConfig(collectionUid);
Expand All @@ -657,7 +663,7 @@ const registerNetworkIpc = (mainWindow) => {
);

interpolateVars(request, envVars, collection.collectionVariables, processEnvVars);
const axiosInstance = await configureRequest(
await configureRequest(
collection.uid,
request,
envVars,
Expand All @@ -666,16 +672,7 @@ const registerNetworkIpc = (mainWindow) => {
collectionPath
);

try {
response = await axiosInstance(request);
} catch (error) {
if (error?.response) {
response = error.response;
} else {
return Promise.reject(error);
}
}

const response = request.authRequestResponse;
const { data } = parseDataFromResponse(response);
response.data = data;

Expand All @@ -696,7 +693,8 @@ const registerNetworkIpc = (mainWindow) => {
status: response.status,
statusText: response.statusText,
headers: response.headers,
data: response.data
data: response.data,
credentials: request.credentials
};
} catch (error) {
return Promise.reject(error);
Expand Down
7 changes: 3 additions & 4 deletions packages/bruno-electron/src/ipc/network/oauth2-helper.js
Expand Up @@ -60,7 +60,7 @@ const getOAuth2DataAuthorizationCode = async (request, collectionUid) => {
const response = await axiosInstance(request);
const oauth2Data = JSON.parse(response.data);
persistOauth2Data(oauth2Data, collectionUid);
return { oauth2Data };
return { oauth2Data, response };
};

const getOAuth2AuthorizationCode = (request, codeChallenge, collectionUid) => {
Expand All @@ -81,7 +81,6 @@ const getOAuth2AuthorizationCode = (request, codeChallenge, collectionUid) => {
}
const authorizationUrlWithQueryParams = authorizationUrl + oauth2QueryParams;
try {
const oauth2Store = new Oauth2Store();
const { authorizationCode } = await authorizeUserInWindow({
authorizeUrl: authorizationUrlWithQueryParams,
callbackUrl,
Expand Down Expand Up @@ -114,7 +113,7 @@ const getOAuth2DataClientCredentials = async (request, collectionUid) => {
let response = await axiosInstance(request);
let oauth2Data = JSON.parse(response.data);
persistOauth2Data(oauth2Data, collectionUid);
return { oauth2Data };
return { oauth2Data, response };
};

// PASSWORD CREDENTIALS
Expand All @@ -139,7 +138,7 @@ const getOAuth2DataPasswordCredentials = async (request, collectionUid) => {
let response = await axiosInstance(request);
let oauth2Data = JSON.parse(response.data);
persistOauth2Data(oauth2Data, collectionUid);
return { oauth2Data };
return { oauth2Data, response };
};

// IMPLICIT
Expand Down

This file was deleted.

16 changes: 8 additions & 8 deletions packages/bruno-electron/src/ipc/network/prepare-request.js
Expand Up @@ -177,7 +177,7 @@ const prepareRequest = (request, collectionRoot, collectionPath) => {
});

let axiosRequest = {
mode: request.body.mode,
mode: request?.body?.mode,
method: request.method,
url,
headers,
Expand All @@ -186,7 +186,7 @@ const prepareRequest = (request, collectionRoot, collectionPath) => {

axiosRequest = setAuthHeaders(axiosRequest, request, collectionRoot);

if (request.body.mode === 'json') {
if (request.body?.mode === 'json') {
if (!contentTypeDefined) {
axiosRequest.headers['content-type'] = 'application/json';
}
Expand All @@ -197,43 +197,43 @@ const prepareRequest = (request, collectionRoot, collectionPath) => {
}
}

if (request.body.mode === 'text') {
if (request.body?.mode === 'text') {
if (!contentTypeDefined) {
axiosRequest.headers['content-type'] = 'text/plain';
}
axiosRequest.data = request.body.text;
}

if (request.body.mode === 'xml') {
if (request.body?.mode === 'xml') {
if (!contentTypeDefined) {
axiosRequest.headers['content-type'] = 'text/xml';
}
axiosRequest.data = request.body.xml;
}

if (request.body.mode === 'sparql') {
if (request.body?.mode === 'sparql') {
if (!contentTypeDefined) {
axiosRequest.headers['content-type'] = 'application/sparql-query';
}
axiosRequest.data = request.body.sparql;
}

if (request.body.mode === 'formUrlEncoded') {
if (request.body?.mode === 'formUrlEncoded') {
axiosRequest.headers['content-type'] = 'application/x-www-form-urlencoded';
const params = {};
const enabledParams = filter(request.body.formUrlEncoded, (p) => p.enabled);
each(enabledParams, (p) => (params[p.name] = p.value));
axiosRequest.data = params;
}

if (request.body.mode === 'multipartForm') {
if (request.body?.mode === 'multipartForm') {
const enabledParams = filter(request.body.multipartForm, (p) => p.enabled);
const form = parseFormData(enabledParams, collectionPath);
extend(axiosRequest.headers, form.getHeaders());
axiosRequest.data = form;
}

if (request.body.mode === 'graphql') {
if (request.body?.mode === 'graphql') {
const graphqlQuery = {
query: get(request, 'body.graphql.query'),
// https://github.com/usebruno/bruno/issues/884 - we must only parse the variables after the variable interpolation
Expand Down

0 comments on commit 6511ac6

Please sign in to comment.