示例#1
0
        public async Task <string> FetchAttachmentWithToken(string url, string attachmentsPath, string filenamePrefix, TokenHolder token)
        {
            var httpClient = new System.Net.Http.HttpClient();

            try
            {
                var fileMetadataStr = await GetHttpContentWithToken(url, token);

                Metadata obj = null;
                if (fileMetadataStr != null)
                {
                    obj = JsonConvert.DeserializeObject <Metadata>(fileMetadataStr);
                }
                int backOffMultiplier = 1;
begin:
                var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, url + "/$value");
                //Add the token in Authorization header
                request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token.getToken());
                var response = httpClient.SendAsync(request);
                if (response.Result.IsSuccessStatusCode)
                {
                    var    content        = response.Result.Content.ReadAsByteArrayAsync().Result;
                    string filenameSuffix = GetFilenameSuffix(response.Result.Content.Headers.ContentType.MediaType, obj);

                    System.IO.File.WriteAllBytes(Path.Combine(attachmentsPath, $"{filenamePrefix}{filenameSuffix}"), content);

                    return($"{filenamePrefix}{filenameSuffix}");
                }
                else
                {
                    if (response.Result.StatusCode.Equals(System.Net.HttpStatusCode.NotFound))
                    {
                        return(null);
                    }
                    if (fileMetadataStr.Contains("ErrorInsufficientPermissionsInAccessToken"))
                    {
                        LogText.Text = "ClientId lacks permission to fetch: " + url;
                        return(null);
                    }
                    if (response.Result.StatusCode.Equals(System.Net.HttpStatusCode.Unauthorized))
                    {
                        token.refreshToken();
                        goto begin;
                    }
                    LogText.Text = $"Error statuscode: {response.Result.StatusCode} content: {response.Result.Content}" + Environment.NewLine
                                   + $"sleeping for {30*backOffMultiplier}sec..";
                    Thread.Sleep(backOffMultiplier * 30 * 1000);
                    backOffMultiplier *= 2;
                    goto begin;
                }
                return(null); // no picture found
            }
            catch (Exception ex)
            {
                LogText.Text = ex.ToString();
                return(null); // probably no profile picture was found
            }
        }
示例#2
0
        /// <summary>
        /// Perform an HTTP GET request to a URL using an HTTP Authorization header
        /// </summary>
        /// <param name="url">The URL</param>
        /// <param name="token">The token</param>
        /// <returns>String containing the results of the GET operation</returns>
        public async Task <string> GetHttpContentWithToken(string url, TokenHolder token)
        {
            var httpClient = new System.Net.Http.HttpClient();

            System.Net.Http.HttpResponseMessage response;
            try
            {
                int backOffMultiplier = 1;
begin:
                var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, url);
                //Add the token in Authorization header
                request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token.getToken());
                response = await httpClient.SendAsync(request);

                var content = await response.Content.ReadAsStringAsync();

                if (response.IsSuccessStatusCode)
                {
                    return(content);
                }
                else
                {
                    if (response.StatusCode.Equals(System.Net.HttpStatusCode.NotFound))
                    {
                        // resource probably belongs to another tenant
                        return(content);
                    }
                    if (response.StatusCode.Equals(System.Net.HttpStatusCode.Forbidden))
                    {
                        // client id lacks permissions
                        LogText.Text = "ClientId lacks permission to fetch: " + url;
                        return(content);
                    }
                    if (response.StatusCode.Equals(System.Net.HttpStatusCode.Unauthorized))
                    {
                        LogText.Text = "Token expired?? Not authorized to fetch: " + url;
                        token.refreshToken();
                        goto begin;
                    }
                    else
                    {
                        LogText.Text = $"Error statuscode: {response.StatusCode} content: {response.Content}" + Environment.NewLine
                                       + $"sleeping for {30*backOffMultiplier}sec..";
                        Thread.Sleep(backOffMultiplier * 30 * 1000);
                        LogText.Text       = "Continuing...";
                        backOffMultiplier *= 2;
                        goto begin;
                    }
                }
            }
            catch (Exception ex)
            {
                LogText.Text = ex.ToString();
                return(ex.ToString());
            }
        }