Beispiel #1
0
        public async Task <RestApiResult <UserInfo> > GetUserInformationAsync(string userName, string password, bool isBearerToken)
        {
            var requestUri = new Uri(_apiUri, "2.0/user");

            using (HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, requestUri))
            {
                if (isBearerToken)
                {
                    request.AddBearerAuthenticationHeader(password);
                }
                else
                {
                    request.AddBasicAuthenticationHeader(userName, password);
                }

                _context.Trace.WriteLine($"HTTP: GET {requestUri}");
                using (HttpResponseMessage response = await HttpClient.SendAsync(request))
                {
                    _context.Trace.WriteLine($"HTTP: Response {(int) response.StatusCode} [{response.StatusCode}]");

                    string json = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        var obj = JsonConvert.DeserializeObject <UserInfo>(json, new JsonSerializerSettings {
                            NullValueHandling = NullValueHandling.Ignore
                        });

                        return(new RestApiResult <UserInfo>(response.StatusCode, obj));
                    }

                    return(new RestApiResult <UserInfo>(response.StatusCode));
                }
            }
        }
        private static void TestAddBasicAuthenticationHeader(string userName, string password, string expectedParameterValue)
        {
            var message = new HttpRequestMessage();

            message.AddBasicAuthenticationHeader(userName, password);

            var authHeader = message.Headers.Authorization;

            Assert.NotNull(authHeader);
            Assert.Equal(Constants.Http.WwwAuthenticateBasicScheme, authHeader.Scheme);
            Assert.Equal(expectedParameterValue, authHeader.Parameter);
        }
Beispiel #3
0
        public async Task <AuthenticationResult> CreatePersonalAccessTokenAsync(Uri targetUri, string username, string password, string authenticationCode, IEnumerable <string> scopes)
        {
            EnsureArgument.AbsoluteUri(targetUri, nameof(targetUri));
            EnsureArgument.NotNull(scopes, nameof(scopes));

            Uri requestUri = GetApiRequestUri(targetUri, "authorizations");

            _context.Trace.WriteLine($"HTTP: POST {requestUri}");
            using (HttpContent content = GetTokenJsonContent(targetUri, scopes))
                using (var request = new HttpRequestMessage(HttpMethod.Post, requestUri))
                {
                    // Set the request content as well as auth and 2FA headers
                    request.Content = content;
                    request.AddBasicAuthenticationHeader(username, password);
                    if (!string.IsNullOrWhiteSpace(authenticationCode))
                    {
                        request.Headers.Add(GitHubConstants.GitHubOptHeader, authenticationCode);
                    }

                    // Send the request!
                    using (HttpResponseMessage response = await HttpClient.SendAsync(request))
                    {
                        _context.Trace.WriteLine($"HTTP: Response {(int) response.StatusCode} [{response.StatusCode}]");

                        switch (response.StatusCode)
                        {
                        case HttpStatusCode.OK:
                        case HttpStatusCode.Created:
                            return(await ParseSuccessResponseAsync(targetUri, response));

                        case HttpStatusCode.Unauthorized:
                            return(ParseUnauthorizedResponse(targetUri, authenticationCode, response));

                        case HttpStatusCode.Forbidden:
                            return(await ParseForbiddenResponseAsync(targetUri, password, response));

                        default:
                            _context.Trace.WriteLine($"Authentication failed for '{targetUri}'.");
                            return(new AuthenticationResult(GitHubAuthenticationResultType.Failure));
                        }
                    }
                }
        }