示例#1
0
文件: Program.cs 项目: AlecJY/core
        private static void PrintEnvironment()
        {
            var vaultUrl = Helpers.GetValueFronEnvFile("global", "globalSettings__baseServiceUri__vault");

            Console.WriteLine("\nbitwarden is up and running!");
            Console.WriteLine("===================================================");
            Console.WriteLine("\n- visit {0}", vaultUrl);
            Console.Write("- to update, run ");
            if (_parameters.ContainsKey("env") && _parameters["env"] == "win")
            {
                Console.Write("'.\\bitwarden.ps1 -update'");
            }
            else
            {
                Console.Write("'./bitwarden.sh update'");
            }
            Console.WriteLine("\n");
        }
示例#2
0
        private static void PrintEnvironment()
        {
            var vaultUrl = Helpers.GetValueFronEnvFile("global", "globalSettings__baseServiceUri__vault");

            Console.WriteLine("\nbitwarden is up and running!");
            Console.WriteLine("===================================================");
            Console.WriteLine("\nvisit {0}", vaultUrl);
            Console.Write("to update, run ");
            if (_hostOs == "win")
            {
                Console.Write("'.\\bitwarden.ps1 -updateself' and then '.\\bitwarden.ps1 -update'");
            }
            else
            {
                Console.Write("'./bitwarden.sh updateself' and then './bitwarden.sh update'");
            }
            Console.WriteLine("\n");
        }
示例#3
0
        private static void MigrateDatabase()
        {
            Console.WriteLine("Migrating database.");

            var dbPass = Helpers.GetValueFronEnvFile("mssql", "SA_PASSWORD");
            var masterConnectionString = Helpers.MakeSqlConnectionString(
                "mssql", "master", "sa", dbPass ?? string.Empty);
            var vaultConnectionString = Helpers.MakeSqlConnectionString(
                "mssql", "vault", "sa", dbPass ?? string.Empty);

            using (var connection = new SqlConnection(masterConnectionString))
            {
                var command = new SqlCommand(
                    "IF ((SELECT COUNT(1) FROM sys.databases WHERE [name] = 'vault') = 0) CREATE DATABASE [vault];",
                    connection);
                command.Connection.Open();
                command.ExecuteNonQuery();
            }

            var upgrader = DeployChanges.To
                           .SqlDatabase(vaultConnectionString)
                           .JournalToSqlTable("dbo", "Migration")
                           .WithScriptsAndCodeEmbeddedInAssembly(Assembly.GetExecutingAssembly(),
                                                                 s => s.Contains($".DbScripts.") && !s.Contains(".Archive."))
                           .WithTransaction()
                           .WithExecutionTimeout(new TimeSpan(0, 5, 0))
                           .LogToConsole()
                           .Build();

            var result = upgrader.PerformUpgrade();

            if (result.Successful)
            {
                Console.WriteLine("Migration successful.");
            }
            else
            {
                Console.WriteLine("Migration failed.");
            }
        }
示例#4
0
        private static void RebuildConfigs()
        {
            var url = Helpers.GetValueFronEnvFile("global", "globalSettings__baseServiceUri__vault");

            if (!Uri.TryCreate(url, UriKind.Absolute, out Uri uri))
            {
                Console.WriteLine("Unable to determine existing installation url.");
                return;
            }
            var domain = uri.Host;

            var nginxBuilder = new NginxConfigBuilder(domain);

            nginxBuilder.UpdateContext();
            nginxBuilder.BuildForUpdater();

            var appSettingsBuilder = new AppSettingsBuilder(url, domain);

            appSettingsBuilder.Build();

            var appIdBuilder = new AppIdBuilder(url);

            appIdBuilder.Build();
        }
示例#5
0
        public void LoadConfiguration()
        {
            if (!File.Exists(ConfigPath))
            {
                Console.WriteLine("No existing `config.yml` detected. Let's generate one.");

                // Looks like updating from older version. Try to create config file.
                var url = Helpers.GetValueFronEnvFile("global", "globalSettings__baseServiceUri__vault");
                if (!Uri.TryCreate(url, UriKind.Absolute, out var uri))
                {
                    Console.WriteLine("Unable to determine existing installation url.");
                    return;
                }
                Config.Url = url;

                var push = Helpers.GetValueFronEnvFile("global", "globalSettings__pushRelayBaseUri");
                Config.PushNotifications = push != "REPLACE";

                var composeFile = "/bitwarden/docker/docker-compose.yml";
                if (File.Exists(composeFile))
                {
                    var fileLines = File.ReadAllLines(composeFile);
                    foreach (var line in fileLines)
                    {
                        if (!line.StartsWith("# Parameter:"))
                        {
                            continue;
                        }

                        var paramParts = line.Split("=");
                        if (paramParts.Length < 2)
                        {
                            continue;
                        }

                        if (paramParts[0] == "# Parameter:MssqlDataDockerVolume" &&
                            bool.TryParse(paramParts[1], out var mssqlDataDockerVolume))
                        {
                            Config.DatabaseDockerVolume = mssqlDataDockerVolume;
                            continue;
                        }

                        if (paramParts[0] == "# Parameter:HttpPort" && int.TryParse(paramParts[1], out var httpPort))
                        {
                            Config.HttpPort = httpPort == 0 ? null : httpPort.ToString();
                            continue;
                        }

                        if (paramParts[0] == "# Parameter:HttpsPort" && int.TryParse(paramParts[1], out var httpsPort))
                        {
                            Config.HttpsPort = httpsPort == 0 ? null : httpsPort.ToString();
                            continue;
                        }
                    }
                }

                var nginxFile = "/bitwarden/nginx/default.conf";
                if (File.Exists(nginxFile))
                {
                    var confContent = File.ReadAllText(nginxFile);
                    var selfSigned  = confContent.Contains("/etc/ssl/self/");
                    Config.Ssl = confContent.Contains("ssl http2;");
                    Config.SslManagedLetsEncrypt = !selfSigned && confContent.Contains("/etc/letsencrypt/live/");
                    var diffieHellman = confContent.Contains("/dhparam.pem;");
                    var trusted       = confContent.Contains("ssl_trusted_certificate ");
                    if (Config.SslManagedLetsEncrypt)
                    {
                        Config.Ssl = true;
                    }
                    else if (Config.Ssl)
                    {
                        var sslPath = selfSigned ? $"/etc/ssl/self/{Config.Domain}" : $"/etc/ssl/{Config.Domain}";
                        Config.SslCertificatePath = string.Concat(sslPath, "/", "certificate.crt");
                        Config.SslKeyPath         = string.Concat(sslPath, "/", "private.key");
                        if (trusted)
                        {
                            Config.SslCaPath = string.Concat(sslPath, "/", "ca.crt");
                        }
                        if (diffieHellman)
                        {
                            Config.SslDiffieHellmanPath = string.Concat(sslPath, "/", "dhparam.pem");
                        }
                    }
                }

                SaveConfiguration();
            }

            var configText   = File.ReadAllText(ConfigPath);
            var deserializer = new DeserializerBuilder()
                               .WithNamingConvention(new UnderscoredNamingConvention())
                               .Build();

            Config = deserializer.Deserialize <Configuration>(configText);
        }