Esempio n. 1
0
        public static bool CreateDatabaseFromRoot(string mysqlHostName, string rootPassword, string serverName,
                                                  string ipAddress, string random)
        {
            if (!(VerifyHostName(serverName) && VerifyHostAddress(ipAddress)))
            {
                if (!Debugger.IsAttached)
                {
                    return(true); // Probable hack attempt - fail silently
                }
            }

            try
            {
                random = random.Trim();

                if (random.Length > 5)               // if UI-enforced maxlength beaten somehow, limit here
                {
                    random = random.Substring(0, 5); // MySQL will hit a maxlength otherwise
                }

                if (string.IsNullOrEmpty(random))
                {
                    random = Authentication.CreateWeakSecret(5);
                }

                SwarmDb.Credentials rootCredentials = new SwarmDb.Credentials("mysql",
                                                                              new SwarmDb.ServerSet(mysqlHostName), "root", rootPassword);

                string readPass  = GenerateLongPassword();
                string writePass = GenerateLongPassword();
                string adminPass = GenerateLongPassword();

                string[] initInstructions =
                    DbCreateScript.Replace("[random]", random)
                    .Replace("[readpass]", readPass)
                    .Replace("[writepass]", writePass)
                    .Replace("[adminpass]", adminPass).Split('#');

                SwarmDb.GetTestDatabase(rootCredentials).ExecuteAdminCommands(initInstructions);

                PermissionsAnalysis permissionsResult = FirstCredentialsTest(
                    "Swarmops-" + random, mysqlHostName, "Swarmops-R-" + random, readPass,
                    "Swarmops-" + random, mysqlHostName, "Swarmops-W-" + random, writePass,
                    "Swarmops-" + random, mysqlHostName, "Swarmops-A-" + random, adminPass,
                    serverName, ipAddress);

                if (!permissionsResult.AllPermissionsOk)
                {
                    throw new InvalidOperationException("waaaaaah");
                }

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }
Esempio n. 2
0
    public static PermissionsAnalysis FirstCredentialsTest
        (string readDatabase, string readServer, string readUser, string readPassword,
        string writeDatabase, string writeServer, string writeUser, string writePassword,
        string adminDatabase, string adminServer, string adminUser, string adminPassword,
        string serverName, string ipAddress)
    {
        if (!(VerifyHostName(serverName) && VerifyHostAddress(ipAddress)))
        {
            if (!Debugger.IsAttached)
            {
                return(null); // Probable hack attempt - fail silently
            }
        }

        _testReadCredentials = new SwarmDb.Credentials(
            readDatabase, new SwarmDb.ServerSet(readServer), readUser, readPassword);
        _testWriteCredentials = new SwarmDb.Credentials(
            writeDatabase, new SwarmDb.ServerSet(writeServer), writeUser, writePassword);
        _testAdminCredentials = new SwarmDb.Credentials(
            adminDatabase, new SwarmDb.ServerSet(adminServer), adminUser, adminPassword);

        return(RecheckDatabasePermissions()); // Subsequent tests only call this function
    }
Esempio n. 3
0
 public static void ResetTestCredentials()
 {
     _testReadCredentials          =
         _testWriteCredentials     =
             _testAdminCredentials = null;
 }
Esempio n. 4
0
        public static AjaxCallResult CreateDatabaseFromRoot(string mysqlHostName, string rootPassword, string serverName,
                                                            string ipAddress, string random)
        {
            if (!(VerifyHostName(serverName) && VerifyHostAddress(ipAddress)))
            {
                if (!Debugger.IsAttached)
                {
                    return(new AjaxCallResult {
                        Success = true
                    });                                         // Probable hack attempt - fail silently
                }
            }

            try
            {
                random = random.Trim();

                if (random.Length > 5)               // if UI-enforced maxlength beaten somehow, limit here
                {
                    random = random.Substring(0, 5); // MySQL will hit a maxlength otherwise
                }

                if (string.IsNullOrEmpty(random))
                {
                    random = Authentication.CreateWeakSecret(5);
                }

                SwarmDb.Credentials rootCredentials = new SwarmDb.Credentials("mysql",
                                                                              new SwarmDb.ServerSet(mysqlHostName), "root", rootPassword);

                string readPass  = GenerateLongPassword();
                string writePass = GenerateLongPassword();
                string adminPass = GenerateLongPassword();

                string[] initInstructions =
                    DbCreateScript.Replace("[random]", random)
                    .Replace("[readpass]", readPass)
                    .Replace("[writepass]", writePass)
                    .Replace("[adminpass]", adminPass).Split('#');

                try
                {
                    SwarmDb.GetTestDatabase(rootCredentials).ExecuteAdminCommands(initInstructions);
                }
                catch (DatabaseExecuteException sqlException)
                {
                    return(new AjaxCallResult
                    {
                        Success = false,
                        DisplayMessage = sqlException.AttemptedCommand
                    });
                }

                PermissionsAnalysis permissionsResult = FirstCredentialsTest(
                    "Swarmops-" + random, mysqlHostName, "Swarmops-R-" + random, readPass,
                    "Swarmops-" + random, mysqlHostName, "Swarmops-W-" + random, writePass,
                    "Swarmops-" + random, mysqlHostName, "Swarmops-A-" + random, adminPass,
                    serverName, ipAddress);

                if (!permissionsResult.AllPermissionsOk)
                {
                    // TODO: Return a better exccption detailing exactly what permission isn't set as required

                    return(new AjaxCallResult {
                        Success = false
                    });
                }

                return(new AjaxCallResult {
                    Success = true
                });
            }
            catch (Exception)
            {
                return(new AjaxCallResult {
                    Success = false
                });
            }
        }