Esempio n. 1
0
 /// <summary>
 /// Updates the upload data to db
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='subscriptionId'>
 /// </param>
 /// <param name='request'>
 /// </param>
 public static object UpdateDataToDb(this IInternalClient operations, System.Guid subscriptionId, CitizenDocumentUploadRequestModel request)
 {
     return(operations.UpdateDataToDbAsync(subscriptionId, request).GetAwaiter().GetResult());
 }
Esempio n. 2
0
 /// <summary>
 /// Updates the upload data to db
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='subscriptionId'>
 /// </param>
 /// <param name='request'>
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task <object> UpdateDataToDbAsync(this IInternalClient operations, System.Guid subscriptionId, CitizenDocumentUploadRequestModel request, CancellationToken cancellationToken = default(CancellationToken))
 {
     using (var _result = await operations.UpdateDataToDbWithHttpMessagesAsync(subscriptionId, request, null, cancellationToken).ConfigureAwait(false))
     {
         return(_result.Body);
     }
 }
Esempio n. 3
0
        /// <summary>
        /// Uploads the single citizen document.
        /// </summary>
        /// <param name="document">Original citizen document.</param>
        /// <param name="parameters">citizenDocumentUploadRequestModel to update to db.</param>
        /// <returns>The file access page details or error if isn't valid.</returns>
        /// <exception cref="ValidationException">Missing cpr number.</exception>
        /// <exception cref="SerializationException">Unable to process the service response.</exception>
        /// <exception cref="LogicTokenProviderException">Unable to issue an authorization token.</exception>
        /// <exception cref="CitizenDocumentsException">Invalid Citizen document configuration details.</exception>
        public async Task <CitizenDocumentUploadResponse> UploadFileAsync(
            Stream document,
            UploadFileParameters parameters)
        {
            if (document == null)
            {
                throw new ArgumentNullException(nameof(document));
            }

            if (parameters == null)
            {
                throw new ArgumentNullException(nameof(parameters));
            }

            var client         = this.CreateClient();
            var documentId     = Guid.NewGuid();
            var storageDocName = parameters.DocumentName.Trim().Replace(".", string.Empty) +
                                 "_" + documentId + ".pdf";

            using var responseSasUri = await client.StorageAccessWithHttpMessagesAsync(
                      subscriptionId : new Guid(this._options.SubscriptionId),
                      documentName : storageDocName).ConfigureAwait(false);

            if (responseSasUri.Response.StatusCode != System.Net.HttpStatusCode.OK)
            {
                throw new UnauthorizedAccessException("You don't have permission to upload");
            }

            var sasTokenUri = new Uri(responseSasUri.Body);

            var containerAddress =
                new Uri($"{sasTokenUri.Scheme}://{sasTokenUri.Host}/{sasTokenUri.AbsolutePath.Split('/')[1]}");

            CloudBlobContainer container = new CloudBlobContainer(
                containerAddress,
                new StorageCredentials(sasTokenUri.Query));

            var uploadResponse = await UploadDocumentToAzureStorage(document, storageDocName, container, parameters.BufferSize)
                                 .ConfigureAwait(false);

            if (uploadResponse.StatusCode != System.Net.HttpStatusCode.OK)
            {
                throw new ApplicationException("Upload Failed");
            }

            var updateDataRequest = new CitizenDocumentUploadRequestModel
            {
                Id                      = documentId,
                SubscriptionId          = parameters.SubscriptionId,
                DocumentUrl             = $"{containerAddress}/{storageDocName}",
                Status                  = "Completed",
                Cpr                     = parameters.Cpr,
                DocumentName            = parameters.DocumentName,
                DocumentType            = parameters.DocumentType,
                RetentionPeriodInDays   = parameters.RetentionPeriodInDays,
                CitizenDocumentConfigId = parameters.CitizenDocumentConfigId,
            };

            using var updateResponse = await client.UpdateDataToDbWithHttpMessagesAsync(
                      subscriptionId : new Guid(this._options.SubscriptionId),
                      updateDataRequest).ConfigureAwait(false);

            switch (updateResponse.Response.StatusCode)
            {
            case System.Net.HttpStatusCode.OK:
                return((CitizenDocumentUploadResponse)updateResponse.Body);

            case System.Net.HttpStatusCode.Unauthorized:
                throw new CitizenDocumentsException("Unauthorized", updateResponse.Body as string);

            default:
                throw new CitizenDocumentsException(
                          "Invalid configuration provided to access Citizen Document service",
                          updateResponse.Body as string);
            }
        }