Skip to content

Commit

Permalink
Fix issue wit custom authorizers when using pseudo parameters plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
Aleksander Dikanski committed Mar 16, 2018
1 parent e154c85 commit 841bee2
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions lib/stackops/apiGateway.js
Original file line number Diff line number Diff line change
Expand Up @@ -221,17 +221,16 @@ module.exports = function(currentTemplate, aliasStackTemplates, currentAliasStac
});

// Audjust authorizer Uri and name (stage variables are not allowed in Uris here)
const isExternalRefAuthorizerPredicate = part => _.startsWith(part, 'arn:aws:lambda') ||
(_.has(part, 'Fn::Sub') && _.startsWith(part['Fn::Sub'], 'arn:aws:lambda'))
_.forOwn(authorizers, (authorizer, name) => {
const authorizerType = _.get(authorizer, 'Properties.Type');
if (authorizerType === 'TOKEN' || authorizerType === 'REQUEST') {
const uriParts = authorizer.Properties.AuthorizerUri['Fn::Join'][1];
const isExternalRefAuthorizer = _.every(uriParts, part => !_.startsWith(part, 'arn:aws:lambda'));
if (isExternalRefAuthorizer) {
const funcIndex = _.findIndex(uriParts, part =>
_.has(part, 'Fn::GetAtt') || _.startsWith(part, 'arn:aws:lambda'));

// Use the SERVERLESS_ALIAS stage variable to determine the called function alias
uriParts.splice(funcIndex + 1, 0, ':${stageVariables.SERVERLESS_ALIAS}');
const isExternalRefAuthorizer = _.some(uriParts, isExternalRefAuthorizerPredicate);
if (!isExternalRefAuthorizer) {
const funcIndex = _.findIndex(uriParts, part => _.startsWith('/invocations'));
uriParts.splice(funcIndex , 0, ':${stageVariables.SERVERLESS_ALIAS}');
}
}

Expand Down Expand Up @@ -269,7 +268,7 @@ module.exports = function(currentTemplate, aliasStackTemplates, currentAliasStac
const functionName = _.replace(name, /LambdaPermissionApiGateway$/, '');
const versionName = _.find(_.keys(versions), version => _.startsWith(version, functionName));
const aliasName = _.find(_.keys(aliases), alias => _.startsWith(alias, functionName));
const isExternalRef = _.startsWith(permission.Properties.FunctionName, 'arn:aws:lambda');
const isExternalRef = isExternalRefAuthorizerPredicate(permission.Properties.FunctionName);

// Adjust references and alias permissions
if (!isExternalRef) {
Expand Down

0 comments on commit 841bee2

Please sign in to comment.