public async Task <IActionResult> Decrypt([FromBody] DecryptDocumentRequest request)
        {
            if (request == null)
            {
                return(GetError(ErrorCodes.InvalidRequest, ErrorDescriptions.NoRequest, HttpStatusCode.BadRequest));
            }

            var    parameter = request.ToParameter();
            string accessToken;

            TryGetAccessToken(out accessToken);
            try
            {
                var result = await _officeDocumentActions.Decrypt(parameter, accessToken, GetAuthenticateParameter(_options));

                return(new OkObjectResult(result));
            }
            catch (NoUmaAccessTokenException ex)
            {
                Response.Headers.Add("UmaResource", ex.UmaResourceId);
                Response.Headers.Add("UmaWellKnownUrl", ex.WellKnownConfiguration);
                return(GetError(ex.Code, ex.Message, HttpStatusCode.Unauthorized));
            }
            catch (NotAuthorizedException ex)
            {
                return(GetError(ex.Code, ex.Message, HttpStatusCode.Unauthorized));
            }
            catch (DocumentNotFoundException)
            {
                return(GetError(ErrorCodes.InvalidRequest, "the document doesn't exist", HttpStatusCode.NotFound));
            }
        }
コード例 #2
0
        public static DecryptOfficeDocumentParameter ToParameter(this DecryptDocumentRequest request)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            return(new DecryptOfficeDocumentParameter
            {
                Credentials = request.Credentials,
                DocumentId = request.DocumentId,
                Kid = request.Kid
            });
        }
コード例 #3
0
        public async Task <GetDecryptedDocumentResponse> Execute(DecryptDocumentRequest request, string url, string accessToken)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request));
            }

            if (string.IsNullOrWhiteSpace(url))
            {
                throw new ArgumentNullException(nameof(url));
            }

            var httpClient = _httpClientFactory.GetHttpClient();
            var serializedPostPermission = JsonConvert.SerializeObject(request);
            var body        = new StringContent(serializedPostPermission, Encoding.UTF8, "application/json");
            var httpRequest = new HttpRequestMessage
            {
                Method     = HttpMethod.Post,
                Content    = body,
                RequestUri = new Uri($"{url}/decrypt")
            };

            if (!string.IsNullOrWhiteSpace(accessToken))
            {
                httpRequest.Headers.Add("Authorization", "Bearer " + accessToken);
            }
            var httpResponse = await httpClient.SendAsync(httpRequest).ConfigureAwait(false);

            var json = await httpResponse.Content.ReadAsStringAsync();

            try
            {
                httpResponse.EnsureSuccessStatusCode();
            }
            catch (Exception ex)
            {
                if (!string.IsNullOrWhiteSpace(json))
                {
                    return(new GetDecryptedDocumentResponse
                    {
                        ContainsError = true,
                        Error = new ErrorResponse
                        {
                            Error = "internal",
                            ErrorDescription = ex.Message
                        }
                    });
                }

                return(new GetDecryptedDocumentResponse
                {
                    ContainsError = true,
                    Error = JsonConvert.DeserializeObject <ErrorResponse>(json)
                });
            }

            return(new GetDecryptedDocumentResponse
            {
                ContainsError = false,
                Content = JsonConvert.DeserializeObject <DecryptedResponse>(json)
            });
        }
コード例 #4
0
 public Task <GetDecryptedDocumentResponse> Decrypt(DecryptDocumentRequest request, string url, string accessToken)
 {
     return(_decryptOfficeDocumentOperation.Execute(request, url, accessToken));
 }
コード例 #5
0
        public async Task <GetDecryptedDocumentResponse> DecryptResolve(DecryptDocumentRequest request, string configurationUrl, string accessToken)
        {
            var configuration = await _getConfigurationOperation.Execute(new Uri(configurationUrl)).ConfigureAwait(false);

            return(await _decryptOfficeDocumentOperation.Execute(request, configuration.OfficeDocumentsEndpoint, accessToken).ConfigureAwait(false));
        }