예제 #1
0
        protected override IPermissionProvider LoadProvider()
        {
            ConfigurationPermissionProvider provider = (ConfigurationPermissionProvider)GetPermissionProvider();

            provider.LoadFromConfig(GroupsConfig, PlayersConfig);
            return(provider);
        }
예제 #2
0
        /// <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");
            }
        }
예제 #3
0
        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();
        }