private void InstallPackage(FileInfo file)
        {
            // in case file disappeared since retrieved
            file.Refresh();
            if (!file.Exists)
            {
                return;
            }

            FridayLog.Info(AutoPackages.FeatureName, $"Install auto package (Skip on conflicts): {file.FullName}");

            using (new SecurityDisabler())
            {
                var context = new SimpleProcessingContext();
                // IItemInstallerEvents type cast is essential
                var items = (IItemInstallerEvents) new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Skip, MergeMode.Undefined));
                context.AddAspect(items);

                // IFileInstallerEvents type cast is essential
                var files = (IFileInstallerEvents) new DefaultFileInstallerEvents(false);
                context.AddAspect(files);

                new Installer().InstallPackage(file.FullName, context);
                new Installer().InstallSecurity(file.FullName, context);

                var previewContext = Installer.CreatePreviewContext();
                var packageReader  = new PackageReader(file.FullName);
                var view           = new MetadataView(previewContext);
                var metadataSink   = new MetadataSink(view);
                metadataSink.Initialize(previewContext);
                packageReader.Populate(metadataSink);

                new Installer().ExecutePostStep(view.PostStep, previewContext);
            }
        }
Exemple #2
0
        public void Install()
        {
            Context.SetActiveSite("shell");
            using (new SecurityDisabler())
            {
                using (new SyncOperationContext())
                {
                    IProcessingContext context = new SimpleProcessingContext();

                    IItemInstallerEvents events = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Clear));
                    context.AddAspect(events);

                    IFileInstallerEvents events1 = new DefaultFileInstallerEvents(true);
                    context.AddAspect(events1);

                    var inst = new Installer();

                    inst.InstallPackage(FileUtil.MapPath(FileName), context);

                    ISource <PackageEntry> source = new PackageReader(FileUtil.MapPath(FileName));
                    var previewContext            = Installer.CreatePreviewContext();
                    var view = new MetadataView(previewContext);
                    var sink = new MetadataSink(view);
                    sink.Initialize(previewContext);
                    source.Populate(sink);
                    inst.ExecutePostStep(view.PostStep, previewContext);
                }
            }
        }
Exemple #3
0
        public string Execute([NotNull] string fileName)
        {
            var sourceFileName = LocalFile.MapPath(fileName);

            var targetFileName = GetTargetFileName(sourceFileName);

            var packageAnalyzer = new PackageAnalyzer(new SimpleProcessingContext());

            var reader = new PackageReader(sourceFileName);

            reader.Populate(packageAnalyzer);

            var newItems = new List <PackageAnalyzer.PackageItem>();
            var newFiles = new List <PackageAnalyzer.PackageFile>();

            var package = new ZipPackageBuilder(targetFileName)
            {
                PackageName = "Anti Package for " + Path.GetFileNameWithoutExtension(sourceFileName),
                Readme      = string.Format("Anti Package for {0}. Created {1} by {2}.", Path.GetFileNameWithoutExtension(sourceFileName), DateTime.Now.ToString(), Context.GetUserName())
            };

            AddItems(packageAnalyzer, package, newItems);
            AddFiles(packageAnalyzer, package, newFiles);
            AddPostStep(package, newItems, newFiles);

            package.Build();

            return(WebUtil.GetServerUrl() + LocalFile.UnmapPath(targetFileName));
        }
        protected override void ProcessRecord()
        {
            if (DisableIndexing.IsPresent)
            {
                WriteWarning($"The parameter {nameof(DisableIndexing)} is no longer used. The functionality has been removed from the Sitecore platform.");
            }

            var fileName = Path;

            PerformInstallAction(() =>
            {
                if (!System.IO.Path.IsPathRooted(fileName))
                {
                    var packagePath = FullPackagePath(fileName);
                    WriteVerbose($"Path is not rooted. Updating to {packagePath}.");

                    if (!FileUtil.Exists(packagePath))
                    {
                        packagePath =
                            System.IO.Path.GetFullPath(
                                System.IO.Path.Combine(
                                    CurrentProviderLocation("FileSystem").ProviderPath, fileName));
                        WriteVerbose($"Path could not be found. Updating to {packagePath}.");

                        if (!FileUtil.Exists(packagePath))
                        {
                            WriteVerbose("Path still could not be found. Check that the file actually exists in the Sitecore package directory.");
                        }
                    }

                    fileName = packagePath;
                }

                if (!ShouldProcess(fileName, "Install package"))
                {
                    return;
                }

                using (new Sitecore.Data.BulkUpdateContext())
                {
                    IProcessingContext context     = new SimpleProcessingContext();
                    IItemInstallerEvents instance1 = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode, MergeMode));
                    context.AddAspect(instance1);
                    IFileInstallerEvents instance2 = new DefaultFileInstallerEvents(true);
                    context.AddAspect(instance2);
                    var installer = new Installer();
                    installer.InstallPackage(fileName, context);
                    ISource <PackageEntry> source = new PackageReader(fileName);
                    var previewContext            = Installer.CreatePreviewContext();
                    var view         = new MetadataView(previewContext);
                    var metadataSink = new MetadataSink(view);
                    metadataSink.Initialize(previewContext);
                    source.Populate(metadataSink);
                    installer.ExecutePostStep(view.PostStep, previewContext);
                }
            });
        }
Exemple #5
0
 public new void InstallSecurity(string path, IProcessingContext context)
 {
     Assert.ArgumentNotNullOrEmpty(path, "path");
     Assert.ArgumentNotNull((object)context, "context");
     Log.Info("Installing security from package: " + path, (object)this);
     PackageReader packageReader = new PackageReader(path);
     AccountInstaller accountInstaller = new AccountInstaller();
     accountInstaller.Initialize(context);
     packageReader.Populate((ISink<PackageEntry>)accountInstaller);
     accountInstaller.Flush();
     accountInstaller.Finish();
 }
Exemple #6
0
        public new void InstallSecurity(string path, IProcessingContext context)
        {
            Assert.ArgumentNotNullOrEmpty(path, "path");
            Assert.ArgumentNotNull((object)context, "context");
            Log.Info("Installing security from package: " + path, (object)this);
            PackageReader    packageReader    = new PackageReader(path);
            AccountInstaller accountInstaller = new AccountInstaller();

            accountInstaller.Initialize(context);
            packageReader.Populate((ISink <PackageEntry>)accountInstaller);
            accountInstaller.Flush();
            accountInstaller.Finish();
        }
Exemple #7
0
        public void Install([NotNull] string fileName)
        {
            try
            {
                Context.SetActiveSite("shell");
                using (new SecurityDisabler())
                {
                    using (new ProxyDisabler())
                    {
                        using (new SyncOperationContext())
                        {
                            IProcessingContext context = new SimpleProcessingContext();

                            IItemInstallerEvents itemInstallerEvents = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Clear));
                            context.AddAspect(itemInstallerEvents);

                            IFileInstallerEvents fileInstallerEvents = new DefaultFileInstallerEvents(true);
                            context.AddAspect(fileInstallerEvents);

                            var installer = new Installer();

                            installer.InstallPackage(FileUtil.MapPath(fileName), context);

                            ISource <PackageEntry> source = new PackageReader(FileUtil.MapPath(fileName));
                            var previewContext            = Installer.CreatePreviewContext();
                            var view = new MetadataView(previewContext);
                            var sink = new MetadataSink(view);
                            sink.Initialize(previewContext);
                            source.Populate(sink);
                            installer.ExecutePostStep(view.PostStep, previewContext);
                        }
                    }
                }

                File.WriteAllText(fileName + ".log", @"OK");
            }
            catch (Exception ex)
            {
                File.WriteAllText(fileName + ".log", @"Error" + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace);
            }
        }
Exemple #8
0
        private void WritePackage(XmlTextWriter output, string fileName)
        {
            var packageAnalyzer = new PackageAnalyzer(new SimpleProcessingContext());

            var reader = new PackageReader(fileName);

            reader.Populate(packageAnalyzer);

            output.WriteStartElement("package");

            output.WriteElementString("filename", fileName);
            output.WriteElementString("name", packageAnalyzer.Name);
            output.WriteElementString("author", packageAnalyzer.Author);
            output.WriteElementString("version", packageAnalyzer.Version);
            output.WriteElementString("publisher", packageAnalyzer.Publisher);
            output.WriteElementString("license", packageAnalyzer.License);
            output.WriteElementString("comment", packageAnalyzer.Comment);
            output.WriteElementString("readme", packageAnalyzer.Readme);

            output.WriteEndElement();
        }
        private void WritePackage(XmlTextWriter output, string fileName)
        {
            var folder        = FileUtil.MapPath(Settings.PackagePath);
            var localFileName = "package:" + fileName.Mid(folder.Length + 1).Replace("\\", "/");

            var packageAnalyzer = new PackageAnalyzer(new SimpleProcessingContext());

            var reader = new PackageReader(fileName);

            reader.Populate(packageAnalyzer);

            output.WriteStartElement("package");

            output.WriteElementString("filename", localFileName);
            output.WriteElementString("name", packageAnalyzer.Name);
            output.WriteElementString("author", packageAnalyzer.Author);
            output.WriteElementString("version", packageAnalyzer.Version);
            output.WriteElementString("publisher", packageAnalyzer.Publisher);
            output.WriteElementString("license", packageAnalyzer.License);
            output.WriteElementString("comment", packageAnalyzer.Comment);
            output.WriteElementString("readme", packageAnalyzer.Readme);

            output.WriteEndElement();
        }
        private void InstallSitecorePackage([NotNull] string fileName)
        {
            Context.SetActiveSite("shell");
            using (new SecurityDisabler())
            {
                using (new ProxyDisabler())
                {
                    using (new SyncOperationContext())
                    {
                        var context = new SimpleProcessingContext();

                        var defaultItemInstallerEvents = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Clear));
                        context.AddAspect(defaultItemInstallerEvents);

                        var defaultFileInstallerEvents = new DefaultFileInstallerEvents(true);
                        context.AddAspect(defaultFileInstallerEvents);

                        var installer = new Installer();
                        installer.InstallPackage(FileUtil.MapPath(fileName), context);

                        var packageReader = new PackageReader(FileUtil.MapPath(fileName));
                        var previewContext = Installer.CreatePreviewContext();
                        var view = new MetadataView(previewContext);
                        var sink = new MetadataSink(view);

                        sink.Initialize(previewContext);

                        packageReader.Populate(sink);

                        installer.ExecutePostStep(view.PostStep, previewContext);
                    }
                }
            }
        }
Exemple #11
0
        protected override void ProcessRecord()
        {
            var fileName = Path;

            PerformInstallAction(() =>
            {
                if (!System.IO.Path.IsPathRooted(fileName))
                {
                    var packagePath = FullPackagePath(fileName);
                    WriteVerbose($"Path is not rooted. Updating to {packagePath}.");

                    if (!FileUtil.Exists(packagePath))
                    {
                        packagePath =
                            System.IO.Path.GetFullPath(
                                System.IO.Path.Combine(
                                    CurrentProviderLocation("FileSystem").ProviderPath, fileName));
                        WriteVerbose($"Path could not be found. Updating to {packagePath}.");

                        if (!FileUtil.Exists(packagePath))
                        {
                            WriteVerbose("Path still could not be found. Check that the file actually exists in the Sitecore package directory.");
                        }
                    }

                    fileName = packagePath;
                }

                if (ShouldProcess(fileName, "Install package"))
                {
                    var obsoleter    = TypeResolver.Resolve <IObsoleter>();
                    var indexSetting = obsoleter.IndexingEnabled;
                    if (DisableIndexing.IsPresent)
                    {
                        obsoleter.IndexingEnabled = false;
                    }

                    try
                    {
                        IProcessingContext context     = new SimpleProcessingContext();
                        IItemInstallerEvents instance1 = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode, MergeMode));
                        context.AddAspect(instance1);
                        IFileInstallerEvents instance2 = new DefaultFileInstallerEvents(true);
                        context.AddAspect(instance2);
                        var installer = new Installer();
                        installer.InstallPackage(fileName, context);
                        ISource <PackageEntry> source = new PackageReader(fileName);
                        var previewContext            = Installer.CreatePreviewContext();
                        var view         = new MetadataView(previewContext);
                        var metadataSink = new MetadataSink(view);
                        metadataSink.Initialize(previewContext);
                        source.Populate(metadataSink);
                        installer.ExecutePostStep(view.PostStep, previewContext);
                    }
                    finally
                    {
                        if (DisableIndexing.IsPresent)
                        {
                            obsoleter.IndexingEnabled = indexSetting;
                        }
                    }
                }
            });
        }
        protected override void ProcessRecord()
        {
            var fileName = Path;
            PerformInstallAction(() =>
                {
                    if (!System.IO.Path.IsPathRooted(fileName))
                    {
                        var packagePath = FullPackagePath(fileName);
                        WriteVerbose($"Path is not rooted. Updating to {packagePath}.");

                        if (!FileUtil.Exists(packagePath))
                        {
                            packagePath =
                                System.IO.Path.GetFullPath(
                                    System.IO.Path.Combine(
                                        CurrentProviderLocation("FileSystem").ProviderPath, fileName));
                            WriteVerbose($"Path could not be found. Updating to {packagePath}.");

                            if (!FileUtil.Exists(packagePath))
                            {
                                WriteVerbose("Path still could not be found. Check that the file actually exists in the Sitecore package directory.");
                            }
                        }

                        fileName = packagePath;
                    }

                    if (ShouldProcess(fileName, "Install package"))
                    {
                        var indexSetting = Sitecore.Configuration.Settings.Indexing.Enabled;
                        if (DisableIndexing.IsPresent)
                        {
                            Sitecore.Configuration.Settings.Indexing.Enabled = false;
                        }

                        try
                        {
                            IProcessingContext context = new SimpleProcessingContext();
                            IItemInstallerEvents instance1 = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode, MergeMode));
                            context.AddAspect(instance1);
                            IFileInstallerEvents instance2 = new DefaultFileInstallerEvents(true);
                            context.AddAspect(instance2);
                            var installer = new Installer();
                            installer.InstallPackage(fileName, context);
                            ISource<PackageEntry> source = new PackageReader(fileName);
                            var previewContext = Installer.CreatePreviewContext();
                            var view = new MetadataView(previewContext);
                            var metadataSink = new MetadataSink(view);
                            metadataSink.Initialize(previewContext);
                            source.Populate(metadataSink);
                            installer.ExecutePostStep(view.PostStep, previewContext);
                        }
                        finally
                        {
                            if (DisableIndexing.IsPresent)
                            {
                                Sitecore.Configuration.Settings.Indexing.Enabled = indexSetting;
                            }
                        }
                    }
                });
        }
        public string Execute([NotNull] string fileName)
        {
            var localFileName = LocalFile.MapPath(fileName);

            var packageAnalyzer = new PackageAnalyzer(new SimpleProcessingContext());

            var reader = new PackageReader(localFileName);

            reader.Populate(packageAnalyzer);

            var writer = new StringWriter();
            var output = new XmlTextWriter(writer)
            {
                Formatting = Formatting.Indented
            };

            output.WriteStartElement("package");

            output.WriteAttributeString("poststep", packageAnalyzer.PostStep);

            var items = new List <string>();

            foreach (var packageItem in packageAnalyzer.Items)
            {
                var itemKey = packageItem.DatabaseName + packageItem.ID;
                if (items.Contains(itemKey))
                {
                    continue;
                }

                items.Add(itemKey);

                var database = Factory.GetDatabase(packageItem.DatabaseName);
                if (database == null)
                {
                    WritePackageItem(output, packageItem, "Skip: Database not found");
                    continue;
                }

                var item = database.GetItem(packageItem.ID);
                if (item == null)
                {
                    WritePackageItem(output, packageItem, "Add");
                    continue;
                }

                WritePackageItem(output, packageItem, "Overwrite");
            }

            foreach (var packageFile in packageAnalyzer.Files)
            {
                var file = FileUtil.MapPath(packageFile.FileName);

                if (File.Exists(file))
                {
                    WritePackageFile(output, packageFile, "Overwrite");
                }
                else
                {
                    WritePackageFile(output, packageFile, "Add");
                }
            }

            output.WriteEndElement();

            return(writer.ToString());
        }
Exemple #14
0
        private void InstallPackage(FileInfo file)
        {
            // in case file disappeared since retrieved
            file.Refresh();
            if (!file.Exists)
            {
                return;
            }

            var filenameWithoutExtension = Path.GetFileNameWithoutExtension(file.Name);

            filenameWithoutExtension = ItemUtil.ProposeValidItemName(filenameWithoutExtension);
            Assert.IsTrue(!string.IsNullOrWhiteSpace(filenameWithoutExtension), "The package should be renamed to something that item can have name of: " + file.Name);

            using (new SecurityDisabler())
            {
                var db          = Factory.GetDatabase("core");
                var historyItem = db.GetItem("/sitecore/system/Packages/Installation history");
                if (historyItem.Children.Any(x => string.Equals(x.Name, filenameWithoutExtension, StringComparison.OrdinalIgnoreCase)))
                {
                    FridayLog.Info(AutoPackages.FeatureName, $"Install auto package skipped (already installed): \"{file.FullName}\"");

                    return;
                }
            }

            // The way how SC creates history item it cumbersome - it has some non-obvious length limitations
            // so add extra logic to work around it.
            var historyFile = new FileInfo(file.FullName + ".history.txt");

            if (historyFile.Exists)
            {
                FridayLog.Info(AutoPackages.FeatureName, $"Install auto package skipped (already installed): \"{file.FullName}\"");

                return;
            }

            File.AppendAllText(historyFile.FullName, DateTime.UtcNow.ToString("o") + "\r\n");

            FridayLog.Info(AutoPackages.FeatureName, $"Install auto package (Skip on conflicts): \"{file.FullName}\"");

            using (new SecurityDisabler())
            {
                var context = new SimpleProcessingContext();
                // IItemInstallerEvents type cast is essential
                var items = (IItemInstallerEvents) new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Undefined));
                context.AddAspect(items);

                // IFileInstallerEvents type cast is essential
                var files = (IFileInstallerEvents) new DefaultFileInstallerEvents(true);
                context.AddAspect(files);

                new Installer().InstallPackage(file.FullName, context);
                new Installer().InstallSecurity(file.FullName, context);

                var previewContext = Installer.CreatePreviewContext();
                var packageReader  = new PackageReader(file.FullName);
                var view           = new MetadataView(previewContext);
                var metadataSink   = new MetadataSink(view);
                metadataSink.Initialize(previewContext);
                packageReader.Populate(metadataSink);

                new Installer().ExecutePostStep(view.PostStep, previewContext);
            }
        }