Example #1
0
        private static void AddAttributeConsumingServices(SPOptions options)
        {
            var a1 = new RequestedAttribute("urn:attributeName")
            {
                FriendlyName          = "friendlyName",
                NameFormat            = RequestedAttribute.AttributeNameFormatUri,
                AttributeValueXsiType = ClaimValueTypes.String,
                IsRequired            = true
            };

            a1.Values.Add("value1");
            a1.Values.Add("value2");

            var a2 = new RequestedAttribute("someName");

            var acs = new AttributeConsumingService("attributeServiceName")
            {
                IsDefault = true
            };

            acs.RequestedAttributes.Add(a1);
            acs.RequestedAttributes.Add(a2);

            options.AttributeConsumingServices.Add(acs);
        }
Example #2
0
        public override bool Equals(object obj)
        {
            if (!(obj is RequestedAttribute))
            {
                return(false);
            }
            RequestedAttribute other = (RequestedAttribute)obj;

            return(_requestedTable == other._requestedTable && _columnName == other._columnName);
        }
Example #3
0
        public async Task Fill(ProofRequestViewModel proof)
        {
            var context = await _agentContextProvider.GetContextAsync();

            var proofRecord = await _recordService.GetAsync <ProofRecord>(context.Wallet, proof.Id);

            var holderProofObject = JsonConvert.DeserializeObject <ProofRequest>(proofRecord.RequestJson);

            //var credentials = await _proofService.ListCredentialsForProofRequestAsync(context, holderProofObject, "username");

            if (proofRecord.State == ProofState.Requested)
            {
                var proofRequest = JsonConvert.DeserializeObject <ProofRequest>(proofRecord.RequestJson);
                foreach (var requestedAttribute3 in proofRequest.RequestedAttributes)
                {
                    var requestedAttribute = requestedAttribute3.Value;
                    if (requestedAttribute.Restrictions.Count > 0)
                    {
                        if (!string.IsNullOrEmpty(requestedAttribute.Restrictions[0].CredentialDefinitionId))
                        {
                            foreach (var credentialRecord in await _credentialService.ListIssuedCredentialsAsync(context))
                            {
                                if (credentialRecord.CredentialDefinitionId == requestedAttribute.Restrictions[0].CredentialDefinitionId)
                                {
                                    var requestedAttribute2 = new RequestedAttribute
                                    {
                                        CredentialId = credentialRecord.CredentialId,
                                        Timestamp    = ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeMilliseconds()
                                    };

                                    //proof.BuildRequestedAttributesPredicatesMap(credentialRecord);
                                    foreach (var pa in proof.Attributes)
                                    {
                                        if (pa.Name == requestedAttribute.Name)
                                        {
                                            foreach (var cav in credentialRecord.CredentialAttributesValues)
                                            {
                                                if (cav.Name == requestedAttribute.Name)
                                                {
                                                    pa.Value        = cav.Value.ToString();
                                                    pa.CredentialId = credentialRecord.CredentialId;
                                                    //if (proof.RequestedAttributesMap.ContainsKey(requestedAttribute3.Key))
                                                    //{
                                                    //    if (proof.RequestedAttributesMap[requestedAttribute3.Key]?.CredentialId !=
                                                    //        requestedAttribute2.CredentialId)
                                                    //        proof.RequestedAttributesMap[requestedAttribute3.Key] = requestedAttribute2;
                                                    //}
                                                    //else
                                                    //{
                                                    //    proof.RequestedAttributesMap.Add(requestedAttribute3.Key, requestedAttribute2);
                                                    //}
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            int bla = 1;
        }
 public static AttributeConsumingService RequestAttribute(this AttributeConsumingService service, RequestedAttribute attribute)
 {
     service.RequestedAttributes.Add(attribute);
     return(service);
 }
        private async Task SelectCredentialsForProofAsync(IAgentContext agentContext, ProofRecord proof, ConnectionRecord connection)
        {
            var            requestJson              = (JObject)JsonConvert.DeserializeObject(proof.RequestJson);
            JObject        _requestedAttributes     = (JObject)requestJson["requested_attributes"];
            JObject        _requestedPredicates     = (JObject)requestJson["requested_predicates"];
            IList <string> _requestedAttributesKeys = _requestedAttributes?.Properties().Select(p => p.Name).ToList();
            IList <string> _requestedPredicatesKeys = _requestedPredicates?.Properties().Select(p => p.Name).ToList();
            JToken         cred_def_id              = null;

            try
            {
                cred_def_id = _requestedAttributes[_requestedAttributesKeys[0]]["restrictions"][0]["cred_def_id"];
            }
            catch (Exception)
            {
                cred_def_id = null;
            }
            var credentials = new List <CredentialRecord>();

            if (cred_def_id != null)
            {
                credentials = await RecordService.SearchAsync <CredentialRecord>(agentContext.Wallet,
                                                                                 SearchQuery.And(SearchQuery.Equal(nameof(CredentialRecord.State), CredentialState.Issued.ToString("G")),
                                                                                                 SearchQuery.Equal(nameof(CredentialRecord.CredentialDefinitionId), cred_def_id.ToString())), null, 100);
            }
            else
            {
                credentials = await RecordService.SearchAsync <CredentialRecord>(agentContext.Wallet,
                                                                                 SearchQuery.Equal(nameof(CredentialRecord.State), CredentialState.Issued.ToString("G")), null, 100);
            }
            bool credentialFound = false;

            if (credentials.Count > 0)
            {
                Dictionary <string, RequestedAttribute> requestedAttributes = new Dictionary <string, RequestedAttribute>();
                Dictionary <string, RequestedAttribute> requestedPredicates = new Dictionary <string, RequestedAttribute>();
                foreach (var credential in credentials)
                {
                    if (!credentialFound)
                    {
                        IEnumerable <CredentialAttribute> Attributes = credential.CredentialAttributesValues
                                                                       .Select(p =>
                                                                               new CredentialAttribute()
                        {
                            Name  = p.Name,
                            Value = p.Value?.ToString(),
                            Type  = "Text"
                        })
                                                                       .ToList();


                        foreach (var item in _requestedAttributesKeys)
                        {
                            foreach (var attrib in Attributes)
                            {
                                if (_requestedAttributes[item]["name"].ToString() == attrib.Name)
                                {
                                    RequestedAttribute requestedAttribute = new RequestedAttribute();
                                    requestedAttribute.CredentialId = credential.CredentialId;
                                    requestedAttribute.Revealed     = true;
                                    requestedAttribute.Timestamp    = ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeMilliseconds();
                                    requestedAttributes.Add(item, requestedAttribute);
                                    credentialFound = true;
                                }
                            }
                            if (!credentialFound)
                            {
                                requestedAttributes.Clear();
                            }
                        }

                        foreach (var item in _requestedPredicatesKeys)
                        {
                            RequestedAttribute requestedAttribute = new RequestedAttribute();
                            requestedAttribute.CredentialId = credential.CredentialId;
                            requestedAttribute.Timestamp    = ((DateTimeOffset)DateTime.UtcNow).ToUnixTimeMilliseconds();
                            requestedPredicates.Add(item, requestedAttribute);
                        }
                    }
                }

                if (credentialFound)
                {
                    RequestedCredentials requestedCredentials = new RequestedCredentials();
                    requestedCredentials.RequestedAttributes = requestedAttributes;
                    requestedCredentials.RequestedPredicates = requestedPredicates;
                    var proofJson = await CreateProofJsonAsync(agentContext, requestedCredentials, proof.RequestJson);

                    var threadId = proof.GetTag(TagConstants.LastThreadId);

                    var proofMsg = new ProofMessage
                    {
                        ProofJson = proofJson
                    };

                    proofMsg.ThreadFrom(threadId);
                    await MessageService.SendAsync(agentContext.Wallet, proofMsg, connection);
                }
            }
        }