Exemple #1
0
        public YamlDataStore(DataStoreCreationParameters parameters)
        {
            parameters.Suffix ??= string.Empty;
            if (!string.IsNullOrEmpty(parameters.Prefix))
            {
                m_Prefix = $"{parameters.Prefix}.";
            }

            m_BasePath = parameters.WorkingDirectory;

            if (!string.IsNullOrEmpty(m_Suffix))
            {
                m_Suffix = $".{parameters.Suffix}";
            }

            m_Serializer = new SerializerBuilder()
                           .WithNamingConvention(new CamelCaseNamingConvention())
                           .EmitDefaults()
                           .Build();

            m_Deserializer = new DeserializerBuilder()
                             .WithNamingConvention(new CamelCaseNamingConvention())
                             .Build();

            m_ChangeListeners = new List <KeyValuePair <IOpenModComponent, Action> >();
            s_Locks           = new ConcurrentDictionary <string, object>();
        }
Exemple #2
0
        public IDataStore CreateDataStore(DataStoreCreationParameters parameters)
        {
            var lifetime = parameters.Component?.LifetimeScope
                           ?? m_ServiceProvider.GetRequiredService <IRuntime>().LifetimeScope;

            return(ActivatorUtilitiesEx.CreateInstance <YamlDataStore>(lifetime, parameters));
        }
Exemple #3
0
        public IDataStore CreateDataStore(DataStoreCreationParameters parameters)
        {
            var logger        = _loggerFactory.CreateLogger <WebDataStore>();
            var configuration = _pluginAccessor.Instance.Configuration;
            var baseDataStore = _parentDataStoreFactory.CreateDataStore(parameters);

            return(new WebDataStore(parameters.ComponentId, configuration, baseDataStore, logger));
        }
Exemple #4
0
        public YamlDataStore(DataStoreCreationParameters parameters,
                             ILogger <YamlDataStore>?logger,
                             IRuntime?runtime)
        {
            m_LogOnChange  = parameters.LogOnChange;
            m_Logger       = logger;
            m_Runtime      = runtime;
            m_WriteCounter = new Dictionary <string, int>();
            m_WatchedFiles = new List <string>();
            m_KnownKeys    = new HashSet <string>();
            m_ContentHash  = new Dictionary <string, string>();

            if (!string.IsNullOrEmpty(parameters.Prefix))
            {
                m_Prefix = $"{parameters.Prefix}.";
            }

            m_BasePath = parameters.WorkingDirectory;

            if (!string.IsNullOrEmpty(parameters.Suffix))
            {
                m_Suffix = $".{parameters.Suffix}";
            }

            m_Serializer = new SerializerBuilder()
                           .WithNamingConvention(CamelCaseNamingConvention.Instance)
                           .WithTypeConverter(new YamlNullableEnumTypeConverter())
                           .DisableAliases()
                           .Build();

            m_Deserializer = new DeserializerBuilder()
                             .WithNamingConvention(CamelCaseNamingConvention.Instance)
                             .IgnoreUnmatchedProperties()
                             .WithTypeConverter(new YamlNullableEnumTypeConverter())
                             .Build();

            m_ChangeListeners = new List <RegisteredChangeListener>();
            m_Locks           = new ConcurrentDictionary <string, object>();

            EnsureFileSystemWatcherCreated(false);
        }
        public void ExecuteMigration(string[] args)
        {
            Logger.Log("Importing RocketMod permissions to OpenMod...");

            var rocketPermissionsPath = Path.Combine(ReadWrite.PATH, "Servers", Provider.serverID, "Rocket", "Permissions.config.xml");
            var deserializer          = new XmlSerializer(typeof(RocketPermissions));

            using var stream = new FileStream(rocketPermissionsPath, FileMode.Open);
            var rocketPermissions = (RocketPermissions)deserializer.Deserialize(stream);

            var openmodRoles = new
            {
                Roles = new List <PermissionRoleData>()
            };

            var openmodUsers = new
            {
                Users = new List <UserData>()
            };

            // importing cooldowns is not possible as they are per command in OpenMod and per permissions in RocketMod
            foreach (var group in rocketPermissions.Groups)
            {
                openmodRoles.Roles.Add(new PermissionRoleData
                {
                    Id   = group.Id,
                    Data = new Dictionary <string, object>
                    {
                        { "color", group.Color },
                        { "prefix", group.Prefix },
                        { "suffix", group.Suffix }
                    },
                    DisplayName    = group.DisplayName,
                    IsAutoAssigned = group.Id.Equals(rocketPermissions.DefaultGroup, StringComparison.OrdinalIgnoreCase),
                    Parents        = new HashSet <string> {
                        group.ParentGroup ?? string.Empty
                    },                                                                   // in rocket default id parameter ParentGroup is null
                    Permissions = new HashSet <string>(group.Permissions.Select(c => "RocketMod:" + c.Name)),
                    Priority    = group.Priority
                });

                foreach (var member in group.Members)
                {
                    var userData = openmodUsers.Users.Find(d => d.Id == member);
                    if (userData == null)
                    {
                        userData = new UserData
                        {
                            Data            = new Dictionary <string, object>(),
                            FirstSeen       = DateTime.Now,
                            LastSeen        = DateTime.Now,
                            Id              = member,
                            LastDisplayName = member,
                            Permissions     = new HashSet <string>(),
                            Roles           = new HashSet <string>(),
                            Type            = "player"
                        };

                        openmodUsers.Users.Add(userData);
                    }

                    userData.Roles.Add(group.Id);
                }
            }

            var apiAssembly      = AssemblyHelper.GetAssembly("OpenMod.API");
            var workingDirectory = OpenModInstallerPlugin.Instance.OpenModManager.WorkingDirectory;

            var dataStoreParams = new DataStoreCreationParameters
            {
                ComponentId      = "OpenMod.Core",
                Prefix           = "openmod",
                WorkingDirectory = workingDirectory
            };

            var dataStore = new YamlDataStore(dataStoreParams, null, null);

            AsyncHelperEx.RunSync(() => dataStore.SaveAsync("roles", openmodRoles));
            AsyncHelperEx.RunSync(() => dataStore.SaveAsync("users", openmodUsers));

            Logger.Log($"Imported {openmodRoles.Roles.Count} permission group(s) and {openmodUsers.Users.Count} player(s) from RocketMod's Permission.config.xml to OpenMod.");
        }
Exemple #6
0
 public IDataStore CreateDataStore(DataStoreCreationParameters parameters)
 {
     return(new YamlDataStore(parameters));
 }