public async Task <HttpResponseData> RunHttpTrigger([HttpTrigger(AuthorizationLevel.Function, "get", "post")] HttpRequestData req, FunctionContext executionContext) { var logger = executionContext.GetLogger("HttpTrigger"); var principal = await _authentication.AuthenticateAsync(executionContext, req); if (principal == null) { return(_authentication.ReplyUnauthorized(req)); } var microsoftGraph = new GraphServiceClient(new DelegateAuthenticationProvider(async(request) => { var token = await _authentication.GetAccessTokenForUserAsync(req, new string[] { "https://graph.microsoft.com/.default" }); request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token); })); var name = principal.Claims.Where(x => x.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name").First().Value; logger.LogInformation($"User is {name}!"); var inbox = await microsoftGraph.Me.MailFolders.Inbox.Request().GetAsync(); logger.LogInformation($"{name} has {inbox.UnreadItemCount} unread e-mails!"); var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add("Content-Type", "text/plain; charset=utf-8"); response.WriteString($"Welcome to Azure Functions Out-Of-Process, {name}!\n\nYou have {inbox.UnreadItemCount} unread e-mails!"); return(response); }
private async Task <HttpResponseMessage> InternalMakeRequestAsync( TimeSpan timeout, HttpCompletionOption completionOption, HttpMethod method, string path, IQueryString queryString, IDictionary <string, string> headers, Func <HttpContent> content, CancellationToken cancellationToken) { await EnsureConnection(); var request = PrepareRequest(method, path, queryString, headers, content); if (timeout != InfiniteTimeout) { var timeoutTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); timeoutTokenSource.CancelAfter(timeout); cancellationToken = timeoutTokenSource.Token; } await _authenticationProvider.AuthenticateAsync(request); var response = await _client.SendAsync(request, completionOption, cancellationToken); if (response.StatusCode == HttpStatusCode.Unauthorized) { //Prepare another request (we can't reuse the same request) var request2 = PrepareRequest(method, path, queryString, headers, content); //Authenticate given the challenge await _authenticationProvider.AuthenticateAsync(request2, response); //Send it again response = await _client.SendAsync(request2, completionOption, cancellationToken); } return(response); }