Exemplo n.º 1
0
        public ApplicationLoadBalancerResponse FunctionHandler(JObject input)
        {
            string responseString = @"<html>  
                                    <head>
                                      <title>Hi there</title>
                                    </head>
                                    <body>
                                      <h1>Hi there</h1>
                                      <p>Welcome to this basic page, powered by Lambda</p>
                                      <p><img src='/assets/200.jpg' /></p>
                                    </body>
                                  </html>";

            Dictionary <string, string> Headers = new Dictionary <string, string>();

            Headers.Add("Content-Type", "text/html;");

            ApplicationLoadBalancerResponse response = new ApplicationLoadBalancerResponse()
            {
                IsBase64Encoded   = false,
                StatusCode        = 200,
                StatusDescription = "200 OK",
                Headers           = Headers,
                Body = responseString
            };

            return(response);
        }
Exemplo n.º 2
0
        public ApplicationLoadBalancerResponse FunctionHandler(JObject input)
        {
            LambdaLogger.Log(input.ToString());

            try {
                char[] toTrim = new[] { '/' };

                GetObjectRequest request = new GetObjectRequest()
                {
                    BucketName = Environment.GetEnvironmentVariable("assetbucket"),
                    Key        = input.SelectToken("path").ToString().TrimStart(toTrim)
                };

                GetObjectResponse response = client.GetObjectAsync(request).Result;

                byte[] data;
                using (StreamReader sr = new StreamReader(response.ResponseStream))
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        sr.BaseStream.CopyTo(ms);
                        data = ms.ToArray();

                        string responseBody = Convert.ToBase64String(data);
                        Dictionary <string, string> headers = new Dictionary <string, string>();
                        headers.Add("Content-Type", response.Headers["Content-Type"]);

                        ApplicationLoadBalancerResponse albResponse = new ApplicationLoadBalancerResponse()
                        {
                            IsBase64Encoded   = true,
                            StatusCode        = 200,
                            StatusDescription = "200 OK",
                            Headers           = headers,
                            Body = responseBody
                        };

                        return(albResponse);
                    }
                }
            } catch (Exception ex) {
                LambdaLogger.Log(ex.Message);

                return(null);
            }
        }
Exemplo n.º 3
0
        public ApplicationLoadBalancerResponse FunctionHandler(JObject input)
        {
            JObject responseObj = new JObject();

            responseObj.Add("data", "hello 123");

            Dictionary <string, string> headers = new Dictionary <string, string>();

            headers.Add("Content-Type", "application/json");

            ApplicationLoadBalancerResponse response = new ApplicationLoadBalancerResponse()
            {
                IsBase64Encoded   = false,
                StatusCode        = 200,
                StatusDescription = "200 OK",
                Headers           = headers,
                Body = JsonConvert.SerializeObject(responseObj)
            };

            return(response);
        }
Exemplo n.º 4
0
        public static ApplicationLoadBalancerResponse FunctionHandler(ApplicationLoadBalancerRequest request, ILambdaContext context)
        {
            System.Console.WriteLine(request.Body.ToString() ?? "Empty Request");

            string body = FakeResponseMaker.BuildFakeResponse();

            var responseBody = body;

            Dictionary <string, string> Headers = new Dictionary <string, string>();

            Headers.Add("Content-Type", "text/html;");

            ApplicationLoadBalancerResponse response = new ApplicationLoadBalancerResponse()
            {
                IsBase64Encoded   = false,
                StatusCode        = 200,
                StatusDescription = "200 OK",
                Headers           = Headers,
                Body = responseBody
            };

            return(response);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Lambda function handler to respond to events coming from an Application Load Balancer.
        ///
        /// Note: If "Multi value headers" is disabled on the ELB Target Group then use the Headers and QueryStringParameters properties
        /// on the ApplicationLoadBalancerRequest and ApplicationLoadBalancerResponse objects. If "Multi value headers" is enabled then
        /// use MultiValueHeaders and MultiValueQueryStringParameters properties.
        /// </summary>
        /// <param name="request"></param>
        /// <param name="context"></param>
        /// <returns></returns>
        public ApplicationLoadBalancerResponse FunctionHandler(ApplicationLoadBalancerRequest request, ILambdaContext context)
        {
            var response = new ApplicationLoadBalancerResponse
            {
                StatusCode        = 200,
                StatusDescription = "200 OK",
                IsBase64Encoded   = false
            };

            // If "Multi value headers" is enabled for the ELB Target Group then use the "response.MultiValueHeaders" property instead of "response.Headers".
            response.Headers = new Dictionary <string, string>
            {
                { "Content-Type", "text/html; charset=utf-8" }
            };

            response.Body =
                @"
<html>
    <head>
        <title>Hello World!</title>
        <style>
            html, body {
                margin: 0; padding: 0;
                font-family: arial; font-weight: 700; font-size: 3em;
                text-align: center;
            }
        </style>
    </head>
    <body>
        <p>Hello World from Lambda</p>
    </body>
</html>
";

            return(response);
        }
Exemplo n.º 6
0
        public void Setup()
        {
            // APIGatewayProxy
            _baseAPIGatewayProxyRequest = new APIGatewayProxyRequest
            {
                HttpMethod = "POST",
                Path       = "/test/path",
            };

            _baseAPIGatewayProxyResponse = new APIGatewayProxyResponse
            {
                StatusCode = (int)HttpStatusCode.OK,
            };

            // ApplicationLoadBalancer
            var albRequestContext = new ApplicationLoadBalancerRequest.ALBRequestContext
            {
                Elb = new ApplicationLoadBalancerRequest.ElbInfo()
            };

            albRequestContext.Elb.TargetGroupArn = TestArn;
            _baseApplicationLoadBalancerRequest  = new ApplicationLoadBalancerRequest
            {
                HttpMethod     = "POST",
                Path           = "/test/path",
                RequestContext = albRequestContext,
            };

            _baseApplicationLoadBalancerResponse = new ApplicationLoadBalancerResponse
            {
                StatusCode = (int)HttpStatusCode.OK,
            };

            // SQSEvent
            var sqsRecord = new SQSEvent.SQSMessage
            {
                EventSourceArn = TestArn
            };

            _baseSQSEvent = new SQSEvent
            {
                Records = new List <SQSEvent.SQSMessage> {
                    sqsRecord
                },
            };

            // SNSEvent
            var snsMessaage = new SNSEvent.SNSMessage()
            {
                Message = "Test Message",
            };
            var snsRecord = new SNSEvent.SNSRecord
            {
                EventSubscriptionArn = TestArn,
                Sns = snsMessaage
            };

            _baseSNSEvent = new SNSEvent
            {
                Records = new List <SNSEvent.SNSRecord> {
                    snsRecord
                },
            };

            // KinesisEvent
            var kinesisRecord = new KinesisEvent.KinesisEventRecord
            {
                EventSourceARN = TestArn
            };

            _baseKinesisEvent = new KinesisEvent
            {
                Records = new List <KinesisEvent.KinesisEventRecord> {
                    kinesisRecord
                },
            };

            // S3Event
            var s3Record = new Amazon.S3.Util.S3EventNotification.S3EventNotificationRecord
            {
                S3 = new Amazon.S3.Util.S3EventNotification.S3Entity
                {
                    Bucket = new Amazon.S3.Util.S3EventNotification.S3BucketEntity
                    {
                        Arn = TestArn
                    }
                }
            };

            _baseS3Event = new S3Event
            {
                Records = new List <Amazon.S3.Util.S3EventNotification.S3EventNotificationRecord> {
                    s3Record
                },
            };

            // DynamoDBEvent
            var dynamoDBRecord = new DynamoDBEvent.DynamodbStreamRecord
            {
                EventSourceArn = TestArn
            };

            _baseDynamoDBEvent = new DynamoDBEvent
            {
                Records = new List <DynamoDBEvent.DynamodbStreamRecord> {
                    dynamoDBRecord
                },
            };

            // KinesisFirehoseEvent
            _baseKinesisFirehoseEvent = new KinesisFirehoseEvent
            {
                DeliveryStreamArn = TestArn,
            };
        }
Exemplo n.º 7
0
        public ApplicationLoadBalancerResponse FunctionHandler(Stream input)
        {
            ApplicationLoadBalancerResponse response = null;
            var request        = new StreamReader(input).ReadToEnd();
            var dict           = JsonSerializer.Deserialize <Dictionary <string, object> >(request);
            var requestHeaders = JsonSerializer.Deserialize <Dictionary <string, string> >(dict["headers"].ToString());
            var authorization  = "";
            int contentLength  = request.Length;

            System.Console.WriteLine(request);

            if (dict["httpMethod"].ToString() == "OPTIONS")
            {
                Dictionary <string, string> corsHeaders = new Dictionary <string, string>();
                corsHeaders.Add("Content-Type", "application/json");
                corsHeaders.Add("Access-Control-Allow-Origin", "*");
                corsHeaders.Add("Access-Control-Allow-Headers", "*");
                corsHeaders.Add("Access-Control-Allow-Methods", "*");
                var corsResponse = new ApplicationLoadBalancerResponse()
                {
                    IsBase64Encoded   = false,
                    StatusCode        = 200,
                    StatusDescription = "200 OK",
                    Headers           = corsHeaders,
                };
                return(corsResponse);
            }

            if (requestHeaders.ContainsKey("authorization"))
            {
                authorization = requestHeaders["authorization"];
            }

            // Get these from the Lambda ENV
            var domain      = Environment.GetEnvironmentVariable("AUTH_DOMAIN");
            var audience    = Environment.GetEnvironmentVariable("AUTH_AUDIENCE");
            var permission  = Environment.GetEnvironmentVariable("AUTH_PERMISSIONS");
            var permissions = new List <string>(permission.Split(','));

            // See if authorized
            if (JWTAuthorizer.Authorizer.IsAuthorized(authorization, domain, audience, permissions))
            {
                var data = new Response {
                    Message = "Hello, 123!", BodyLength = contentLength.ToString()
                };

                Dictionary <string, string> headers = new Dictionary <string, string>();
                headers.Add("Content-Type", "application/json");
                headers.Add("Access-Control-Allow-Origin", "*");

                response = new ApplicationLoadBalancerResponse()
                {
                    IsBase64Encoded   = false,
                    StatusCode        = 200,
                    StatusDescription = "200 OK",
                    Headers           = headers,
                    Body = JsonSerializer.Serialize <Response>(data)
                };
            }
            else
            {
                response = new ApplicationLoadBalancerResponse()
                {
                    IsBase64Encoded   = false,
                    StatusCode        = 403,
                    StatusDescription = "403 Unauthorized",
                };
            }

            return(response);
        }