From 8d8949630469c2ec979ffac20c0e41d2c0aff564 Mon Sep 17 00:00:00 2001 From: Anoop M D Date: Thu, 5 Oct 2023 02:32:24 +0530 Subject: [PATCH] fix(#329): fixed basic auth header issue + added cli support for basic and bearer auth --- packages/bruno-cli/package.json | 2 +- packages/bruno-cli/src/runner/interpolate-vars.js | 12 ++++++++++++ packages/bruno-cli/src/runner/prepare-request.js | 14 ++++++++++++++ packages/bruno-cli/src/utils/bru.js | 2 ++ packages/bruno-electron/package.json | 2 +- .../src/ipc/network/interpolate-vars.js | 12 ++++++++++++ packages/bruno-lang/package.json | 4 ++-- 7 files changed, 44 insertions(+), 4 deletions(-) diff --git a/packages/bruno-cli/package.json b/packages/bruno-cli/package.json index 91ce4a19c..d344d80de 100644 --- a/packages/bruno-cli/package.json +++ b/packages/bruno-cli/package.json @@ -22,7 +22,7 @@ ], "dependencies": { "@usebruno/js": "0.6.0", - "@usebruno/lang": "0.4.0", + "@usebruno/lang": "0.5.0", "axios": "^1.5.1", "chai": "^4.3.7", "chalk": "^3.0.0", diff --git a/packages/bruno-cli/src/runner/interpolate-vars.js b/packages/bruno-cli/src/runner/interpolate-vars.js index f4072dbe5..b92616478 100644 --- a/packages/bruno-cli/src/runner/interpolate-vars.js +++ b/packages/bruno-cli/src/runner/interpolate-vars.js @@ -109,6 +109,18 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces } } + // todo: we have things happening in two places w.r.t basic auth + // need to refactor this in the future + // the request.auth (basic auth) object gets set inside the prepare-request.js file + if (request.auth) { + const username = interpolate(request.auth.username) || ''; + const password = interpolate(request.auth.password) || ''; + + // use auth header based approach and delete the request.auth object + request.headers['authorization'] = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`; + delete request.auth; + } + return request; }; diff --git a/packages/bruno-cli/src/runner/prepare-request.js b/packages/bruno-cli/src/runner/prepare-request.js index 1cab8a1c1..e766d08ea 100644 --- a/packages/bruno-cli/src/runner/prepare-request.js +++ b/packages/bruno-cli/src/runner/prepare-request.js @@ -18,6 +18,20 @@ const prepareRequest = (request) => { headers: headers }; + // Authentication + if (request.auth) { + if (request.auth.mode === 'basic') { + axiosRequest.auth = { + username: get(request, 'auth.basic.username'), + password: get(request, 'auth.basic.password') + }; + } + + if (request.auth.mode === 'bearer') { + axiosRequest.headers['authorization'] = `Bearer ${get(request, 'auth.bearer.token')}`; + } + } + request.body = request.body || {}; if (request.body.mode === 'json') { diff --git a/packages/bruno-cli/src/utils/bru.js b/packages/bruno-cli/src/utils/bru.js index 1ba6f0166..684106399 100644 --- a/packages/bruno-cli/src/utils/bru.js +++ b/packages/bruno-cli/src/utils/bru.js @@ -38,6 +38,7 @@ const bruToJson = (bru) => { request: { method: _.upperCase(_.get(json, 'http.method')), url: _.get(json, 'http.url'), + auth: _.get(json, 'auth', {}), params: _.get(json, 'query', []), headers: _.get(json, 'headers', []), body: _.get(json, 'body', {}), @@ -49,6 +50,7 @@ const bruToJson = (bru) => { }; transformedJson.request.body.mode = _.get(json, 'http.body', 'none'); + transformedJson.request.auth.mode = _.get(json, 'http.auth', 'none'); return transformedJson; } catch (err) { diff --git a/packages/bruno-electron/package.json b/packages/bruno-electron/package.json index af0982c90..db7b3753a 100644 --- a/packages/bruno-electron/package.json +++ b/packages/bruno-electron/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "@usebruno/js": "0.6.0", - "@usebruno/lang": "0.4.0", + "@usebruno/lang": "0.5.0", "@usebruno/schema": "0.5.0", "about-window": "^1.15.2", "axios": "^1.5.1", diff --git a/packages/bruno-electron/src/ipc/network/interpolate-vars.js b/packages/bruno-electron/src/ipc/network/interpolate-vars.js index f4072dbe5..b92616478 100644 --- a/packages/bruno-electron/src/ipc/network/interpolate-vars.js +++ b/packages/bruno-electron/src/ipc/network/interpolate-vars.js @@ -109,6 +109,18 @@ const interpolateVars = (request, envVars = {}, collectionVariables = {}, proces } } + // todo: we have things happening in two places w.r.t basic auth + // need to refactor this in the future + // the request.auth (basic auth) object gets set inside the prepare-request.js file + if (request.auth) { + const username = interpolate(request.auth.username) || ''; + const password = interpolate(request.auth.password) || ''; + + // use auth header based approach and delete the request.auth object + request.headers['authorization'] = `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}`; + delete request.auth; + } + return request; }; diff --git a/packages/bruno-lang/package.json b/packages/bruno-lang/package.json index 91ad76885..fffde571f 100644 --- a/packages/bruno-lang/package.json +++ b/packages/bruno-lang/package.json @@ -1,7 +1,7 @@ { "name": "@usebruno/lang", - "version": "0.4.0", - "license" : "MIT", + "version": "0.5.0", + "license": "MIT", "main": "src/index.js", "files": [ "src",