Beispiel #1
0
        public ApiService(
            ITokenService tokenService,
            IPlatformUtilsService platformUtilsService,
            Func <Tuple <string, bool, bool>, Task> logoutCallbackAsync,
            string customUserAgent = null)
        {
            _tokenService         = tokenService;
            _platformUtilsService = platformUtilsService;
            _logoutCallbackAsync  = logoutCallbackAsync;
            var device = (int)_platformUtilsService.GetDevice();

            _httpClient.DefaultRequestHeaders.Add("Device-Type", device.ToString());
            _httpClient.DefaultRequestHeaders.Add("Bitwarden-Client-Name", _platformUtilsService.GetClientType().GetString());
            _httpClient.DefaultRequestHeaders.Add("Bitwarden-Client-Version", _platformUtilsService.GetApplicationVersion());
            if (!string.IsNullOrWhiteSpace(customUserAgent))
            {
                _httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(customUserAgent);
            }
        }
Beispiel #2
0
        public async Task <IdentityResponse> PostIdentityTokenAsync(TokenRequest request)
        {
            var requestMessage = new HttpRequestMessage
            {
                Version    = new Version(1, 0),
                RequestUri = new Uri(string.Concat(IdentityBaseUrl, "/connect/token")),
                Method     = HttpMethod.Post,
                Content    = new FormUrlEncodedContent(request.ToIdentityToken(_platformUtilsService.GetClientType().GetString()))
            };

            requestMessage.Headers.Add("Accept", "application/json");
            request.AlterIdentityTokenHeaders(requestMessage.Headers);

            HttpResponseMessage response;

            try
            {
                response = await _httpClient.SendAsync(requestMessage);
            }
            catch (Exception e)
            {
                throw new ApiException(HandleWebError(e));
            }
            JObject responseJObject = null;

            if (IsJsonResponse(response))
            {
                var responseJsonString = await response.Content.ReadAsStringAsync();

                responseJObject = JObject.Parse(responseJsonString);
            }

            var identityResponse = new IdentityResponse(response.StatusCode, responseJObject);

            if (identityResponse.FailedToParse)
            {
                throw new ApiException(new ErrorResponse(responseJObject, response.StatusCode, true));
            }

            return(identityResponse);
        }