protected override IPermissionProvider LoadProvider() { ConfigurationPermissionProvider provider = (ConfigurationPermissionProvider)GetPermissionProvider(); provider.LoadFromConfig(GroupsConfig, PlayersConfig); return(provider); }
/// <inheritdoc /> public void Init(IRuntime runtime) { if (Assembly.GetCallingAssembly().GetName().Name != "Rocket.Runtime") { throw new MethodAccessException(); } this.runtime = runtime; logger = runtime.Container.Resolve <ILogger>(); eventManager = runtime.Container.Resolve <IEventBus>(); pluginManager = runtime.Container.Resolve <IPluginManager>(); commandHandler = runtime.Container.Resolve <ICommandHandler>(); taskScheduler = runtime.Container.Resolve <ITaskScheduler>(); permissionProvider = (ConfigurationPermissionProvider)runtime.Container.Resolve <IPermissionProvider>("default_permissions"); playerManager = (EcoPlayerManager)runtime.Container.Resolve <IPlayerManager>("eco"); CheckConfig(); Func <object, bool> prePlayerJoin = _EmitPlayerPreJoin; Action <object> playerJoin = _EmitPlayerJoin; Action <object> playerLeave = _EmitPlayerLeave; Func <object, string, bool> playerChat = _EmitPlayerChat; Type userType = typeof(User); Type chatManagerType = typeof(ChatManager); userType.GetField("OnUserPreLogin").SetValue(null, prePlayerJoin); userType.GetField("OnUserLogin").SetValue(null, playerJoin); userType.GetField("OnUserLogout").SetValue(null, playerLeave); chatManagerType.GetField("OnUserChat").SetValue(null, playerChat); pluginManager.Init(); eventManager.Emit(this, new ImplementationReadyEvent(this)); logger.LogInformation($"Rocket has initialized under the server name {ServerName}!"); while (true) { string input = System.Console.ReadLine(); if (input == null) { continue; } taskScheduler .ScheduleNextFrame(this, () => { if (input.StartsWith("/", StringComparison.InvariantCulture)) { input = input.Remove(0, 1); } bool wasHandled = commandHandler.HandleCommand(Console, input, string.Empty); if (!wasHandled) { logger.LogError("That command could not be found!"); } }, "Console Command"); } }
public void Migrate(IDependencyContainer container, string basePath) { ConfigurationPermissionProvider permissions = (ConfigurationPermissionProvider)container.Resolve <IPermissionProvider>("default_permissions"); ILogger logger = container.Resolve <ILogger>(); XmlConfiguration xmlConfiguration = (XmlConfiguration)container.Resolve <IConfiguration>("xml"); xmlConfiguration.ConfigurationRoot = null; ConfigurationContext context = new ConfigurationContext(basePath, "Permissions.config"); if (!xmlConfiguration.Exists(context)) { logger.LogError("Permissions migration failed: Permissions.config.xml was not found in: " + basePath); return; } xmlConfiguration.Scheme = typeof(RocketPermissions); xmlConfiguration.Load(context); //bug: doesn't deserialize correctly. RocketPermissions legacyPermissions = xmlConfiguration.Get <RocketPermissions>(); foreach (RocketPermissionsGroup group in legacyPermissions.Groups) { PermissionGroup newGroup = new PermissionGroup { Name = group.DisplayName, Id = group.Id, Priority = 0 }; if (!permissions.CreateGroup(newGroup)) { logger.LogWarning($"Failed to migrate group: {group.DisplayName} (Id: {group.Id})"); continue; } foreach (Permission permission in group.Permissions) { permissions.AddPermission(newGroup, permission.Name); } } // restore parent groups foreach (RocketPermissionsGroup group in legacyPermissions.Groups) { if (string.IsNullOrEmpty(group.ParentGroup)) { continue; } IPermissionGroup sourceGroup = permissions.GetGroup(group.Id); if (sourceGroup == null) { continue; } IPermissionGroup targetGroup = permissions.GetGroup(group.ParentGroup); if (targetGroup == null) { continue; } if (legacyPermissions.DefaultGroup.Equals(group.Id)) { GroupPermissionSection section = permissions.GetConfigSection <GroupPermissionSection>(sourceGroup, false); section.AutoAssign = true; section.Save(); } permissions.AddGroup(sourceGroup, targetGroup); } //todo migrate players permissions.Save(); }