Skip to content

Commit

Permalink
Support AWS Multifactor Auth (Kong#719)
Browse files Browse the repository at this point in the history
  * Back end support
  • Loading branch information
focusaurus committed Jan 24, 2018
1 parent 3ee969a commit 0fc7095
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 14 deletions.
3 changes: 2 additions & 1 deletion packages/insomnia-app/app/models/request.js
Expand Up @@ -130,7 +130,8 @@ export function newAuth (type: string, oldAuth: RequestAuthentication = {}): Req
type,
disabled: oldAuth.disabled || false,
accessKeyId: oldAuth.accessKeyId || '',
secretAccessKey: oldAuth.secretAccessKey || ''
secretAccessKey: oldAuth.secretAccessKey || '',
sessionToken: oldAuth.sessionToken || ''
};

// Hawk
Expand Down
23 changes: 16 additions & 7 deletions packages/insomnia-app/app/network/__tests__/network.test.js
Expand Up @@ -558,16 +558,21 @@ describe('_getAwsAuthHeaders', () => {
authentication: {
type: AUTH_AWS_IAM,
accessKeyId: 'AKIA99999999',
secretAccessKey: 'SAK9999999999999'
secretAccessKey: 'SAK9999999999999',
sessionToken: 'ST9999999999999999'
},
headers: [{name: 'content-type', value: 'application/json'}],
body: {text: '{}'},
method: 'POST',
url: 'https://example.com/path?query=q1'
};
const credentials = {
accessKeyId: req.authentication.accessKeyId || '',
secretAccessKey: req.authentication.secretAccessKey || '',
sessionToken: req.authentication.sessionToken || ''
};
const headers = networkUtils._getAwsAuthHeaders(
req.authentication.accessKeyId,
req.authentication.secretAccessKey,
credentials,
req.headers,
req.body.text,
req.url,
Expand All @@ -587,7 +592,8 @@ describe('_getAwsAuthHeaders', () => {
authentication: {
type: AUTH_AWS_IAM,
accessKeyId: 'AKIA99999999',
secretAccessKey: 'SAK9999999999999'
secretAccessKey: 'SAK9999999999999',
sessionToken: 'ST99999999999999'
},
headers: [
'Accept: */*',
Expand All @@ -596,10 +602,13 @@ describe('_getAwsAuthHeaders', () => {
url: 'https://example.com',
method: 'GET'
};

const credentials = {
accessKeyId: req.authentication.accessKeyId || '',
secretAccessKey: req.authentication.secretAccessKey || '',
sessionToken: req.authentication.sessionToken || ''
};
const headers = networkUtils._getAwsAuthHeaders(
req.authentication.accessKeyId,
req.authentication.secretAccessKey,
credentials,
req.headers,
null,
req.url,
Expand Down
13 changes: 7 additions & 6 deletions packages/insomnia-app/app/network/network.js
Expand Up @@ -493,9 +493,13 @@ export async function _actuallySend (
return handleError(
new Error('AWS authentication not supported for provided body type'));
}
const credentials = {
accessKeyId: renderedRequest.authentication.accessKeyId || '',
secretAccessKey: renderedRequest.authentication.secretAccessKey || '',
sessionToken: renderedRequest.authentication.sessionToken || ''
};
const extraHeaders = _getAwsAuthHeaders(
renderedRequest.authentication.accessKeyId || '',
renderedRequest.authentication.secretAccessKey || '',
credentials,
headers,
requestBody || '',
finalUrl,
Expand Down Expand Up @@ -853,15 +857,12 @@ export function _parseHeaders (

// exported for unit tests only
export function _getAwsAuthHeaders (
accessKeyId: string,
secretAccessKey: string,
credentials: Object,
headers: Array<RequestHeader>,
body: string,
url: string,
method: string
) {
const credentials = {accessKeyId, secretAccessKey};

const parsedUrl = urlParse(url);
const contentTypeHeader = getContentTypeHeader(headers);

Expand Down

0 comments on commit 0fc7095

Please sign in to comment.