Пример #1
0
 public static OpenXmlPowerToolsDocument Insert(OpenXmlPowerToolsDocument doc, IEnumerable <string> certificateList)
 {
     using (OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(doc))
     {
         using (Package package = streamDoc.GetPackage())
         {
             foreach (string digitalCertificate in certificateList)
             {
                 X509Certificate x509Certificate = X509Certificate2.CreateFromCertFile(digitalCertificate);
                 PackageDigitalSignatureManager digitalSigntaureManager = new PackageDigitalSignatureManager(package);
                 digitalSigntaureManager.CertificateOption = CertificateEmbeddingOption.InSignaturePart;
                 System.Collections.Generic.List <Uri> partsToSign = new System.Collections.Generic.List <Uri>();
                 //Adds each part to the list, except relationships parts.
                 foreach (PackagePart openPackagePart in package.GetParts())
                 {
                     if (!PackUriHelper.IsRelationshipPartUri(openPackagePart.Uri))
                     {
                         partsToSign.Add(openPackagePart.Uri);
                     }
                 }
                 List <PackageRelationshipSelector> relationshipSelectors = new List <PackageRelationshipSelector>();
                 //Creates one selector for each package-level relationship, based on id
                 foreach (PackageRelationship relationship in package.GetRelationships())
                 {
                     PackageRelationshipSelector relationshipSelector =
                         new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id);
                     relationshipSelectors.Add(relationshipSelector);
                 }
                 digitalSigntaureManager.Sign(partsToSign, x509Certificate, relationshipSelectors);
             }
         }
         return(streamDoc.GetModifiedDocument());
     }
 }
Пример #2
0
        static void AddSignableItems(
            PackageRelationship relationship,
            List <Uri> partsToSign,
            List <PackageRelationshipSelector> relationshipsToSign)
        {
            PackageRelationshipSelector selector =
                new PackageRelationshipSelector(
                    relationship.SourceUri,
                    PackageRelationshipSelectorType.Id,
                    relationship.Id);

            relationshipsToSign.Add(selector);
            if (relationship.TargetMode == TargetMode.Internal)
            {
                PackagePart part = relationship.Package.GetPart(
                    PackUriHelper.ResolvePartUri(
                        relationship.SourceUri, relationship.TargetUri));
                if (partsToSign.Contains(part.Uri) == false)
                {
                    partsToSign.Add(part.Uri);
                    foreach (PackageRelationship childRelationship in
                             part.GetRelationships())
                    {
                        AddSignableItems(childRelationship,
                                         partsToSign, relationshipsToSign);
                    }
                }
            }
        }
Пример #3
0
        static void CreateListOfSignableItems(PackageRelationship relationship, List <Uri> PartstobeSigned, List <PackageRelationshipSelector> SignableReleationships)
        {
            // This function adds the releation to SignableReleationships. And then it gets the part based on the releationship. Parts URI gets added to the PartstobeSigned list.
            PackageRelationshipSelector selector = new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id);

            SignableReleationships.Add(selector);
            if (relationship.TargetMode == TargetMode.Internal)
            {
                PackagePart part = relationship.Package.GetPart(PackUriHelper.ResolvePartUri(relationship.SourceUri, relationship.TargetUri));
                if (PartstobeSigned.Contains(part.Uri) == false)
                {
                    PartstobeSigned.Add(part.Uri);
                    // GetRelationships Function: Returns a Collection Of all the releationships that are owned by the part.
                    foreach (PackageRelationship childRelationship in part.GetRelationships())
                    {
                        CreateListOfSignableItems(childRelationship, PartstobeSigned, SignableReleationships);
                    }
                }
            }
        }
Пример #4
0
        private static void AddSignableItems(PackageRelationship relationship, ICollection <Uri> partsToSign, ICollection <PackageRelationshipSelector> relationshipsToSign)
        {
            var selector = new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id);

            relationshipsToSign.Add(selector);
            if (relationship.TargetMode != TargetMode.Internal)
            {
                return;
            }
            var part = relationship.Package.GetPart(
                PackUriHelper.ResolvePartUri(
                    relationship.SourceUri, relationship.TargetUri));

            if (partsToSign.Contains(part.Uri))
            {
                return;
            }
            partsToSign.Add(part.Uri);
            foreach (var childRelationship in part.GetRelationships())
            {
                AddSignableItems(childRelationship, partsToSign, relationshipsToSign);
            }
        }
Пример #5
0
 private void CreateListOfSignableItems(PackageRelationship relationship, List <Uri> PartstobeSigned, List <PackageRelationshipSelector> SignableReleationships)
 {
     try
     {
         PackageRelationshipSelector packageRelationshipSelector = new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id);
         SignableReleationships.Add(packageRelationshipSelector);
         if (relationship.TargetMode == TargetMode.Internal)
         {
             PackagePart part = relationship.Package.GetPart(PackUriHelper.ResolvePartUri(relationship.SourceUri, relationship.TargetUri));
             if (!PartstobeSigned.Contains(part.Uri))
             {
                 PartstobeSigned.Add(part.Uri);
                 foreach (PackageRelationship packageRelationship in part.GetRelationships())
                 {
                     this.CreateListOfSignableItems(packageRelationship, PartstobeSigned, SignableReleationships);
                 }
             }
         }
     }
     catch (Exception exception)
     {
         throw new Exception(exception.Message);
     }
 }
Пример #6
0
        public void T044_PackageRelationshipSelectorFromPackage()
        {
            var docName = "plain.docx";
            var ba = File.ReadAllBytes(docName);
            const string DocumentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";

            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(ba, 0, ba.Length);
                using (Package package = Package.Open(ms, FileMode.Open))
                {
                    var mainPartUri = new Uri("/", UriKind.Relative);
                    PackageRelationshipSelector prs = new PackageRelationshipSelector(mainPartUri, PackageRelationshipSelectorType.Type, DocumentRelationshipType);
                    var cnt = prs.Select(package).Count();
                    Assert.Equal(cnt, 1);
                }
            }
        }
Пример #7
0
        public void T045_PackageRelationshipSelectorFromPackageUsingId()
        {
            var docName = "plain.docx";
            var ba = File.ReadAllBytes(docName);

            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(ba, 0, ba.Length);
                using (Package package = Package.Open(ms, FileMode.Open))
                {
                    var mainPartUri = new Uri("/", UriKind.Relative);
                    PackageRelationshipSelector prs = new PackageRelationshipSelector(mainPartUri, PackageRelationshipSelectorType.Id, "rId1");
                    var cnt = prs.Select(package).Count();
                    Assert.Equal(cnt, 1);
                }
            }
        }
Пример #8
0
        public void T046_PackageRelationshipSelectorFromPartUsingId()
        {
            var docName = "plain.docx";
            var ba = File.ReadAllBytes(docName);
            const string DocumentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";

            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(ba, 0, ba.Length);
                using (Package package = Package.Open(ms, FileMode.Open))
                {
                    PackageRelationship docPackageRelationship =
                      package
                      .GetRelationshipsByType(DocumentRelationshipType)
                      .FirstOrDefault();

                    if (docPackageRelationship != null)
                    {
                        Uri documentUri =
                            PackUriHelper
                            .ResolvePartUri(
                               new Uri("/", UriKind.Relative),
                                     docPackageRelationship.TargetUri);
                        Assert.Throws<ArgumentNullException>(() => new PackageRelationshipSelector(null, PackageRelationshipSelectorType.Id, "rId1"));
                        Assert.Throws<ArgumentNullException>(() => new PackageRelationshipSelector(documentUri, PackageRelationshipSelectorType.Id, null));
                        PackageRelationshipSelector prs = new PackageRelationshipSelector(documentUri, PackageRelationshipSelectorType.Id, "rId1");
                        var cnt = prs.Select(package).Count();
                        Assert.Equal(cnt, 1);
                    }
                }
            }
        }
Пример #9
0
        public void T043_PackageRelationshipSelector()
        {
            var docName = "plain.docx";
            var ba = TestFileLib.GetByteArray(docName);
            const string StylesRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";

            using (MemoryStream ms = new MemoryStream())
            {
                ms.Write(ba, 0, ba.Length);
                using (Package package = Package.Open(ms, FileMode.Open))
                {
                    var mainPartUri = new Uri("/word/document.xml", UriKind.Relative);
                    PackageRelationshipSelector prs = new PackageRelationshipSelector(mainPartUri, PackageRelationshipSelectorType.Type, StylesRelationshipType);
                    var cnt = prs.Select(package).Count();
                    Assert.Equal(cnt, 1);
                }
            }
        }