internal static IRequestSpan DispatchSpan(this IRequestSpan parentSpan, FunctionOptionsBase eventingFunctionOptions)
        {
            var childSpan = DispatchSpan(parentSpan);

            if (childSpan.CanWrite)
            {
                childSpan.SetAttribute(InnerRequestSpans.DispatchSpan.Attributes.OperationId, eventingFunctionOptions.ClientContextId ?? Guid.NewGuid().ToString());
            }

            return(childSpan);
        }
        /// <inheritdoc />
        public async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options)
        {
            var option = options as GitHubRepositoriesHttpTriggerOptions;

            string result;

            AddRequestHeaders();

            string requestUrl = $"{_github.BaseUrl}{string.Format(_github.Endpoints.Repositories, option.Type, option.Name)}";

            using (var message = await _httpClient.GetAsync(requestUrl).ConfigureAwait(false))
            {
                result = await message.Content.ReadAsStringAsync().ConfigureAwait(false);
            }

            var res = JsonConvert.DeserializeObject <object>(result);

            RemoveRequestHeaders();

            return((TOutput)res);
        }
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var req = input as HttpRequest;
            var opt = options as RenderSwaggerUIFunctionOptions;

            var result = await this._ui
                         .AddMetadata(this._settings.OpenApiInfo)
                         .AddServer(req, this._settings.HttpSettings.RoutePrefix)
                         .BuildAsync()
                         .RenderAsync(opt.Endpoint, this._settings.SwaggerAuthKey)
                         .ConfigureAwait(false);

            var content = new ContentResult()
            {
                Content     = result,
                ContentType = "text/html",
                StatusCode  = (int)HttpStatusCode.OK
            };

            return((TOutput)(IActionResult)content);
        }
Exemplo n.º 4
0
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var req = input as HttpRequest;

            string name = req.Query["name"];

            string  requestBody = await new StreamReader(req.Body).ReadToEndAsync().ConfigureAwait(false);
            dynamic data        = JsonConvert.DeserializeObject(requestBody);

            name = name ?? data?.name;

            this._dependency.Name = name;

            this.Log.LogInformation($"input: {this._dependency.Name}");

            return(name != null
                ? (TOutput)(IActionResult) new OkObjectResult($"Hello, {name}")
                : (TOutput)(IActionResult) new BadRequestObjectResult("Please pass a name on the query string or in the request body"));
        }
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            var result     = (IActionResult)null;
            var requestUri = $"{this._settings.BaseUri.TrimEnd('/')}/{this._settings.Endpoints.HealthCheck.TrimStart('/')}";

            using (var response = await this._httpClient.GetAsync(requestUri).ConfigureAwait(false))
            {
                try
                {
                    response.EnsureSuccessStatusCode();

                    result = new OkResult();
                }
                catch (Exception ex)
                {
                    var error = new ErrorResponse(ex);

                    result = new ObjectResult(error)
                    {
                        StatusCode = (int)response.StatusCode
                    };
                }
            }

            return((TOutput)result);
        }
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");
#if NET461
            var req = input as HttpRequestMessage;
#elif NETSTANDARD2_0
            var req = input as HttpRequest;
#endif
            var request = (SampleRequestModel)null;

#if NET461
            var serialised = await req.Content.ReadAsStringAsync().ConfigureAwait(false);
#elif NETSTANDARD2_0
            var serialised = await new StreamReader(req.Body).ReadToEndAsync().ConfigureAwait(false);
#endif
            if (!string.IsNullOrWhiteSpace(serialised))
            {
                request = JsonConvert.DeserializeObject <SampleRequestModel>(serialised);
            }

#if NET461
            string name = req.GetQueryNameValuePairs()
                          .SingleOrDefault(p => p.Key.Equals("name", StringComparison.CurrentCultureIgnoreCase))
                          .Value;
#elif NETSTANDARD2_0
            string name = req.Query["name"];
#endif

            this._dependency.Name = name;

            this.Log.LogInformation($"input: {this._dependency.Name}");

            var result = new SampleResponseModel()
            {
                Id                                     = request == null?Guid.NewGuid() : Guid.Parse(request.Id),
                                           Name        = string.IsNullOrWhiteSpace(name) ? "Sample" : name,
                                           Description = "Ignored",
                                           Sub         = new SubSampleResponseModel()
                {
                    Value = int.MaxValue
                },
                Collection = { { "hello", "world" } },
                Items1     = { { int.MinValue } },
                Items2     = new[] { int.MinValue }.ToArray()
            };
#if NET461
            var content  = new StringContent(JsonConvert.SerializeObject(result), Encoding.UTF8, "application/json");
            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = content
            };

            return((TOutput)Convert.ChangeType(response, typeof(TOutput)));
#elif NETSTANDARD2_0
            var content = new ContentResult()
            {
                Content     = JsonConvert.SerializeObject(result),
                ContentType = "application/json",
                StatusCode  = (int)HttpStatusCode.OK
            };

            return((TOutput)(IActionResult)content);
#endif
        }
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var secrets = await this._kv
                          .GetSecretsAsync(this._settings.KeyVault.BaseUri)
                          .MapAsync(this._mapper)
                          .ConfigureAwait(false);

            return((TOutput)(IActionResult) new OkObjectResult(secrets));
        }
Exemplo n.º 8
0
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var req      = input as HttpRequestMessage;
            var request  = (XmlToXmlMapperRequest)null;
            var response = (HttpResponseMessage)null;

            try
            {
                request = await req.Content
                          .ReadAsAsync <XmlToXmlMapperRequest>()
                          .ConfigureAwait(false);
            }
            catch (Exception ex)
            {
                var statusCode = HttpStatusCode.BadRequest;
                var result     = new ErrorResponse((int)statusCode, ex.Message, ex.StackTrace);

                response = req.CreateResponse(HttpStatusCode.BadRequest, result);

                this.Log.LogError($"Request payload was invalid.");
                this.Log.LogError(ex.Message);
                this.Log.LogError(ex.StackTrace);

                return((TOutput)Convert.ChangeType(response, typeof(TOutput)));
            }

            try
            {
                var content = await this._helper
                              .LoadXslAsync(this._settings.Containers.Mappers, request.Mapper.Directory, request.Mapper.Name)
                              .AddArgumentsAsync(request.ExtensionObjects)
                              .TransformAsync(request.InputXml)
                              .ToStringAsync(this._settings.EncodeBase64Output);

                var result = new XmlToXmlMapperResponse()
                {
                    Content = content
                };

                response = req.CreateResponse(HttpStatusCode.OK, result, this._settings.JsonFormatter);
            }
            catch (CloudStorageNotFoundException ex)
            {
                var statusCode = HttpStatusCode.InternalServerError;
                var err        = new ErrorResponse((int)statusCode, ex.Message, ex.StackTrace);

                response = req.CreateResponse(statusCode, err);
            }
            catch (BlobContainerNotFoundException ex)
            {
                var statusCode = HttpStatusCode.BadRequest;
                var err        = new ErrorResponse((int)statusCode, ex.Message, ex.StackTrace);

                this.Log.LogError($"Request payload was invalid.");
                this.Log.LogError($"XSL mapper not found");

                response = req.CreateResponse(statusCode, err);
            }
            catch (BlobNotFoundException ex)
            {
                var statusCode = HttpStatusCode.BadRequest;
                var err        = new ErrorResponse((int)statusCode, ex.Message, ex.StackTrace);

                this.Log.LogError($"Request payload was invalid.");
                this.Log.LogError($"XSL mapper not found");

                response = req.CreateResponse(statusCode, err);
            }
            catch (Exception ex)
            {
                var statusCode = HttpStatusCode.InternalServerError;
                var err        = new ErrorResponse((int)statusCode, ex.Message, ex.StackTrace);

                response = req.CreateResponse(statusCode, err);
            }

            return((TOutput)Convert.ChangeType(response, typeof(TOutput)));
        }
Exemplo n.º 9
0
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            var request = input as HttpRequest;
            var renderSwaggerUIFunctionOptions = options as RenderSwaggerUIFunctionOptions;

            var result = await this._ui
                         .AddMetadata(this._settings.OpenApiInfo)
                         .AddServer(request, this._settings.HttpSettings.RoutePrefix)
                         .BuildAsync(typeof(SwaggerUI).Assembly)
                         .RenderAsync(renderSwaggerUIFunctionOptions.Endpoint, this._settings.SwaggerAuthKey)
                         .ConfigureAwait(false);

            return((TOutput)(IActionResult) new ContentResult()
            {
                Content = result, ContentType = "text/html", StatusCode = (int)HttpStatusCode.OK
            });
        }
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            var req = input as HttpRequest;
            var opt = options as RenderOpenApiDocumentFunctionOptions;

            var contentType = opt.Format.GetContentType();
            var result      = await this._document
                              .InitialiseDocument()
                              .AddMetadata(this._settings.OpenApiInfo)
                              .AddServer(req, this._settings.HttpSettings.RoutePrefix)
                              .Build(opt.Assembly)
                              .RenderAsync(opt.Version, opt.Format)
                              .ConfigureAwait(false);

            var content = new ContentResult()
            {
                Content     = result,
                ContentType = contentType,
                StatusCode  = (int)HttpStatusCode.OK
            };

            return((TOutput)(IActionResult)content);
        }
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            var collector = (options as SampleTimerFunctionOptions).Collector;

            var now = DateTimeOffset.UtcNow;

            this.Log.LogInformation($"C# Timer trigger function executed at: {now}");

            await collector.AddAsync(now.ToString()).ConfigureAwait(false);

            return((TOutput)(object)true);
        }
Exemplo n.º 12
0
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var req     = input as HttpRequest;
            var request = (SampleRequestModel)null;

            var serialised = await new StreamReader(req.Body).ReadToEndAsync().ConfigureAwait(false);

            if (!string.IsNullOrWhiteSpace(serialised))
            {
                request = JsonConvert.DeserializeObject <SampleRequestModel>(serialised);
            }

            var name = req.Query["name"].ToString();

            var opt = options as GetSamplesFunctionOptions;

            var result = new SampleResponseModel()
            {
                Id      = request?.Id,
                Name    = string.IsNullOrWhiteSpace(name) ? "Sample" : name,
                Message = $"Hello {this._settings.Hello} from {opt.Key}"
            };
            var content = new ContentResult()
            {
                Content     = JsonConvert.SerializeObject(result),
                ContentType = "application/json",
                StatusCode  = (int)HttpStatusCode.OK
            };

            return((TOutput)(IActionResult)content);
        }
Exemplo n.º 13
0
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var result = await this._service.GetUsersAsync().ConfigureAwait(false);

            var content = new ContentResult()
            {
                Content     = JsonConvert.SerializeObject(result),
                ContentType = "application/json",
                StatusCode  = (int)HttpStatusCode.OK
            };

            return((TOutput)(IActionResult)content);
        }
Exemplo n.º 14
0
        async Task <TOutput> IFunction <ILogger> .InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options)
        {
            Customer newCustomer = new Customer(3, "Klaas", "Vaak");
            var      mapped      = this._mapper.Map <CustomerDTO>(newCustomer);

            return((TOutput)(IActionResult) new OkObjectResult(mapped));
        }
Exemplo n.º 15
0
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var secrets = await this._kv.GetSecretsAsync(this._settings.KeyVault.BaseUri)
                          .ConfigureAwait(false);

            var items  = secrets.OfType <SecretItem>().ToList();
            var mapped = this._mapper.Map <List <SecretItemModel> >(items);

            return((TOutput)(IActionResult) new OkObjectResult(mapped));
        }
 /// <inheritdoc />
 public async override Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
 {
     return(await base.InvokeAsync <TInput, TOutput>(input, options).ConfigureAwait(false));
 }
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var opt = options as GetSecretFunctionOptions ?? throw new ArgumentNullException(nameof(options));

            var secret = await this._kv.GetSecretAsync(this._settings.KeyVault.BaseUri, opt.SecretName)
                         .ConfigureAwait(false);

            var mapped = this._mapper.Map <SecretModel>(secret);

            return((TOutput)(IActionResult) new OkObjectResult(mapped));
        }
Exemplo n.º 18
0
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var content = await this._service.GetDummies().ConfigureAwait(false);

#if NET461
            var req    = input as HttpRequestMessage;
            var result = req.CreateResponse(HttpStatusCode.OK, content);

            return((TOutput)Convert.ChangeType(result, typeof(TOutput)));
#elif NETSTANDARD2_0
            var result = new OkObjectResult(content);

            return((TOutput)(IActionResult)result);
#endif
        }
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            var req    = input as HttpRequest;
            int param1 = Convert.ToInt32(req.Query["param1"]);
            int param2 = Convert.ToInt32(req.Query["param2"]);

            var content = new ContentResult()
            {
                Content     = $"{param1}+{param2}={param1 + param2}",
                ContentType = "application/json",
                StatusCode  = (int)HttpStatusCode.OK
            };

            return((TOutput)(IActionResult)content);
        }
        /// <inheritdoc />
        public override async Task<TOutput> InvokeAsync<TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");
#if NET461
            var req = input as HttpRequestMessage;
#elif NETSTANDARD2_0
            var req = input as HttpRequest;
#endif
            var opt = options as RenderSwaggerUIFunctionOptions;

            var result = await this._ui
                                   .AddMetadata(this._settings.OpenApiInfo)
                                   .AddServer(req, this._settings.HttpSettings.RoutePrefix)
                                   .BuildAsync()
                                   .RenderAsync(opt.Endpoint, this._settings.SwaggerAuthKey)
                                   .ConfigureAwait(false);
#if NET461
            var content = new StringContent(result, Encoding.UTF8, "text/html");
            var response = new HttpResponseMessage(HttpStatusCode.OK) { Content = content };

            return (TOutput)Convert.ChangeType(response, typeof(TOutput));
#elif NETSTANDARD2_0
            var content = new ContentResult()
                              {
                                  Content = result,
                                  ContentType = "text/html",
                                  StatusCode = (int)HttpStatusCode.OK
                              };

            return (TOutput)(IActionResult)content;
#endif
        }
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");
#if NET461
            var req = input as HttpRequestMessage;
#elif NETSTANDARD2_0
            var req = input as HttpRequest;
#endif
            var opt = options as RenderOpeApiDocumentFunctionOptions;

            var contentType = opt.Format.GetContentType();
            var result      = await this._document
                              .InitialiseDocument()
                              .AddMetadata(this._settings.OpenApiInfo)
                              .AddServer(req, this._settings.HttpSettings.RoutePrefix)
                              .Build(opt.Assembly)
                              .RenderAsync(opt.Version, opt.Format)
                              .ConfigureAwait(false);

#if NET461
            var content  = new StringContent(result, Encoding.UTF8, contentType);
            var response = new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = content
            };

            return((TOutput)Convert.ChangeType(response, typeof(TOutput)));
#elif NETSTANDARD2_0
            var content = new ContentResult()
            {
                Content     = result,
                ContentType = contentType,
                StatusCode  = (int)HttpStatusCode.OK
            };

            return((TOutput)(IActionResult)content);
#endif
        }
        /// <inheritdoc />
        public override async Task <TOutput> InvokeAsync <TInput, TOutput>(TInput input, FunctionOptionsBase options = null)
        {
            this.Log.LogInformation("C# HTTP trigger function processed a request.");

            var opt = options as RenderSwaggerFunctionOptions ?? throw new ArgumentNullException(nameof(options));

            if (!IsValidSwaggerExtension(opt.Extension))
            {
                var statusCode = (int)HttpStatusCode.BadRequest;
                var value      = new ErrorModel(statusCode, "Extension not supported");

                return((TOutput)(IActionResult) new ObjectResult(value)
                {
                    StatusCode = statusCode
                });
            }

            var swagger = await this._http.GetStringAsync(this._settings.Swagger.ImportUrl)
                          .ConfigureAwait(false);

            if (IsYaml(opt.Extension))
            {
                return((TOutput)(IActionResult) new OkObjectResult(swagger));
            }

            if (IsJson(opt.Extension))
            {
                var deserialiser = new DeserializerBuilder().Build();
                var deserialised = deserialiser.Deserialize <dynamic>(swagger);

                return((TOutput)(IActionResult) new OkObjectResult(deserialised));
            }

            throw new InvalidOperationException();
        }