示例#1
0
        private bool UpdateIndexTags(SoftwareIdentity indexJsonTag, SoftwareIdentity indexXmlTag, List <AddedTagResult> addedTags, List <UpdatedTagResult> updatedTags, List <DeleteTagResult> deleteTags)
        {
            var any = false;

            foreach (var added in addedTags)
            {
                indexJsonTag.AddLink(added.NewSourceUris.JsonUri, "package");
                indexXmlTag.AddLink(added.NewSourceUris.XmlUri, "package");

                any = true;
            }

            foreach (var update in updatedTags)
            {
                indexJsonTag.RemoveLink(update.OldSourceUris.JsonUri);
                indexXmlTag.RemoveLink(update.OldSourceUris.XmlUri);

                indexJsonTag.AddLink(update.NewSourceUris.JsonUri, "package");
                indexXmlTag.AddLink(update.NewSourceUris.XmlUri, "package");

                any = true;
            }

            foreach (var uri in deleteTags)
            {
                indexJsonTag.RemoveLink(uri.DeleteSourceUris.JsonUri);
                indexXmlTag.RemoveLink(uri.DeleteSourceUris.XmlUri);

                any = true;
            }

            return(any);
        }
示例#2
0
        public void Links()
        {
            using (CaptureConsole) {
                var swid = new SoftwareIdentity();

                // add some data
                var link = swid.AddLink(new Uri("http://foo.com"), "homepage");

                var link2 = swid.AddLink(new Uri("swid:/somepackage-v1.0"), "dependency");
                link2.Artifact  = "somepkg";
                link2.Media     = "Windows";
                link2.MediaType = "text/none";
                link2.Ownership = "abandon";
                link2.Use       = "required";

                var link3 = swid.AddLink(new Uri("http://foo.com/somepackage.msi"), "package");
                link3.Artifact  = "somepkg";
                link3.Media     = "Windows";
                link3.MediaType = "binary/package";
                link3.Use       = "required";

                // to xml
                var xml = XDocument.Parse(swid.SwidTagText);
                Console.WriteLine("SWID: {0} ", swid.SwidTagText);

                // assertions
                Assert.Equal(3, swid.Links.Count());
                Assert.Equal("http://foo.com/", link.HRef.ToString());
                Assert.Equal("homepage", link.Relationship);
                Assert.Equal(2, link.Attributes.Count);

                Assert.Equal(link3.Artifact, link2.Artifact);

                // some xml-based assertions:
                Assert.Equal("http://foo.com/", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[1]//@href").Value);

                Assert.Equal("swid:/somepackage-v1.0", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@href").Value);
                Assert.Equal("somepkg", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@artifact").Value);
                Assert.Equal("Windows", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@media").Value);
                Assert.Equal("text/none", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@type").Value);
                Assert.Equal("abandon", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@ownership").Value);
                Assert.Equal("required", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@use").Value);
            }
        }
示例#3
0
        public bool YieldLink(string parentFastPath, string referenceUri, string relationship, string mediaType, string ownership, string use, string appliesToMedia, string artifact)
        {
            if (_currentSoftwareIdentity == null || parentFastPath != _currentSoftwareIdentity.FastPackageReference)
            {
                Console.WriteLine("TEMPORARY: SHOULD NOT GET HERE [YieldSoftwareMetadata] ================================================");
            }

            if (_currentSoftwareIdentity != null)
            {
                _currentSoftwareIdentity.AddLink(referenceUri, relationship, mediaType, ownership, use, appliesToMedia, artifact);
            }

            return(Continue);
        }
示例#4
0
        private static IEnumerable <RedirectEntity> UpdateInstallationMediaLinksInSoftwareIdentityAndReturnWithRedirects(string tagPartitionKey, string tagRowKey, SoftwareIdentity swidtag)
        {
            foreach (var installationLink in swidtag.Links.Where(l => l.Relationship == FearTheCowboy.Iso19770.Schema.Relationship.InstallationMedia))
            {
                var redirect = new RedirectEntity(tagPartitionKey, tagRowKey, installationLink.HRef.AbsoluteUri, installationLink.MediaType, installationLink.Media, null);

                swidtag.RemoveLink(installationLink.HRef);

                var redirectUri = new Uri(redirect.RedirectUri);

                swidtag.AddLink(redirectUri, FearTheCowboy.Iso19770.Schema.Relationship.InstallationMedia);

                yield return(redirect);
            }
        }
        private async Task UpdateTagIndex(IEnumerable <TagEntity> tags, DateTime now)
        {
            var tagContainerName = this.TagBlobContainer.Name;

            var tagsByChannel = tags.GroupBy(t => t.Channel);
            var version       = now.ToString("yyyy.MMdd.HHmm.ss");

            foreach (var tagsInChannel in tagsByChannel)
            {
                var channel = tagsInChannel.Key;
                var tagId   = channel.Length > 1 ? $"http://www.appsyndication.com/{channel}/tags/?v{version}" : $"http://www.appsyndication.com/tags/?v{version}";

                var swidtagJ = new SoftwareIdentity();
                swidtagJ.Name    = "AppSyndication Index" + (channel.Length > 1 ? " for Channel: " + channel.Substring(1) : String.Empty);
                swidtagJ.TagId   = tagId + "&format=json";
                swidtagJ.Version = version;

                var swidtagX = new SoftwareIdentity();
                swidtagX.Name    = "AppSyndication Index" + (channel.Length > 1 ? " for Channel: " + channel.Substring(1) : String.Empty);
                swidtagX.TagId   = tagId + "&format=xml";
                swidtagX.Version = version;

                foreach (var tag in tagsInChannel.Where(t => t.Primary))
                {
                    var uriJ = new Uri(tag.JsonBlobName, UriKind.Relative);
                    var l    = swidtagJ.AddLink(uriJ, "package");
                    l.Name    = tag.Name;
                    l.Version = tag.Version;
                    l.Media   = tag.Media;

                    var uriX = new Uri(tag.XmlBlobName, UriKind.Relative);
                    l         = swidtagX.AddLink(uriX, "package");
                    l.Name    = tag.Name;
                    l.Version = tag.Version;
                    l.Media   = tag.Media;
                }

                await this.WriteIndexTags(channel, swidtagJ, swidtagX);
            }
        }
示例#6
0
        public void Links()
        {
            using (CaptureConsole) {
                var swid = new SoftwareIdentity();

                // add some data
                var link = swid.AddLink(new Uri("http://foo.com"), "homepage");

                var link2 = swid.AddLink(new Uri("swid:/somepackage-v1.0"), "dependency");
                link2.Artifact = "somepkg";
                link2.Media = "Windows";
                link2.MediaType = "text/none";
                link2.Ownership = "abandon";
                link2.Use = "required";

                var link3 = swid.AddLink(new Uri("http://foo.com/somepackage.msi"), "package");
                link3.Artifact = "somepkg";
                link3.Media = "Windows";
                link3.MediaType = "binary/package";
                link3.Use = "required";

                // to xml
                var xml = XDocument.Parse(swid.SwidTagText);
                Console.WriteLine("SWID: {0} ", swid.SwidTagText);

                // assertions
                Assert.Equal(3, swid.Links.Count());
                Assert.Equal("http://foo.com/", link.HRef.ToString());
                Assert.Equal("homepage", link.Relationship);
                Assert.Equal(2, link.Attributes.Count);

                Assert.Equal(link3.Artifact, link2.Artifact);

                // some xml-based assertions:
                Assert.Equal("http://foo.com/", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[1]//@href").Value);

                Assert.Equal("swid:/somepackage-v1.0", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@href").Value);
                Assert.Equal("somepkg", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@artifact").Value);
                Assert.Equal("Windows", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@media").Value);
                Assert.Equal("text/none", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@type").Value);
                Assert.Equal("abandon", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@ownership").Value);
                Assert.Equal("required", xml.XPathToAttribute("/swid:SoftwareIdentity/swid:Link[2]/@use").Value);
            }
        }