private void DoUpgrades(IDirectoryHandler rootDirectoryHandler) { IDirectoryHandler systemDirectory = rootDirectoryHandler.OpenFile("System").CastFileHandler<IDirectoryHandler>(); if (!systemDirectory.IsFilePresent("BrowserInfo")) { systemDirectory.CreateFile( "BrowserInfo", "browserinfo", FileHandlerFactoryLocator.UserFactory.RootUser.Id); systemDirectory.SetPermission( null, "BrowserInfo", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); } if (!systemDirectory.IsFilePresent("Comet")) { IDirectoryHandler cometDirectory = (IDirectoryHandler)systemDirectory.CreateFile( "Comet", "directory", FileHandlerFactoryLocator.UserFactory.RootUser.Id); systemDirectory.SetPermission( null, "Comet", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); cometDirectory.CreateFile( "Loopback", "cometloopback", FileHandlerFactoryLocator.UserFactory.RootUser.Id); cometDirectory.SetPermission( null, "Loopback", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); cometDirectory.CreateFile( "Echo", "cometecho", FileHandlerFactoryLocator.UserFactory.RootUser.Id); cometDirectory.SetPermission( null, "Echo", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); cometDirectory.CreateFile( "Multiplexer", "cometmultiplex", FileHandlerFactoryLocator.UserFactory.RootUser.Id); cometDirectory.SetPermission( null, "Multiplexer", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); cometDirectory.CreateFile( "LoopbackQuality", "cometloopbackqueuingreliable", FileHandlerFactoryLocator.UserFactory.RootUser.Id); cometDirectory.SetPermission( null, "LoopbackQuality", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); } if (!systemDirectory.IsFilePresent("TemplateEngine")) { systemDirectory.CreateFile( "TemplateEngine", "templateengine", FileHandlerFactoryLocator.UserFactory.RootUser.Id); systemDirectory.SetPermission( null, "TemplateEngine", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); } if (!systemDirectory.IsFilePresent("JavascriptInterpreter")) { systemDirectory.CreateFile( "JavascriptInterpreter", "javascriptinterpreter", FileHandlerFactoryLocator.UserFactory.RootUser.Id); systemDirectory.SetPermission( null, "JavascriptInterpreter", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); } IDirectoryHandler usersDirectory = FileHandlerFactoryLocator.FileSystemResolver.ResolveFile("Users").CastFileHandler<IDirectoryHandler>(); if (!systemDirectory.IsFilePresent("Documentation")) { systemDirectory.CreateFile( "Documentation", "documentation", FileHandlerFactoryLocator.UserFactory.RootUser.Id); systemDirectory.SetPermission( null, "Documentation", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); } if (!rootDirectoryHandler.IsFilePresent("Actions")) { // Create actions directory rootDirectoryHandler.RestoreFile( "Actions", "directory", "." + Path.DirectorySeparatorChar + "DefaultFiles" + Path.DirectorySeparatorChar + "Actions", FileHandlerFactoryLocator.UserFactory.RootUser.Id); rootDirectoryHandler.SetPermission( null, "Actions", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.Everybody.Id }, FilePermissionEnum.Read, true, false); } // Let the root user see information about the anonymous user IFileContainer anonymousUserFileContainer = usersDirectory.OpenFile("anonymous.user"); usersDirectory.Chown(null, anonymousUserFileContainer.FileId, FileHandlerFactoryLocator.UserFactory.RootUser.Id); usersDirectory.RemovePermission("anonymous.user", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.AnonymousUser.Id }); if (!usersDirectory.IsFilePresent("ParticleAvatars")) { usersDirectory.CreateFile("ParticleAvatars", "directory", null); usersDirectory.SetPermission( null, "ParticleAvatars", new ID<IUserOrGroup, Guid>[] { FileHandlerFactoryLocator.UserFactory.LocalUsers.Id }, FilePermissionEnum.Read, true, false); } // Make sure every user has a friends group // TODO: At some point this needs to go away foreach (ID<IUserOrGroup, Guid> userId in FileHandlerFactoryLocator.UserManagerHandler.GetAllLocalUserIds()) { IUser user = FileHandlerFactoryLocator.UserManagerHandler.GetUser(userId); if (!user.BuiltIn) if (FileHandlerFactoryLocator.LocalIdentityProvider == user.IdentityProvider) { bool hasFriendsGroup = false; foreach (IGroupAndAlias group in FileHandlerFactoryLocator.UserManagerHandler.GetGroupsThatUserOwns(userId)) { if (group.Alias == "friends") hasFriendsGroup = true; } if (!hasFriendsGroup) try { FileHandlerFactoryLocator.UserManagerHandler.CreateGroup("friends", user.DisplayName + "'s friends", user.Id, GroupType.Personal); } catch (Exception e) { log.Warn("Exception creating friends group for user " + user.Name, e); } } } /*if (!rootDirectoryHandler.IsFilePresent("Config")) { IDirectoryHandler configDirectory = (IDirectoryHandler)rootDirectoryHandler.CreateFile( "Config", "directory", FileHandlerFactoryLocator.UserFactory.RootUser.Id); CreateConfigDirectory(configDirectory, "ByExtension"); CreateConfigDirectory(configDirectory, "ByType"); }*/ }