コード例 #1
0
        public void AuthParamParser_Run(string value)
        {
            var @params = AuthParamParser.Parse(value);

            foreach (var p in @params)
            {
                Console.WriteLine($"{p.Key} = \"{p.Value}\"");
            }
        }
コード例 #2
0
        private async Task <bool> TrySetOAuth(string parameter)
        {
            var authParams = AuthParamParser.Parse(parameter);

            authParams.TryGetValue("scope", out var scope);

            // don't update unless we are asked for higher access
            if (_authorization != null && scope == _scope)
            {
                return(false);
            }

            var queryString = QueryString.Empty;

            if (authParams.TryGetValue("service", out var service))
            {
                queryString = queryString.Add("service", service);
            }

            if (scope != null)
            {
                queryString = queryString.Add("scope", scope);
                _scope      = scope;
            }

            var request = new HttpRequestMessage(HttpMethod.Get, $"{authParams["realm"]}{queryString}");

            string tokenCredentials;

            if (HasCredentials())
            {
                tokenCredentials = EncodeCredentials(_username, _password);
            }
            else
            {
                tokenCredentials = _dockerConfigCredentials?.GetEncodedCredentials(_registry);
            }

            if (tokenCredentials != null)
            {
                request.Headers.Authorization = new AuthenticationHeaderValue("Basic", tokenCredentials);
            }

            var response = await _tokenClient.SendAsync(request);

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

            response.EnsureSuccessStatusCode();
            var tokenResponse = JsonConvert.DeserializeObject <TokenResponse>(content);

            _authorization = new AuthenticationHeaderValue("Bearer", tokenResponse.token ?? tokenResponse.access_token);
            _logger.LogDebug($"Using Bearer token for {_registry} ({queryString})");
            return(true);
        }