Exemplo n.º 1
0
        /// <summary>
        /// Extract an unencrypted package in one step.
        /// </summary>
        /// <param name="packagePath">The full file path of the package.</param>
        /// <param name="targetFolderPath">The folder where the file should be extracted to. This folder will be created if needed. Any existing file will be overwritten.</param>
        /// <param name="manifest">The manifest of the package. If null, the package had no manifest.</param>
        /// <param name="filePaths">A list containing the full file paths of all extracted files.</param>
        public static void Extract(string packagePath, string targetFolderPath,
								   out TemplatePackageManifest manifest, out IEnumerable<string> filePaths)
        {
            Extract(packagePath, null, targetFolderPath, out manifest, out filePaths);
        }
Exemplo n.º 2
0
 /// <summary>
 /// Check if a given manifest is valid for the current files in the package.
 /// </summary>
 /// <param name="manifest">The manifest object to test.</param>
 /// <param name="errMsg">If the function returns false, this string will contain an error message.</param>
 /// <returns>true if the manifest is valid, false otherwise.</returns>
 public bool IsValidManifest(TemplatePackageManifest manifest, out string errMsg)
 {
     Dictionary<string, Dependency> dict = new Dictionary<string, Dependency>();
     Dictionary<string, string> dictT = new Dictionary<string, string>();
     string name, key, location;
     DependencyType depType;
     int i;
     //
     if (manifest == null)
     {
         errMsg = "No manifest defined";
         return false;
     }
     if (string.IsNullOrEmpty(manifest.HotDocsVersion))
     {
         errMsg = "Missing HotDocsVersion in manifest";
         return false;
     }
     if (manifest.Version >= 11 && string.IsNullOrEmpty(manifest.PublishDateTime))
     {
         errMsg = "Missing PublishDateTime in manifest";
         return false;
     }
     if (manifest.MainTemplate == null)
     {
         errMsg = "MainTemplate in manifest cannot be null";
         return false;
     }
     location = "MainTemplate";
     if (!CollectDependencies(manifest.MainTemplate, dict, out errMsg))
     {
         errMsg = "Error in " + location + " of manifest: " + errMsg;
         return false;
     }
     name = manifest.MainTemplate.FileName;
     key = name.ToLower();
     dict[key] = new Dependency(name, DependencyType.Assemble);
     dictT[key] = name;
     for (i = 0; i < manifest.OtherTemplates.Length; i++)
     {
         location = string.Format("OtherTemplates[{0}]", i + 1);
         if (!CollectDependencies(manifest.OtherTemplates[i], dict, out errMsg))
         {
             errMsg = "Error in " + location + " of manifest: " + errMsg;
             return false;
         }
         name = manifest.OtherTemplates[i].FileName;
         key = name.ToLower();
         if (dictT.ContainsKey(key))
         {
             errMsg = "Error in " + location + " of manifest: template'" + name + "' has been defined already";
             return false;
         }
         dictT[key] = name;
     }
     foreach (var d in dict)
     {
         key = d.Key;
         name = d.Value.FileName;
         depType = d.Value.DependencyType;
         if (Dependency.IsTemplateDependency(depType) && !dictT.ContainsKey(key))
         {
             errMsg = "Template '" + name + "' is not defined in the manifest but is listed as a dependency";
             return false;
         }
         if (!FileExists(name))
         {
             errMsg = "File '" + name + "' in manifest doesn't exist in the package";
             return false;
         }
     }
     location = "MainTemplate";
     if (!IsValidTemplateInfo(manifest.MainTemplate, dict, out errMsg))
     {
         errMsg = "Error in " + location + " of manifest: " + errMsg;
         return false;
     }
     for (i = 0; i < manifest.OtherTemplates.Length; i++)
     {
         location = string.Format("OtherTemplates[{0}]", i + 1);
         if (!IsValidTemplateInfo(manifest.OtherTemplates[i], dict, out errMsg))
         {
             errMsg = "Error in " + location + " of manifest: " + errMsg;
             return false;
         }
     }
     if (manifest.AdditionalFiles==null)
     {
         errMsg = "AdditionalFiles in manifest cannot be null";
         return false;
     }
     for (i = 0; i < manifest.AdditionalFiles.Length; i++)
     {
         location = string.Format("AdditionalFiles[{0}]", i + 1);
         name = manifest.AdditionalFiles[i];
         if (string.IsNullOrEmpty(name))
         {
             errMsg = location + " in manifest cannot be null or empty";
             return false;
         }
         key = name.ToLower();
         if (dict.ContainsKey(key))
         {
             errMsg = "Additional file '" + name + "' in manifest is already referenced from a template or occurs twice in additional files";
             return false;
         }
         dict[key] = new Dependency(name, DependencyType.NoDependency);
         if (!FileExists(name))
         {
             errMsg = "Additional file '" + name + "' in manifest doesn't exist in the package";
             return false;
         }
     }
     foreach (string s in GetFiles())
     {
         name = s;
         key = name.ToLower();
         if (!dict.ContainsKey(key))
         {
             errMsg = "File '" + name + "' in package is not referenced in manifest";
             return false;
         }
     }
     errMsg = string.Empty;
     return true;
 }
Exemplo n.º 3
0
 public static void Create(string packagePath, TemplatePackageManifest manifest, IEnumerable<string> filePaths)
 {
     Create(packagePath, manifest, filePaths, true);
 }
Exemplo n.º 4
0
        /// <summary>
        /// Extract a package in one step.
        /// </summary>
        /// <param name="packagePath">The full file path of the package.</param>
        /// <param name="rsaParamsXml">RSA key serialized to XML. If null, extract an unencrypted package.</param>
        /// <param name="targetFolderPath">The folder where the file should be extracted to. This folder will be created if needed. Any existing file will be overwritten.</param>
        /// <param name="manifest">The manifest of the package. If null, the package had no manifest.</param>
        /// <param name="filePaths">A list containing the full file paths of all extracted files.</param>
        public static void Extract(string packagePath, string rsaParamsXml, string targetFolderPath,
								   out TemplatePackageManifest manifest, out IEnumerable<string> filePaths)
        {
            TemplatePackage package = new TemplatePackage();
            List<string> fileList = new List<string>();
            string path;
            //
            package.Open(packagePath, rsaParamsXml);
            foreach (var s in package.GetFiles())
            {
                path = package.ExtractFile(s, targetFolderPath);
                fileList.Add(path);
            }
            manifest = package.Manifest;
            filePaths = fileList;
        }
Exemplo n.º 5
0
 /// <summary>
 /// Create an unencrypted package in one step using the default compression option (=Maximum).
 /// </summary>
 /// <param name="packagePath">The full file path were the package should be written to. Any existing file will be overwritten.</param>
 /// <param name="manifest">The manifest of the package. Passing null creates a package without a manifest.</param>
 /// <param name="filePaths">A complete list of all file paths to be added to the package.</param>
 public static void Create(string packagePath, TemplatePackageManifest manifest, IEnumerable<string> filePaths, bool checkForGeneratedFiles)
 {
     Create(packagePath, manifest, filePaths, null, checkForGeneratedFiles);
 }
Exemplo n.º 6
0
 /// <summary>
 /// Create a package in one step using the default compression option (=Maximum).
 /// </summary>
 /// <param name="packagePath">The full file path were the package should be written to. Any existing file will be overwritten.</param>
 /// <param name="manifest">The manifest of the package. Passing null creates a package without a manifest.</param>
 /// <param name="filePaths">A complete list of all file paths to be added to the package.</param>
 /// <param name="rsaParamsXml">RSA key serialized to XML. It can be a public/private key pair or only a public key. If null, save an unencrypted package.</param>
 public static void Create(string packagePath, TemplatePackageManifest manifest, IEnumerable<string> filePaths, string rsaParamsXml, bool checkForGeneratedFiles)
 {
     Create(packagePath, manifest, filePaths, rsaParamsXml, CompressionOption.Maximum, checkForGeneratedFiles);
 }
Exemplo n.º 7
0
 public static void Create(string packagePath, TemplatePackageManifest manifest, IEnumerable<string> filePaths, string rsaParamsXml, CompressionOption compression)
 {
     Create(packagePath, manifest, filePaths, rsaParamsXml, compression, true);
 }
Exemplo n.º 8
0
 /// <summary>
 /// Create a package in one step.
 /// </summary>
 /// <param name="packagePath">The full file path were the package should be written to. Any existing file will be overwritten.</param>
 /// <param name="manifest">The manifest of the package. Passing null creates a package without a manifest.</param>
 /// <param name="filePaths">A complete list of all file paths to be added to the package.</param>
 /// <param name="rsaParamsXml">RSA key serialized to XML. It can be a public/private key pair or only a public key. If null, save an unencrypted package.</param>
 /// <param name="compression">The compression level.</param>
 public static void Create(string packagePath, TemplatePackageManifest manifest, IEnumerable<string> filePaths, string rsaParamsXml, CompressionOption compression, bool checkForGeneratedFiles)
 {
     TemplatePackage package = new TemplatePackage();
     package.CheckForGeneratedFiles = checkForGeneratedFiles;
     //
     package.CurrentCompression = compression;
     foreach (var s in filePaths)
     {
         package.AddFile(s);
     }
     package.Manifest = manifest;
     package.SaveAs(packagePath, rsaParamsXml);
 }
Exemplo n.º 9
0
 private void LoadManifest()
 {
     Uri partUri = InternalNameToPartUri(ManifestName);
     PackagePart packagePart;
     //
     _manifest = null;
     if (_package.PartExists(partUri))
     {
         packagePart = _package.GetPart(partUri);
         using (Stream ps = packagePart.GetStream(FileMode.Open, FileAccess.Read))
         {
             _manifest = TemplatePackageManifest.FromStream(ps);
         }
     }
     else
     {
         throw new Exception("Package has no manifest");
     }
 }