public async Task RegisterAsync(RegistrationRequest request, RemoteBillingService billingService)
        {
            using (var repository = new Repository <User>(_provider)) {
                var user = await repository.Get(x => x.UserName == request.UserAccount.Email).SingleOrDefaultAsync();

                if (user != null && user.Confirmed.HasValue)
                {
                    throw new SmartcontractException($"Пользователь с e-mail {request.UserAccount.Email} уже зарегистрирован в системе", ApiErrorCode.ValidationError);
                }
                else if (user != null && !user.Confirmed.HasValue)
                {
                    throw new SmartcontractException($"На эту почту уже отправлена ссылка для подтверждения почты", ApiErrorCode.ValidationError);
                }

                user = new User {
                    Email    = request.UserAccount.Email,
                    UserName = request.UserAccount.Email,
                    Phone    = request.UserAccount.Phone
                };
                if (request.InvitedUser)
                {
                    user.Confirmed = DateTime.Now;
                }
                var signedCms = CertificatesHelper.DecodeCmsFromString(request.SignedCms);
                foreach (var certificate in signedCms.Certificates)
                {
                    var information = CertificatesHelper.ReadX509CertificateCommonData(certificate);
                    if (information.SerialNumber != request.Profile.PersonIin)
                    {
                        throw new SmartcontractException("ИИН в подписи не соответствует ИИН профиля", ApiErrorCode.ValidationError);
                    }
                    if (!string.IsNullOrEmpty(request.Profile.OrganizationXin))
                    {
                        if (information.Bin != request.Profile.OrganizationXin && request.Profile.OrganizationXin != request.Profile.PersonIin)
                        {
                            throw new SmartcontractException("БИН в подписи не соответствует БИН организации", ApiErrorCode.ValidationError);
                        }
                    }
                }

                await billingService.RegisterUserAsync(user.UserName, user.UserName);

                await billingService.AddFreePacketAsync(user.UserName);

                repository.Insert(user);
                user.Password = _passwordHasher.HashPassword(user, request.UserAccount.Password);
                repository.Update(user);
                var profileManager = new ProfileManager(_provider);
                await profileManager.CreateOrAttachToProfile(request.Profile, request.InvitedUser, user.UserName, repository);

                repository.Commit();
            }
        }
        public async Task <IActionResult> GetSubjectData([FromBody] RegistrationCmsRequest request,
                                                         [FromServices] ICryptoProviderService cryptoProvider)
        {
            var signedCms = CertificatesHelper.DecodeCmsFromString(request.Cms);
            var OSCPval   = await cryptoProvider.VerifyExpiredCert(request.Cms);

            if (OSCPval)
            {
                return(Json(ApiResponse.Failed(ApiErrorCode.ValidationError, "Отозванный сертификат невозможно использовать в системе")));
            }

            if (signedCms.Certificates.Count == 0)
            {
                return(Json(ApiResponse.Failed(ApiErrorCode.ResourceNotFound, "У сертификата отсутствуют данные")));
            }
            var certificate = signedCms.Certificates[0];
            var data        = CertificatesHelper.ReadX509CertificateCommonData(certificate);

            return(Json(ApiResponse.Success(data)));
        }