public async Task <IActionResult> Edit(Guid id, [Bind("Id,CredentialSchemaId,UserId")] ClaimDefinition claimDefinition)
        {
            if (id != claimDefinition.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(claimDefinition);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!ClaimDefinitionExists(claimDefinition.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["CredentialSchemaId"] = new SelectList(_context.CredentialSchemas, "Id", "Attributes", claimDefinition.CredentialSchemaId);
            ViewData["UserId"]             = new SelectList(_context.Users, "Id", "Id", claimDefinition.UserId);
            return(View(claimDefinition));
        }
        public async Task <ClaimDefinition> CreateClaimDefinitionAsync(string userId, Guid credentialSchemaId)
        {
            var schema = await _dbContext.CredentialSchemas.Include(p => p.User).FirstOrDefaultAsync(p => p.Id == credentialSchemaId);

            var schemaCreatorWalletData = await GetDefaultWalletDataAsync(schema.UserId);

            var walletData = await GetDefaultWalletDataAsync(userId);

            var wallet = await Wallet.OpenWalletAsync(walletData.Name, null, null);

            try
            {
                using (var pool = await PoolUtils.CreateAndOpenPoolLedgerAsync())
                {
                    var schemaData = JsonConvert.SerializeObject(new
                    {
                        name    = schema.Name,
                        version = schema.Version
                    });

                    var getSchemaRequest = await Ledger.BuildGetSchemaRequestAsync(walletData.Did, schemaCreatorWalletData.Did, schemaData);

                    var getSchemaResponse = await Ledger.SubmitRequestAsync(pool, getSchemaRequest);

                    var schemaValue  = JObject.Parse(getSchemaResponse).GetValue("result");
                    var claimDefJson = await AnonCreds.IssuerCreateAndStoreClaimDefAsync(wallet, walletData.Did, schemaValue.ToString(), "CL", false);

                    var claimDef        = JObject.Parse(claimDefJson);
                    var claimDefRequest = await Ledger.BuildClaimDefTxnAsync(walletData.Did, claimDef.Value <int>("ref"), claimDef.Value <string>("signature_type"), claimDef.GetValue("data").ToString());

                    var result = await Ledger.SignAndSubmitRequestAsync(pool, wallet, walletData.Did, claimDefRequest);

                    var claimDefinition = new ClaimDefinition
                    {
                        Id = Guid.NewGuid(),
                        CredentialSchemaId = credentialSchemaId,
                        UserId             = userId
                    };

                    _dbContext.ClaimDefinitions.Add(claimDefinition);
                    await _dbContext.SaveChangesAsync();

                    return(claimDefinition);
                }
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                await wallet.CloseAsync();
            }
        }
        public async Task <IActionResult> Create([Bind("CredentialSchemaId")] ClaimDefinition claimDefinition)
        {
            if (ModelState.IsValid)
            {
                await _identityService.CreateClaimDefinitionAsync(_userManager.GetUserId(User), claimDefinition.CredentialSchemaId);

                return(RedirectToAction(nameof(Index)));
            }
            ViewData["CredentialSchemaId"] = new SelectList(_context.CredentialSchemas, "Id", "Attributes", claimDefinition.CredentialSchemaId);
            ViewData["UserId"]             = new SelectList(_context.Users, "Id", "Id", claimDefinition.UserId);
            return(View(claimDefinition));
        }