public async Task <ActionResult> StartSigningAsync(
            CreateSigningRequestUploadApiModel request)
        {
            if (ModelState.IsValid && (request.CertificateRequestFile != null || request.ApiModel.CertificateRequest != null))
            {
                var requestApi = request.ApiModel;
                if (request.CertificateRequestFile != null)
                {
                    using (var memoryStream = new MemoryStream())
                    {
                        await request.CertificateRequestFile.CopyToAsync(memoryStream);

                        requestApi.CertificateRequest = Convert.ToBase64String(memoryStream.ToArray());
                    }
                }
                AuthorizeClient();
                string errorMessage = null;
                string id;
                try
                {
                    id = await _opcVault.CreateSigningRequestAsync(requestApi);
                }
                catch (Exception ex)
                {
                    ViewData["ErrorMessage"] =
                        "Failed to create Signing Request.\r\n" +
                        "Message:" + ex.Message;
                    return(View(request));
                }

                try
                {
                    // TODO: call depending on auto approve setup
                    //await opcVault.ApproveCertificateRequestAsync(id, false);
                }
                catch (Exception ex)
                {
                    errorMessage =
                        "Failed to approve signing request." +
                        "Message: " + ex.Message;
                }
                return(RedirectToAction("Details", new { id, errorMessage }));
            }
            return(View(request));
        }
        public async Task <ActionResult> StartSigningAsync(string id)
        {
            AuthorizeClient();
            var groups = await _opcVault.GetCertificateGroupsConfigurationAsync();

            if (groups == null)
            {
                return(new NotFoundResult());
            }

            string defaultGroupId, defaultTypeId;

            if (groups.Groups.Count > 0)
            {
                defaultGroupId = groups.Groups[0].Name;
                defaultTypeId  = groups.Groups[0].CertificateType;
            }
            else
            {
                return(new NotFoundResult());
            }

            var application = await _opcVault.GetApplicationAsync(id);

            if (application == null)
            {
                return(new NotFoundResult());
            }

            var request = new CreateSigningRequestUploadApiModel()
            {
                ApiModel = new CreateSigningRequestApiModel()
                {
                    ApplicationId      = id,
                    CertificateGroupId = defaultGroupId,
                    CertificateTypeId  = defaultTypeId
                },
                ApplicationUri  = application.ApplicationUri,
                ApplicationName = application.ApplicationName
            };

            return(View(request));
        }