Beispiel #1
0
        private Cache ReadCacheFile(string cacheFilePath)
        {
            Cache cache;

            using (var xmlReader = XmlReader.Create(cacheFilePath))
            {
                cache = (Cache)CacheXmlSerializer.Deserialize(xmlReader);
            }

            cache.Validate();

            if (cache.InstallationId != InstallationId.ToString())
            {
                return(null);
            }

            foreach (CachePluginInfo pluginInfo in cache.PluginInfos)
            {
                if (!System.IO.File.Exists(pluginInfo.PluginFile))
                {
                    return(null);
                }

                if (System.IO.File.GetLastWriteTimeUtc(pluginInfo.PluginFile) > pluginInfo.PluginFileModificationTime)
                {
                    return(null);
                }
            }

            return(cache);
        }
Beispiel #2
0
        private void Init(bool forInstall)
        {
            var dbConnectionString = Helpers.MakeSqlConnectionString("mssql", "vault", "sa", DatabasePassword);

            _globalValues = new Dictionary <string, string>
            {
                ["globalSettings__baseServiceUri__vault"]               = Url,
                ["globalSettings__baseServiceUri__api"]                 = $"{Url}/api",
                ["globalSettings__baseServiceUri__identity"]            = $"{Url}/identity",
                ["globalSettings__baseServiceUri__admin"]               = $"{Url}/admin",
                ["globalSettings__baseServiceUri__notifications"]       = $"{Url}/notifications",
                ["globalSettings__sqlServer__connectionString"]         = $"\"{ dbConnectionString }\"",
                ["globalSettings__identityServer__certificatePassword"] = IdentityCertPassword,
                ["globalSettings__attachment__baseDirectory"]           = $"{OutputDirectory}/core/attachments",
                ["globalSettings__attachment__baseUrl"]                 = $"{Url}/attachments",
                ["globalSettings__dataProtection__directory"]           = $"{OutputDirectory}/core/aspnet-dataprotection",
                ["globalSettings__logDirectory"]         = $"{OutputDirectory}/logs",
                ["globalSettings__licenseDirectory"]     = $"{OutputDirectory}/core/licenses",
                ["globalSettings__internalIdentityKey"]  = Helpers.SecureRandomString(64, alpha: true, numeric: true),
                ["globalSettings__duo__aKey"]            = Helpers.SecureRandomString(64, alpha: true, numeric: true),
                ["globalSettings__installation__id"]     = InstallationId?.ToString(),
                ["globalSettings__installation__key"]    = InstallationKey,
                ["globalSettings__yubico__clientId"]     = "REPLACE",
                ["globalSettings__yubico__key"]          = "REPLACE",
                ["globalSettings__mail__replyToEmail"]   = $"no-reply@{Domain}",
                ["globalSettings__mail__smtp__host"]     = "REPLACE",
                ["globalSettings__mail__smtp__username"] = "******",
                ["globalSettings__mail__smtp__password"] = "******",
                ["globalSettings__mail__smtp__ssl"]      = "true",
                ["globalSettings__mail__smtp__port"]     = "587",
                ["globalSettings__mail__smtp__useDefaultCredentials"] = "false",
                ["globalSettings__disableUserRegistration"]           = "false",
                ["adminSettings__admins"] = string.Empty,
            };

            if (forInstall && !Push)
            {
                _globalValues.Add("globalSettings__pushRelayBaseUri", "REPLACE");
            }

            _mssqlValues = new Dictionary <string, string>
            {
                ["ACCEPT_EULA"] = "Y",
                ["MSSQL_PID"]   = "Express",
                ["SA_PASSWORD"] = DatabasePassword,
            };
        }
Beispiel #3
0
        /// <inheritdoc />
        protected override void LoadPlugins(PluginCallback pluginCallback, IProgressMonitor progressMonitor)
        {
            // Attempt to read the old cache.
            string cacheFilePath;

            try
            {
                Hash64 hash = new Hash64();
                foreach (string pluginPath in PluginPaths)
                {
                    hash = hash.Add(pluginPath);
                }
                foreach (string constant in InitialPreprocessorConstants)
                {
                    hash = hash.Add(constant);
                }
                hash = hash.Add(InstallationId.ToString());

                string cacheDirPath  = GetCurrentUserPluginCacheDir();
                string cacheFileName = hash + ".xml";
                cacheFilePath = Path.Combine(cacheDirPath, cacheFileName);

                if (Directory.Exists(cacheDirPath))
                {
                    if (File.Exists(cacheFilePath))
                    {
                        Cache oldCache = ReadCacheFile(cacheFilePath);
                        if (oldCache != null)
                        {
                            foreach (var pluginInfo in oldCache.PluginInfos)
                            {
                                pluginCallback(pluginInfo.Plugin, new DirectoryInfo(pluginInfo.BaseDirectory), pluginInfo.PluginFile);
                            }
                            return;
                        }
                    }
                }
                else
                {
                    Directory.CreateDirectory(cacheDirPath);
                }
            }
            catch (Exception)
            {
                // Fallback on any failure.
                // There can be all sorts of weird security exceptions that will prevent
                // us from manipulating the local application data directory.
                base.LoadPlugins(pluginCallback, progressMonitor);
                return;
            }

            // Load plugin metadata.
            var newCache = new Cache
            {
                InstallationId = InstallationId.ToString()
            };

            base.LoadPlugins((plugin, baseDirectory, pluginFile) =>
            {
                newCache.PluginInfos.Add(new CachePluginInfo
                {
                    Plugin        = plugin,
                    BaseDirectory = baseDirectory.FullName,
                    PluginFile    = pluginFile,
                    PluginFileModificationTime = File.GetLastWriteTimeUtc(pluginFile)
                });

                pluginCallback(plugin, baseDirectory, pluginFile);
            }, progressMonitor);

            // Attempt to store it in the cache.
            try
            {
                WriteCacheFile(cacheFilePath, newCache);
            }
            catch (Exception)
            {
                // Ignore any failure.
            }
        }