func (perm BasePermission) export(principal *gocf.StringExpr, arnPrefixParts []gocf.Stringable, lambdaFunctionDisplayName string, lambdaLogicalCFResourceName string, template *gocf.Template, S3Bucket string, S3Key string, logger *logrus.Logger) (string, error) { lambdaPermission := gocf.LambdaPermission{ Action: gocf.String("lambda:InvokeFunction"), FunctionName: gocf.GetAtt(lambdaLogicalCFResourceName, "Arn"), Principal: principal, } // If the Arn isn't the wildcard value, then include it. if nil != perm.SourceArn { switch perm.SourceArn.(type) { case string: // Don't be smart if the Arn value is a user supplied literal if "*" != perm.SourceArn.(string) { lambdaPermission.SourceArn = gocf.String(perm.SourceArn.(string)) } default: lambdaPermission.SourceArn = perm.sourceArnExpr(arnPrefixParts...) } } if "" != perm.SourceAccount { lambdaPermission.SourceAccount = gocf.String(perm.SourceAccount) } arnLiteral, arnLiteralErr := json.Marshal(lambdaPermission.SourceArn) if nil != arnLiteralErr { return "", arnLiteralErr } resourceName := CloudFormationResourceName("LambdaPerm%s", principal.Literal, string(arnLiteral), lambdaLogicalCFResourceName) template.AddResource(resourceName, lambdaPermission) return resourceName, nil }
func (perm BasePermission) export(principal string, arnPrefixParts []gocf.Stringable, lambdaLogicalCFResourceName string, template *gocf.Template, S3Bucket string, S3Key string, logger *logrus.Logger) (string, error) { lambdaPermission := gocf.LambdaPermission{ Action: gocf.String("lambda:InvokeFunction"), FunctionName: gocf.GetAtt(lambdaLogicalCFResourceName, "Arn"), Principal: gocf.String(principal), } // If the Arn isn't the wildcard value, then include it. if nil != perm.SourceArn { switch perm.SourceArn.(type) { case string: // Don't be smart if the Arn value is a user supplied literal if "*" != perm.SourceArn.(string) { lambdaPermission.SourceArn = gocf.String(perm.SourceArn.(string)) } default: lambdaPermission.SourceArn = perm.sourceArnExpr(arnPrefixParts...) } } if "" != perm.SourceAccount { lambdaPermission.SourceAccount = gocf.String(perm.SourceAccount) } hash := sha1.New() hash.Write([]byte(fmt.Sprintf("%v", lambdaPermission))) resourceName := fmt.Sprintf("LambdaPerm%s", hex.EncodeToString(hash.Sum(nil))) template.AddResource(resourceName, lambdaPermission) return resourceName, nil }