Example #1
0
        /// <inheritdoc />
        public virtual async Task <List <T> > SearchAsync <T>(Wallet wallet, SearchRecordQuery query, SearchRecordOptions options, int count)
            where T : WalletRecord, new()
        {
            using (var search = await NonSecrets.OpenSearchAsync(wallet, new T().GetTypeName(),
                                                                 (query ?? new SearchRecordQuery()).ToJson(),
                                                                 (options ?? new SearchRecordOptions()).ToJson()))
            {
                var result = JsonConvert.DeserializeObject <SearchRecordResult>(await search.NextAsync(wallet, count));
                // TODO: Add support for pagination

                return(result.Records?
                       .Select(x =>
                {
                    var record = JsonConvert.DeserializeObject <T>(x.Value);
                    record.Tags.Clear();
                    foreach (var tag in x.Tags)
                    {
                        record.Tags.Add(tag.Key, tag.Value);
                    }
                    return record;
                })
                       .ToList()
                       ?? new List <T>());
            }
        }
Example #2
0
        /// <inheritdoc />
        public virtual async Task <string> ProcessCredentialRequestAsync(Wallet wallet, CredentialRequestMessage credentialRequest)
        {
            Logger.LogInformation(LoggingEvents.StoreCredentialRequest, "Type {0},", credentialRequest.Type);

            var(didOrKey, _) = MessageUtils.ParseMessageType(credentialRequest.Type);

            var connectionSearch =
                await ConnectionService.ListAsync(wallet, new SearchRecordQuery { { TagConstants.MyDid, didOrKey } });

            if (!connectionSearch.Any())
            {
                throw new Exception($"Can't find connection record for type {credentialRequest.Type}");
            }
            var connection = connectionSearch.First();

            var(details, _) = await MessageSerializer.UnpackSealedAsync <CredentialRequestDetails>(
                credentialRequest.Content, wallet, connection.MyVk);

            var request = JObject.Parse(details.OfferJson);
            var nonce   = request["nonce"].ToObject <string>();

            var query = new SearchRecordQuery {
                { TagConstants.Nonce, nonce }
            };
            var credentialSearch = await RecordService.SearchAsync <CredentialRecord>(wallet, query, null, 1);

            var credential = credentialSearch.Single();

            // Offer should already be present
            // credential.OfferJson = details.OfferJson;

            if (!string.IsNullOrEmpty(details.CredentialValuesJson) && JObject.Parse(details.CredentialValuesJson).Count != 0)
            {
                credential.ValuesJson = details.CredentialValuesJson;
            }

            credential.RequestJson = details.CredentialRequestJson;

            await credential.TriggerAsync(CredentialTrigger.Request);

            await RecordService.UpdateAsync(wallet, credential);

            return(credential.GetId());
        }
 /// <inheritdoc />
 public virtual Task <List <ProofRecord> > ListAsync(Wallet wallet, SearchRecordQuery query = null, int count = 100) =>
 RecordService.SearchAsync <ProofRecord>(wallet, query, null, count);
Example #4
0
        /// <inheritdoc />
        public virtual Task <List <ConnectionRecord> > ListAsync(Wallet wallet, SearchRecordQuery query = null, int count = 100)
        {
            Logger.LogInformation(LoggingEvents.ListConnections, "List Connections");

            return(RecordService.SearchAsync <ConnectionRecord>(wallet, query, null, count));
        }