Skip to content

Commit

Permalink
Include resolved oauth2 authorization details in req object to be usa…
Browse files Browse the repository at this point in the history
…ble by scripts

usebruno#1999
usebruno#1003
  • Loading branch information
pietrygamat committed Apr 14, 2024
1 parent 857c459 commit 84d5b90
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 33 deletions.
7 changes: 6 additions & 1 deletion packages/bruno-electron/src/ipc/network/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ const {
getOAuth2DataAuthorizationCode,
getOAuth2DataClientCredentials,
getOAuth2DataPasswordCredentials,
getOAuth2DataImplicit
getOAuth2DataImplicit,
getCachedCredentials
} = require('./oauth2-helper');
const Oauth2Store = require('../../store/oauth2');

Expand Down Expand Up @@ -208,24 +209,28 @@ const configureRequest = async (
case 'authorization_code': {
interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars);
const { oauth2Data } = await getOAuth2DataAuthorizationCode(requestCopy, collectionUid);
request.credentials = oauth2Data;
request.headers['Authorization'] = `Bearer ${oauth2Data.access_token}`;
break;
}
case 'client_credentials': {
interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars);
const { oauth2Data } = await getOAuth2DataClientCredentials(requestCopy, collectionUid);
request.credentials = oauth2Data;
request.headers['Authorization'] = `Bearer ${oauth2Data.access_token}`;
break;
}
case 'password': {
interpolateVars(requestCopy, envVars, collectionVariables, processEnvVars);
const { oauth2Data } = await getOAuth2DataPasswordCredentials(requestCopy, collectionUid);
request.credentials = oauth2Data;
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.headers['Authorization'] = `Bearer ${oauth2Data.access_token}`;
break;
}
Expand Down
38 changes: 6 additions & 32 deletions packages/bruno-electron/src/ipc/network/oauth2-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,10 @@ const generateCodeChallenge = (codeVerifier) => {
return base64Hash.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
};

const checkPersistedOauth2Data = (collectionUid) => {
const getCachedCredentials = (collectionUid) => {
const collectionOauthStore = oauth2Store.getOauth2DataOfCollection(collectionUid);
const lastOauth2Data = collectionOauthStore.oauth2;
const lastAccessToken = collectionOauthStore.oauth2?.access_token;
return { lastOauth2Data, lastAccessToken };
return { lastOauth2Data };
};

const persistOauth2Data = (oauth2Data, collectionUid) => {
Expand All @@ -33,12 +32,6 @@ const persistOauth2Data = (oauth2Data, collectionUid) => {
// AUTHORIZATION CODE

const getOAuth2DataAuthorizationCode = async (request, collectionUid) => {
const { lastOauth2Data, lastAccessToken } = checkPersistedOauth2Data(collectionUid);
if (lastAccessToken) {
console.log('Reusing Stored access token');
return { oauth2Data: lastOauth2Data };
}

let codeVerifier = generateCodeVerifier();
let codeChallenge = generateCodeChallenge(codeVerifier);

Expand Down Expand Up @@ -104,14 +97,7 @@ const getOAuth2AuthorizationCode = (request, codeChallenge, collectionUid) => {
// CLIENT CREDENTIALS

const getOAuth2DataClientCredentials = async (request, collectionUid) => {
const { lastOauth2Data, lastAccessToken } = checkPersistedOauth2Data(collectionUid);
if (lastAccessToken) {
console.log('Reusing Stored access token');
return { oauth2Data: lastOauth2Data };
}

let requestCopy = cloneDeep(request);
const oAuth = get(requestCopy, 'oauth2', {});
const oAuth = get(request, 'oauth2', {});
const { clientId, clientSecret, scope } = oAuth;
const data = {
grant_type: 'client_credentials',
Expand All @@ -122,7 +108,7 @@ const getOAuth2DataClientCredentials = async (request, collectionUid) => {
request.method = 'POST';
request.headers['content-type'] = 'application/x-www-form-urlencoded';
request.data = data;
request.url = requestCopy?.oauth2?.accessTokenUrl;
request.url = request?.oauth2?.accessTokenUrl;

const axiosInstance = makeAxiosInstance();
let response = await axiosInstance(request);
Expand All @@ -134,12 +120,6 @@ const getOAuth2DataClientCredentials = async (request, collectionUid) => {
// PASSWORD CREDENTIALS

const getOAuth2DataPasswordCredentials = async (request, collectionUid) => {
const { lastOauth2Data, lastAccessToken } = checkPersistedOauth2Data(collectionUid);
if (lastAccessToken) {
console.log('Reusing Stored access token');
return { oauth2Data: lastOauth2Data };
}

const oAuth = get(request, 'oauth2', {});
const { username, password, clientId, clientSecret, scope } = oAuth;
const data = {
Expand All @@ -165,12 +145,6 @@ const getOAuth2DataPasswordCredentials = async (request, collectionUid) => {
// IMPLICIT

const getOAuth2DataImplicit = async (request, collectionUid) => {
const { lastOauth2Data, lastAccessToken } = checkPersistedOauth2Data(collectionUid);
if (lastAccessToken) {
console.log('Reusing Stored access token');
return { oauth2Data: lastOauth2Data };
}

return new Promise(async (resolve, reject) => {
const { oauth2 } = request;
const { callbackUrl, authorizationUrl, clientId, scope } = oauth2;
Expand All @@ -190,7 +164,6 @@ const getOAuth2DataImplicit = async (request, collectionUid) => {
});
resolve({ oauth2Data });
persistOauth2Data(oauth2Data, collectionUid);
request.auth.oauth2.oauth2Data = oauth2Data;
} catch (err) {
reject(err);
}
Expand All @@ -201,5 +174,6 @@ module.exports = {
getOAuth2DataAuthorizationCode,
getOAuth2DataClientCredentials,
getOAuth2DataPasswordCredentials,
getOAuth2DataImplicit
getOAuth2DataImplicit,
getCachedCredentials
};
1 change: 1 addition & 0 deletions packages/bruno-js/src/bruno-request.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ class BrunoRequest {
this.headers = req.headers;
this.body = req.data;
this.timeout = req.timeout;
this.credentials = req.credentials;
}

getUrl() {
Expand Down

0 comments on commit 84d5b90

Please sign in to comment.