Esempio n. 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:ProviderUpdater" /> class.
        /// </summary>
        /// <param name="globalSettingsProvider">The settings storage provider.</param>
        /// <param name="fileNamesForProviders">A provider->file dictionary.</param>
        /// <param name="plugins">The providers to update.</param>
        public ProviderUpdater(IGlobalSettingsStorageProviderV40 globalSettingsProvider,
                               Dictionary <string, string> fileNamesForProviders,
                               IFormatterProviderV40[] plugins)
        {
            if (globalSettingsProvider == null)
            {
                throw new ArgumentNullException("settingsProvider");
            }
            if (fileNamesForProviders == null)
            {
                throw new ArgumentNullException("fileNamesForProviders");
            }
            if (plugins == null)
            {
                throw new ArgumentNullException("providers");
            }
            if (plugins.Length == 0)
            {
                throw new ArgumentException("Providers cannot be empty", "providers");
            }

            this.globalSettingsProvider = globalSettingsProvider;
            this.fileNamesForProviders  = fileNamesForProviders;

            this.plugins = plugins.ToList();

            visitedUrls = new List <string>(10);
        }
        protected void btnExportGlobalSettings_Click(object sender, EventArgs e)
        {
            Log.LogEntry("Global Settings data export requested.", EntryType.General, SessionFacade.CurrentUsername, null);

            IGlobalSettingsStorageProviderV40 globalSettingsStorageProvider = GlobalSettings.Provider;

            string tempDir = Path.Combine(Environment.GetEnvironmentVariable("TEMP"), Guid.NewGuid().ToString());

            Directory.CreateDirectory(tempDir);
            string zipFileName = Path.Combine(tempDir, "GlobalSettingsBackup.zip");

            BackupRestore.BackupRestore.BackupGlobalSettingsStorageProvider(zipFileName, globalSettingsStorageProvider);

            FileInfo file = new FileInfo(zipFileName);

            Response.Clear();
            Response.AddHeader("content-type", "application/zip");
            Response.AddHeader("content-disposition", "attachment;filename=\"GlobalSettingsBackup.zip\"");
            Response.AddHeader("content-length", file.Length.ToString());


            Response.TransmitFile(zipFileName);
            Response.Flush();

            Directory.Delete(tempDir, true);
        }
        protected void btnImportGlobalSettings_Click(object sender, EventArgs e)
        {
            string file = upGlobalSettings.FileName;

            string ext = System.IO.Path.GetExtension(file);

            if (ext != null)
            {
                ext = ext.ToLowerInvariant();
            }
            if (ext != ".zip")
            {
                lblImportGlobalSettingsResult.CssClass = "resulterror";
                lblImportGlobalSettingsResult.Text     = Properties.Messages.VoidOrInvalidFile;
                return;
            }

            Log.LogEntry("Import Global Settings requested.", EntryType.General, SessionFacade.CurrentUsername, null);

            IGlobalSettingsStorageProviderV40 globalSettingsStorageProvider = GlobalSettings.Provider;
            bool result = BackupRestore.BackupRestore.RestoreGlobalSettingsStorageProvider(upGlobalSettings.FileBytes, globalSettingsStorageProvider);

            if (result)
            {
                lblImportGlobalSettingsResult.CssClass = "resultok";
                lblImportGlobalSettingsResult.Text     = Properties.Messages.ImportedSettings;
                upGlobalSettings.Attributes.Add("value", "");
                Log.LogEntry("Import Global Settings completed succesfully.", EntryType.General, SessionFacade.CurrentUsername, null);
            }
            else
            {
                lblImportGlobalSettingsResult.CssClass = "resulterror";
                lblImportGlobalSettingsResult.Text     = Properties.Messages.VoidOrInvalidFile;
            }
        }
Esempio n. 4
0
        public void RetrievePluginAssembly_InexistentFilename()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            Assert.IsNull(prov.RetrievePluginAssembly("Inexistent.dll"), "RetrievePluginAssembly should return null");
        }
Esempio n. 5
0
        public void RetrievePluginAssembly_InvalidFilename(string fn)
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            prov.RetrievePluginAssembly(fn);
        }
Esempio n. 6
0
        public void StorePluginAssembly_EmptyAssembly()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            prov.StorePluginAssembly("Test.dll", new byte[0]);
        }
Esempio n. 7
0
        public void StorePluginAssembly_InvalidFilename(string fn)
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            prov.StorePluginAssembly(fn, new byte[10]);
        }
Esempio n. 8
0
        public void Static_LoadSettingsStorageProvider(string p, Type type)
        {
            IGlobalSettingsStorageProviderV40 prov = ProviderLoader.LoadGlobalSettingsStorageProvider(p);

            Assert.IsNotNull(prov, "Provider should not be null");
            // type == prov.GetType() seems to fail due to reflection
            Assert.AreEqual(type.ToString(), prov.GetType().FullName, "Wrong return type");
        }
Esempio n. 9
0
        public void LogEntry_InvalidMessage(string m, string w)
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            prov.LogEntry(m, EntryType.General, "NUnit", w);
        }
Esempio n. 10
0
        public void LogEntry_InvalidUser(string u, string w)
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            prov.LogEntry("Test", EntryType.General, u, w);
        }
        public void Init()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            prov.Init(MockHost(), connString, "-");

            Assert.IsNotNull(prov.Information, "Information should not be null");
        }
Esempio n. 12
0
        public void DeletePluginAssembly_InvalidName(string n)
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            prov.DeletePluginAssembly(n);
        }
Esempio n. 13
0
        public void SetSetting_GetSetting(string c, string r)
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            Assert.IsTrue(prov.SetSetting("TS", c), "SetSetting should return true");
            Assert.AreEqual(r, prov.GetSetting("TS"), "Wrong return value");
        }
Esempio n. 14
0
        public void LogEntry_GetLogEntries(string m, EntryType t, string u, string w)
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            prov.LogEntry(m, t, u, w);

            LogEntry[] entries = prov.GetLogEntries();
            Assert.AreEqual(m, entries[entries.Length - 1].Message, "Wrong message");
            Assert.AreEqual(t, entries[entries.Length - 1].EntryType, "Wrong entry type");
            Assert.AreEqual(u, entries[entries.Length - 1].User, "Wrong user");
        }
Esempio n. 15
0
        public void CutLog_LogSize()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            for (int i = 0; i < 100; i++)
            {
                prov.LogEntry("Test", EntryType.General, "User", null);
                prov.LogEntry("Test", EntryType.Error, "User", "wiki1");
                prov.LogEntry("Test", EntryType.Warning, "User", "");
            }

            Assert.IsTrue(prov.LogSize > 0 && prov.LogSize < MaxLogSize, "Wrong size");

            Assert.IsTrue(prov.GetLogEntries().Length < 300, "Wrong log entry count");
        }
Esempio n. 16
0
        public void SetSetting_GetAllSettings()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            Assert.IsTrue(prov.SetSetting("TS1", "Value1"), "SetSetting should return true");
            Assert.IsTrue(prov.SetSetting("TS2", "Value2"), "SetSetting should return true");
            Assert.IsTrue(prov.SetSetting("TS3", "Value3"), "SetSetting should return true");

            IDictionary <string, string> settings = prov.GetAllSettings();

            Assert.AreEqual(3, settings.Count, "Wrong setting count");
            Assert.AreEqual("Value1", settings["TS1"], "Wrong setting value");
            Assert.AreEqual("Value2", settings["TS2"], "Wrong setting value");
            Assert.AreEqual("Value3", settings["TS3"], "Wrong setting value");
        }
Esempio n. 17
0
        public void ClearLog()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            prov.LogEntry("Test", EntryType.General, "User", null);
            prov.LogEntry("Test", EntryType.Error, "User", null);
            prov.LogEntry("Test", EntryType.Warning, "User", null);
            prov.LogEntry("Test", EntryType.General, "User", "wiki1");
            prov.LogEntry("Test", EntryType.Error, "User", "wiki1");
            prov.LogEntry("Test", EntryType.Warning, "User", "wiki1");

            Assert.AreEqual(6, prov.GetLogEntries().Length, "Wrong log entry count");

            prov.ClearLog();

            Assert.AreEqual(0, prov.GetLogEntries().Length, "Wrong log entry count");
        }
Esempio n. 18
0
        public void StorePluginAssembly_RetrievePluginAssembly_ListPluginAssemblies()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            byte[] stuff = new byte[50];
            for (int i = 0; i < stuff.Length; i++)
            {
                stuff[i] = (byte)i;
            }

            Assert.AreEqual(0, prov.ListPluginAssemblies().Length, "Wrong length");

            Assert.IsTrue(prov.StorePluginAssembly("Plugin.dll", stuff), "StorePluginAssembly should return true");

            string[] asms = prov.ListPluginAssemblies();
            Assert.AreEqual(1, asms.Length, "Wrong length");
            Assert.AreEqual("Plugin.dll", asms[0], "Wrong assembly name");

            byte[] output = prov.RetrievePluginAssembly("Plugin.dll");
            Assert.AreEqual(stuff.Length, output.Length, "Wrong content length");
            for (int i = 0; i < stuff.Length; i++)
            {
                Assert.AreEqual(stuff[i], output[i], "Wrong content");
            }

            stuff = new byte[30];
            for (int i = stuff.Length - 1; i >= 0; i--)
            {
                stuff[i] = (byte)i;
            }

            Assert.IsTrue(prov.StorePluginAssembly("Plugin.dll", stuff), "StorePluginAssembly should return true");

            output = prov.RetrievePluginAssembly("Plugin.dll");
            Assert.AreEqual(stuff.Length, output.Length, "Wrong content length");
            for (int i = 0; i < stuff.Length; i++)
            {
                Assert.AreEqual(stuff[i], output[i], "Wrong content");
            }
        }
Esempio n. 19
0
        public void DeletePluginAssembly()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            //Collectors.SettingsProvider = prov;

            Assert.IsFalse(prov.DeletePluginAssembly("Assembly.dll"), "DeletePluginAssembly should return false");

            byte[] stuff = new byte[50];
            for (int i = 0; i < stuff.Length; i++)
            {
                stuff[i] = (byte)i;
            }

            prov.StorePluginAssembly("Plugin.dll", stuff);
            prov.StorePluginAssembly("Assembly.dll", stuff);

            Assert.IsTrue(prov.DeletePluginAssembly("Assembly.dll"), "DeletePluginAssembly should return true");

            string[] asms = prov.ListPluginAssemblies();

            Assert.AreEqual(1, asms.Length, "Wrong length");
            Assert.AreEqual("Plugin.dll", asms[0], "Wrong assembly");
        }
Esempio n. 20
0
        /// <summary>
        /// Loads the proper Global Setting Storage Provider, given its name.
        /// </summary>
        /// <param name="name">The fully qualified name (such as "Namespace.ProviderClass, MyAssembly"), or <c>null</c>/<b>String.Empty</b>/"<b>default</b>" for the default provider.</param>
        /// <returns>The global settings storage provider.</returns>
        public static IGlobalSettingsStorageProviderV40 LoadGlobalSettingsStorageProvider(string name)
        {
            if (name == null || name.Length == 0)
            {
                throw new Exception("Global Settings Storage Provider must be specified in the Web.congfig file.");
            }

            IGlobalSettingsStorageProviderV40 result = null;

            Exception inner = null;

            if (name.Contains(","))
            {
                string[] fields = name.Split(',');
                if (fields.Length == 2)
                {
                    fields[0] = fields[0].Trim(' ', '"');
                    fields[1] = fields[1].Trim(' ', '"');
                    try {
                        // assemblyName should be an absolute path or a relative path in bin or public\Plugins

                        Assembly asm;
                        Type     t;
                        string   assemblyName = fields[1];
                        if (!assemblyName.ToLowerInvariant().EndsWith(".dll"))
                        {
                            assemblyName += ".dll";
                        }

                        if (File.Exists(assemblyName))
                        {
                            asm = Assembly.Load(LoadAssemblyFromDisk(assemblyName));
                            t   = asm.GetType(fields[0]);
                            GlobalSettingsStorageProviderAssemblyName = Path.GetFileName(assemblyName);
                        }
                        else
                        {
                            string tentativePluginsPath = null;
                            try {
                                // Settings.PublicDirectory is only available when running the web app
                                tentativePluginsPath = Path.Combine(GlobalSettings.PublicDirectory, "Plugins");
                                tentativePluginsPath = Path.Combine(tentativePluginsPath, assemblyName);
                            }
                            catch { }

                            if (!string.IsNullOrEmpty(tentativePluginsPath) && File.Exists(tentativePluginsPath))
                            {
                                asm = Assembly.Load(LoadAssemblyFromDisk(tentativePluginsPath));
                                t   = asm.GetType(fields[0]);
                                GlobalSettingsStorageProviderAssemblyName = Path.GetFileName(tentativePluginsPath);
                            }
                            else
                            {
                                // Trim .dll
                                t = Type.GetType(fields[0] + "," + assemblyName.Substring(0, assemblyName.Length - 4), true, true);
                                GlobalSettingsStorageProviderAssemblyName = assemblyName;
                            }
                        }

                        result = t.GetConstructor(new Type[0]).Invoke(new object[0]) as IGlobalSettingsStorageProviderV40;
                    }
                    catch (Exception ex) {
                        inner  = ex;
                        result = null;
                    }
                }
            }

            if (result == null)
            {
                throw new ArgumentException("Could not load the specified Global Settings Storage Provider", inner);
            }
            else
            {
                return(result);
            }
        }
Esempio n. 21
0
        /// <summary>
        /// Performs all needed startup operations.
        /// </summary>
        public static void Startup()
        {
            // Load Host
            Host.Instance = new Host();

            // Initialize MimeTypes
            MimeTypes.Init();

            GlobalSettings.CanOverridePublicDirectory = false;

            // Initialize Collectors
            Collectors.InitCollectors();
            Collectors.FileNames = new Dictionary <string, string>(10);

            // Load Global Config
            IGlobalSettingsStorageProviderV40 globalSettingsStorageProvider = ProviderLoader.LoadGlobalSettingsStorageProvider(WebConfigurationManager.AppSettings["GlobalSettingsStorageProvider"]);

            Collectors.AddGlobalSettingsStorageProvider(globalSettingsStorageProvider.GetType(), Assembly.GetAssembly(globalSettingsStorageProvider.GetType()));
            globalSettingsStorageProvider.SetUp(Host.Instance, GetGlobalSettingsStorageProviderConfiguration());
            globalSettingsStorageProvider.Dispose();

            // Add StorageProviders, from WebConfig, to Collectors and Setup them
            ProviderLoader.LoadStorageProviders <ISettingsStorageProviderV40>(new List <StorageProvider>()
            {
                ((List <StorageProvider>)WebConfigurationManager.GetWebApplicationSection("storageProviders/settingsProvider"))[0]
            });
            ProviderLoader.LoadStorageProviders <IFilesStorageProviderV40>((List <StorageProvider>)WebConfigurationManager.GetWebApplicationSection("storageProviders/filesProviders"));
            ProviderLoader.LoadStorageProviders <IThemesStorageProviderV40>((List <StorageProvider>)WebConfigurationManager.GetWebApplicationSection("storageProviders/themesProviders"));
            ProviderLoader.LoadStorageProviders <IUsersStorageProviderV40>((List <StorageProvider>)WebConfigurationManager.GetWebApplicationSection("storageProviders/usersProviders"));
            ProviderLoader.LoadStorageProviders <IPagesStorageProviderV40>((List <StorageProvider>)WebConfigurationManager.GetWebApplicationSection("storageProviders/pagesProviders"));
            ProviderLoader.LoadStorageProviders <IIndexDirectoryProviderV40>((List <StorageProvider>)WebConfigurationManager.GetWebApplicationSection("storageProviders/indexDirectoryProviders"));

            ProviderLoader.LoadAllFormatterProviders();

            foreach (Wiki.PluginFramework.Wiki wiki in Collectors.CollectorsBox.GlobalSettingsProvider.GetAllWikis())
            {
                ISettingsStorageProviderV40 ssp = Collectors.CollectorsBox.GetSettingsProvider(wiki.WikiName);
                if (ssp.IsFirstApplicationStart())
                {
                    if (ssp.GetMetaDataItem(MetaDataItem.AccountActivationMessage, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.AccountActivationMessage, null, Defaults.AccountActivationMessageContent);
                    }
                    if (ssp.GetMetaDataItem(MetaDataItem.EditNotice, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.EditNotice, null, Defaults.EditNoticeContent);
                    }
                    if (ssp.GetMetaDataItem(MetaDataItem.Footer, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.Footer, null, Defaults.FooterContent);
                    }
                    if (ssp.GetMetaDataItem(MetaDataItem.Header, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.Header, null, Defaults.HeaderContent);
                    }
                    if (ssp.GetMetaDataItem(MetaDataItem.PasswordResetProcedureMessage, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.PasswordResetProcedureMessage, null, Defaults.PasswordResetProcedureMessageContent);
                    }
                    if (ssp.GetMetaDataItem(MetaDataItem.Sidebar, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.Sidebar, null, Defaults.SidebarContent);
                    }
                    if (ssp.GetMetaDataItem(MetaDataItem.PageChangeMessage, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.PageChangeMessage, null, Defaults.PageChangeMessage);
                    }
                    if (ssp.GetMetaDataItem(MetaDataItem.DiscussionChangeMessage, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.DiscussionChangeMessage, null, Defaults.DiscussionChangeMessage);
                    }
                    if (ssp.GetMetaDataItem(MetaDataItem.ApproveDraftMessage, null) == "")
                    {
                        ssp.SetMetaDataItem(MetaDataItem.ApproveDraftMessage, null, Defaults.ApproveDraftMessage);
                    }
                }

                bool groupsCreated = VerifyAndCreateDefaultGroups(wiki.WikiName);

                if (groupsCreated)
                {
                    // It is necessary to set default permissions for file management
                    UserGroup administratorsGroup = Users.FindUserGroup(wiki.WikiName, Settings.GetAdministratorsGroup(wiki.WikiName));
                    UserGroup anonymousGroup      = Users.FindUserGroup(wiki.WikiName, Settings.GetAnonymousGroup(wiki.WikiName));
                    UserGroup usersGroup          = Users.FindUserGroup(wiki.WikiName, Settings.GetUsersGroup(wiki.WikiName));

                    SetAdministratorsGroupDefaultPermissions(wiki.WikiName, administratorsGroup);
                    SetUsersGroupDefaultPermissions(wiki.WikiName, usersGroup);
                    SetAnonymousGroupDefaultPermissions(wiki.WikiName, anonymousGroup);
                }

                // Create the Main Page, if needed
                if (Pages.FindPage(wiki.WikiName, Settings.GetDefaultPage(wiki.WikiName)) == null)
                {
                    CreateMainPage(wiki.WikiName);
                }

                Log.LogEntry("Wiki " + wiki.WikiName + " is ready", EntryType.General, Log.SystemUsername, null);

                Pages.RebuildPageLinks(Pages.GetPages(wiki.WikiName, null));
                foreach (ScrewTurn.Wiki.PluginFramework.NamespaceInfo nspace in Pages.GetNamespaces(wiki.WikiName))
                {
                    Pages.RebuildPageLinks(Pages.GetPages(wiki.WikiName, nspace));
                }
            }

            Log.LogEntry("ScrewTurn Wiki is ready", EntryType.General, Log.SystemUsername, null);
        }
Esempio n. 22
0
        public void GetSetting_InvalidName(string n)
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            prov.GetSetting(n);
        }
Esempio n. 23
0
        public void Init_NullHost()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            prov.Init(null, "", null);
        }
Esempio n. 24
0
        public void Init_NullConfig()
        {
            IGlobalSettingsStorageProviderV40 prov = GetProvider();

            prov.Init(MockHost(), null, null);
        }