/// <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; } }
public void RetrievePluginAssembly_InexistentFilename() { IGlobalSettingsStorageProviderV40 prov = GetProvider(); //Collectors.SettingsProvider = prov; Assert.IsNull(prov.RetrievePluginAssembly("Inexistent.dll"), "RetrievePluginAssembly should return null"); }
public void RetrievePluginAssembly_InvalidFilename(string fn) { IGlobalSettingsStorageProviderV40 prov = GetProvider(); //Collectors.SettingsProvider = prov; prov.RetrievePluginAssembly(fn); }
public void StorePluginAssembly_EmptyAssembly() { IGlobalSettingsStorageProviderV40 prov = GetProvider(); //Collectors.SettingsProvider = prov; prov.StorePluginAssembly("Test.dll", new byte[0]); }
public void StorePluginAssembly_InvalidFilename(string fn) { IGlobalSettingsStorageProviderV40 prov = GetProvider(); //Collectors.SettingsProvider = prov; prov.StorePluginAssembly(fn, new byte[10]); }
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"); }
public void LogEntry_InvalidMessage(string m, string w) { IGlobalSettingsStorageProviderV40 prov = GetProvider(); //Collectors.SettingsProvider = prov; prov.LogEntry(m, EntryType.General, "NUnit", w); }
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"); }
public void DeletePluginAssembly_InvalidName(string n) { IGlobalSettingsStorageProviderV40 prov = GetProvider(); //Collectors.SettingsProvider = prov; prov.DeletePluginAssembly(n); }
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"); }
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"); }
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"); }
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"); }
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"); }
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"); } }
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"); }
/// <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); } }
/// <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); }
public void GetSetting_InvalidName(string n) { IGlobalSettingsStorageProviderV40 prov = GetProvider(); prov.GetSetting(n); }
public void Init_NullHost() { IGlobalSettingsStorageProviderV40 prov = GetProvider(); prov.Init(null, "", null); }
public void Init_NullConfig() { IGlobalSettingsStorageProviderV40 prov = GetProvider(); prov.Init(MockHost(), null, null); }