/// <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)); }
/// <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)); }