/// <summary>
        /// GetBLOB method implmentation
        /// </summary>
        public override Task <MetadataBLOBPayload> GetBLOB()
        {
            bool needrawblob = false;
            MetadataBLOBPayload     result = null;
            BLOBPayloadInformations infos  = new BLOBPayloadInformations();

            if (HasBLOBPayloadCache())
            {
                infos = GetBLOBPayloadCache();
                if (string.IsNullOrEmpty(infos.BLOB))
                {
                    return(null);
                }
                int      oldnumber     = infos.Number;
                DateTime oldnextupdate = infos.NextUpdate;
                result = DeserializeAndValidateBlob(infos);
                if ((infos.Number > oldnumber) || (Convert.ToDateTime(infos.NextUpdate) > Convert.ToDateTime(oldnextupdate)))
                {
                    needrawblob = true;
                }
            }
            else
            {
                return(null);
            }
            if (needrawblob)
            {
                if (string.IsNullOrEmpty(infos.BLOB))
                {
                    return(null);
                }
                SetBLOBPayloadCache(infos);
            }
            return(Task.FromResult(result));
        }
Exemplo n.º 2
0
        /// <summary>
        /// GetBLOB method implementation
        /// </summary>
        public async Task <MetadataBLOBPayload> GetBLOB()
        {
            var req = new
            {
                endpoint = _origin
            };

            var content  = new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(req), Encoding.UTF8, "application/json");
            var response = await _httpClient.PostAsync(_getEndpointsUrl, content);

            var result = Newtonsoft.Json.JsonConvert.DeserializeObject <MDSGetEndpointResponse>(await response.Content.ReadAsStringAsync());
            var conformanceEndpoints = new List <string>(result.Result);

            var combinedBlob = new MetadataBLOBPayload
            {
                Number     = -1,
                NextUpdate = "2099-08-07"
            };

            var entries = new List <MetadataBLOBPayloadEntry>();

            foreach (var BLOBUrl in conformanceEndpoints)
            {
                var rawBlob = await DownloadStringAsync(BLOBUrl);

                MetadataBLOBPayload blob = null;

                try
                {
                    blob = await DeserializeAndValidateBlob(rawBlob);
                }
                catch
                {
                    continue;
                }

                if (string.Compare(blob.NextUpdate, combinedBlob.NextUpdate) < 0)
                {
                    combinedBlob.NextUpdate = blob.NextUpdate;
                }
                if (combinedBlob.Number < blob.Number)
                {
                    combinedBlob.Number = blob.Number;
                }

                foreach (var entry in blob.Entries)
                {
                    entries.Add(entry);
                }
                combinedBlob.JwtAlg = blob.JwtAlg;
            }

            combinedBlob.Entries = entries.ToArray();
            return(combinedBlob);
        }
 /// <summary>
 /// GetMetadataStatement method implementation
 /// </summary>
 public virtual Task <MetadataStatement> GetMetadataStatement(MetadataBLOBPayload blob, MetadataBLOBPayloadEntry entry)
 {
     return(Task.FromResult <MetadataStatement>(entry.MetadataStatement));
 }