Example #1
0
        public void SaveAndReloadCredentials()
        {
            var originalCredentials = new DataAccessCredentials(CatalogueRepository, "bob");

            try
            {
                originalCredentials.Name     = "bob1";
                originalCredentials.Username = "******";
                originalCredentials.Password = "******";
                originalCredentials.SaveToDatabase();

                var newCopy = CatalogueRepository.GetObjectByID <DataAccessCredentials>(originalCredentials.ID);
                Assert.AreEqual(originalCredentials.Name, newCopy.Name);
                Assert.AreEqual(originalCredentials.Username, newCopy.Username);
                Assert.AreEqual(originalCredentials.Password, newCopy.Password);

                //test overridden Equals
                Assert.AreEqual(originalCredentials, newCopy);
                originalCredentials.Password = "******";
                Assert.AreEqual(originalCredentials, newCopy);//they are still equal because IDs are the same
            }
            finally
            {
                originalCredentials.DeleteInDatabase();
            }
        }
Example #2
0
        public void CreateNewCredentialsThenGetByUsernamePasswordCombo()
        {
            var newCredentials = new DataAccessCredentials(CatalogueRepository, "bob");

            newCredentials.Username = "******";
            newCredentials.Password = "******";
            newCredentials.SaveToDatabase();

            var newCopy = CatalogueRepository.GetAllObjects <DataAccessCredentials>("WHERE Username='******'").SingleOrDefault();

            Assert.IsNotNull(newCopy);

            try
            {
                Assert.NotNull(newCopy);
                Assert.AreEqual(newCredentials.ID, newCopy.ID);
                Assert.AreEqual(newCredentials.Username, newCopy.Username);
                Assert.AreEqual(newCredentials.GetDecryptedPassword(), newCopy.GetDecryptedPassword());
                Assert.AreEqual(newCredentials.Password, newCopy.Password);
            }
            finally
            {
                newCredentials.DeleteInDatabase();
            }
        }
Example #3
0
        public void GetCredentialsFromATableInfo()
        {
            TableInfo tableInfo = new TableInfo(CatalogueRepository, "GetCredentialsFromATableInfo");

            tableInfo.Name = "My Exciting Table";

            var creds = new DataAccessCredentials(CatalogueRepository);

            try
            {
                creds.Name = "Test";
                creds.SaveToDatabase();

                tableInfo.SetCredentials(creds, DataAccessContext.InternalDataProcessing);
                tableInfo.SaveToDatabase();

                //Go via TableInfo and get credentials
                DataAccessCredentials creds2 = (DataAccessCredentials)tableInfo.GetCredentialsIfExists(DataAccessContext.InternalDataProcessing);
                Assert.AreEqual(creds2.Name, creds.Name);
            }
            finally
            {
                tableInfo.DeleteInDatabase();
                creds.DeleteInDatabase();
            }
        }
Example #4
0
        public void TestThe_Any_EnumValue()
        {
            TableInfo tableInfo = new TableInfo(CatalogueRepository, "GetCredentialsFromATableInfo");

            tableInfo.Name = "My Exciting Table";
            tableInfo.SaveToDatabase();

            var creds = new DataAccessCredentials(CatalogueRepository);

            try
            {
                creds.Name = "Test";
                creds.SaveToDatabase();

                //now create the association as Any
                tableInfo.SetCredentials(creds, DataAccessContext.Any);

                //because the credential is liscenced to be used under ANY context, you can make requests under any of the specific contexts and be served the Any result
                var creds2 = tableInfo.GetCredentialsIfExists(DataAccessContext.InternalDataProcessing);
                Assert.NotNull(creds2);
                creds2 = tableInfo.GetCredentialsIfExists(DataAccessContext.DataExport);
                Assert.NotNull(creds2);
                creds2 = tableInfo.GetCredentialsIfExists(DataAccessContext.DataLoad);
                Assert.NotNull(creds2);
            }
            finally
            {
                tableInfo.DeleteInDatabase();
                creds.DeleteInDatabase();
            }
        }
Example #5
0
        public void Test_Any_PrioritisingTheMoreAppropriateCredential()
        {
            TableInfo tableInfo = new TableInfo(CatalogueRepository, "GetCredentialsFromATableInfo");

            tableInfo.Name = "Tableinfo1";
            tableInfo.SaveToDatabase();

            var creds  = new DataAccessCredentials(CatalogueRepository);
            var creds2 = new DataAccessCredentials(CatalogueRepository);

            try
            {
                creds.Name = "Test";
                creds.SaveToDatabase();

                //now create the association as Any
                tableInfo.SetCredentials(creds, DataAccessContext.DataLoad);
                tableInfo.SetCredentials(creds2, DataAccessContext.Any);


                Assert.AreEqual(creds, tableInfo.GetCredentialsIfExists(DataAccessContext.DataLoad));
            }
            finally
            {
                tableInfo.DeleteInDatabase();
                creds.DeleteInDatabase();
                creds2.DeleteInDatabase();
            }
        }
Example #6
0
        public void TestThe_Any_EnumValue_CannotRequestAnyCredentials()
        {
            TableInfo tableInfo = new TableInfo(CatalogueRepository, "GetCredentialsFromATableInfo");

            tableInfo.Name = "My Exciting Table";

            var creds = new DataAccessCredentials(CatalogueRepository);

            try
            {
                creds.Name = "Test";
                creds.SaveToDatabase();

                tableInfo.SetCredentials(creds, DataAccessContext.InternalDataProcessing);
                tableInfo.SaveToDatabase();

                //attempt to request ANY credentials
                var ex = Assert.Throws <Exception>(() => tableInfo.GetCredentialsIfExists(DataAccessContext.Any));
                Assert.AreEqual("You cannot ask for any credentials, you must supply a usage context.", ex.Message);
            }
            finally
            {
                tableInfo.DeleteInDatabase();
                creds.DeleteInDatabase();
            }
        }
Example #7
0
        public void TestGettingConnectionStrings()
        {
            foreach (TableInfo tbl in CatalogueRepository.GetAllObjects <TableInfo>().Where(table => table.Name.ToLower().Equals("bob")))
            {
                tbl.DeleteInDatabase();
            }

            foreach (var c in CatalogueRepository.GetAllObjects <DataAccessCredentials>().Where(cred => cred.Name.ToLower().Equals("bob")))
            {
                c.DeleteInDatabase();
            }

            //test it with TableInfos
            TableInfo t = new TableInfo(CatalogueRepository, "Bob");

            try
            {
                t.Server   = "fish";
                t.Database = "bobsDatabase";
                t.SaveToDatabase();

                //t has no credentials
                var server = DataAccessPortal.GetInstance().ExpectServer(t, DataAccessContext.InternalDataProcessing);

                Assert.AreEqual(typeof(SqlConnectionStringBuilder), server.Builder.GetType());
                Assert.AreEqual("fish", ((SqlConnectionStringBuilder)server.Builder).DataSource);
                Assert.AreEqual("bobsDatabase", ((SqlConnectionStringBuilder)server.Builder).InitialCatalog);
                Assert.AreEqual(true, ((SqlConnectionStringBuilder)server.Builder).IntegratedSecurity);

                var creds = new DataAccessCredentials(CatalogueRepository, "Bob");
                try
                {
                    t.SetCredentials(creds, DataAccessContext.InternalDataProcessing, true);
                    creds.Username = "******";
                    creds.Password = "******";
                    creds.SaveToDatabase();


                    ////t has some credentials now
                    server = DataAccessPortal.GetInstance().ExpectServer(t, DataAccessContext.InternalDataProcessing);

                    Assert.AreEqual(typeof(SqlConnectionStringBuilder), server.Builder.GetType());
                    Assert.AreEqual("fish", ((SqlConnectionStringBuilder)server.Builder).DataSource);
                    Assert.AreEqual("bobsDatabase", ((SqlConnectionStringBuilder)server.Builder).InitialCatalog);
                    Assert.AreEqual("frank", ((SqlConnectionStringBuilder)server.Builder).UserID);
                    Assert.AreEqual("bobsPassword", ((SqlConnectionStringBuilder)server.Builder).Password);
                    Assert.AreEqual(false, ((SqlConnectionStringBuilder)server.Builder).IntegratedSecurity);
                }
                finally
                {
                    var linker = new TableInfoCredentialsManager(CatalogueRepository);
                    linker.BreakAllLinksBetween(creds, t);
                    creds.DeleteInDatabase();
                }
            }
            finally
            {
                t.DeleteInDatabase();
            }
        }
Example #8
0
        public void Test_BlankPasswords()
        {
            var creds = new DataAccessCredentials(CatalogueRepository, "blankpwdCreds");

            creds.Username = "******";
            creds.Password = "";

            creds.SaveToDatabase();


            var manager = new TableInfoCredentialsManager(CatalogueRepository);

            Assert.AreEqual(creds, manager.GetCredentialByUsernameAndPasswordIfExists("Root", null));
            Assert.AreEqual(creds, manager.GetCredentialByUsernameAndPasswordIfExists("Root", ""));
        }
Example #9
0
        public void DataAccessCredentialsEncryption()
        {
            //cleanup
            foreach (var c in CatalogueRepository.GetAllObjects <DataAccessCredentials>().Where(c => c.Name.Equals("frankieFran")))
            {
                c.DeleteInDatabase();
            }

            DataAccessCredentials creds = new DataAccessCredentials(CatalogueRepository, "frankieFran");

            try
            {
                //as soon as you set a password it should be encrypted by the credentials class in memory
                creds.Password = "******";
                Assert.AreNotEqual("fish", creds.Password);
                Assert.AreEqual("fish", creds.GetDecryptedPassword());//but we should still be able to decrypt it

                //save it
                creds.SaveToDatabase();
                using (var con = CatalogueRepository.GetConnection())
                {
                    string value;
                    using (var cmd = DatabaseCommandHelper.GetCommand("Select Password from DataAccessCredentials where Name='frankieFran'", con.Connection, con.Transaction))
                        value = (string)cmd.ExecuteScalar();

                    //ensure password in database is encrypted
                    Assert.AreNotEqual("fish", value);
                    Assert.AreEqual(creds.Password, value);//does value in database match value in memory (encrypted)
                }

                //get a new copy out of the database
                DataAccessCredentials newCopy = CatalogueRepository.GetObjectByID <DataAccessCredentials>(creds.ID);
                Assert.AreEqual(creds.Password, newCopy.Password); //passwords should match
                Assert.AreNotEqual("fish", creds.Password);        //neither should be fish
                Assert.AreNotEqual("fish", newCopy.Password);

                //both should decrypt to the same value (fish
                Assert.AreEqual("fish", creds.GetDecryptedPassword());
                Assert.AreEqual("fish", newCopy.GetDecryptedPassword());
            }
            finally
            {
                creds.DeleteInDatabase();
            }
        }
Example #10
0
        public void GetConnectionStringFromCatalogueWhereOneTableInfoUsesACredentialsOverride()
        {
            Catalogue     c   = new Catalogue(CatalogueRepository, "GetConnectionStringFromCatalogueWhereOneTableInfoUsesACredentialsOverride");
            CatalogueItem ci  = new CatalogueItem(CatalogueRepository, c, "GetConnectionStringFromCatalogueWhereOneTableInfoUsesACredentialsOverride");
            TableInfo     t   = new TableInfo(CatalogueRepository, "Test");
            ColumnInfo    col = new ColumnInfo(CatalogueRepository, "[mydatabase].dbo.test.col", "varchar(10)", t);

            var extractionInformation = new ExtractionInformation(CatalogueRepository, ci, col, col.Name);

            DataAccessCredentials cred = null;

            try
            {
                t.Server   = "myserver";
                t.Database = "mydatabase";

                cred          = new DataAccessCredentials(CatalogueRepository, "bob");
                cred.Username = "******";
                cred.Password = "******";

                Assert.AreNotEqual("pass", cred.Password);
                Assert.AreEqual("pass", cred.GetDecryptedPassword());


                cred.SaveToDatabase();
                t.SetCredentials(cred, DataAccessContext.InternalDataProcessing);
                t.SaveToDatabase();

                var constr = (SqlConnectionStringBuilder)c.GetDistinctLiveDatabaseServer(DataAccessContext.InternalDataProcessing, false).Builder;
                Assert.AreEqual("myserver", constr.DataSource);
                Assert.False(constr.IntegratedSecurity);
                Assert.AreEqual("bob", constr.UserID);
                Assert.AreEqual("pass", constr.Password);
            }
            finally
            {
                t.DeleteInDatabase();
                if (cred != null)
                {
                    cred.DeleteInDatabase();
                }
                c.DeleteInDatabase();//no need to delete ci because of cascades
            }
        }
Example #11
0
        public void TestRemoteTableAttacher_Normal(DatabaseType dbType)
        {
            var db = GetCleanedServer(dbType);

            var attacher = new RemoteTableAttacher();

            //where to go for data
            attacher.RemoteServer       = db.Server.Name;
            attacher.RemoteDatabaseName = db.GetRuntimeName();
            attacher.DatabaseType       = db.Server.DatabaseType;

            if (db.Server.ExplicitUsernameIfAny != null)
            {
                var creds = new DataAccessCredentials(CatalogueRepository);
                creds.Username = db.Server.ExplicitUsernameIfAny;
                creds.Password = db.Server.ExplicitPasswordIfAny;
                creds.SaveToDatabase();
                attacher.RemoteTableAccessCredentials = creds;
            }

            RunAttachStageWithNormalJob(attacher, db);
        }