private void SetStateFlag()
        {
            ViewBag.Exception      = null;
            ViewBag.AlreadyCreated = false;
            if (User.Identity.IsAuthenticated)
            {
                ViewBag.AlreadyCreated = true;
            }
            else
            {
                using (var con = SetupTools.DbTools.OpenConnection())
                {
                    using (var uow = new AdoNetUnitOfWork(con))
                    {
                        var id = uow.ExecuteScalar("SELECT TOP 1 Id FROM Accounts");
                        if (id != null)
                        {
                            ViewBag.AlreadyCreated = true;
                        }
                    }
                }
            }

            if (!ViewBag.AlreadyCreated)
            {
                ViewBag.NextLink = null;
            }
        }
Пример #2
0
        public static async Task <AuthenticationTicket> CreateTicket(HttpRequest request, ApiKeyAuthOptions options)
        {
            var apiKeyHeader    = request.Headers["X-Api-Key"];
            var signatureHeader = request.Headers["X-Api-Signature"];

            if (apiKeyHeader.Count == 0 ||
                signatureHeader.Count == 0)
            {
                return(null);
            }
            var apiKey = apiKeyHeader[0];

            var claims = new List <Claim>()
            {
                new Claim(ClaimTypes.NameIdentifier, apiKey),
                new Claim(ClaimTypes.Name, "ApiKey"),
                new Claim(ClaimTypes.Role, CoderrRoles.System)
            };
            var identity        = new ClaimsIdentity(claims, options.AuthenticationScheme);
            var claimsPrincipal = new ClaimsPrincipal(identity);


            using (var con = options.OpenDb())
            {
                using (var uow = new AdoNetUnitOfWork(con, false))
                {
                    var    repos = new ApiKeyRepository(uow);
                    ApiKey key;
                    try
                    {
                        key = await repos.GetByKeyAsync(apiKey);
                    }
                    catch (EntityNotFoundException)
                    {
                        return(null);
                    }

                    request.EnableRewind();

                    var buf       = new byte[request.ContentLength ?? 0];
                    var bytesRead = await request.Body.ReadAsync(buf, 0, buf.Length);

                    request.Body.Position = 0;
                    if (!key.ValidateSignature(signatureHeader[0], buf))
                    {
                        return(null);
                    }

                    if (key.Claims != null)
                    {
                        identity.AddClaims(key.Claims);
                    }

                    uow.SaveChanges();
                }
            }

            return(new AuthenticationTicket(claimsPrincipal, options.AuthenticationScheme));
        }
Пример #3
0
        /// <summary>
        /// Mains.
        /// </summary>
        /// <param name="args">The arguments.</param>
        static void Main(string[] args)
        {
            CommandBuilderFactory.Assign(mapper => new SqliteCommandBuilder(mapper));

            string cs         = "URI=file:test.db";
            var    connection = new SQLiteConnection(cs);

            connection.Open();

            if (!connection.TableExists("Users"))
            {
                using (var uow = new AdoNetUnitOfWork(connection))
                {
                    uow.Execute(
                        "CREATE TABLE Users (Id INTEGER PRIMARY KEY AUTOINCREMENT, FirstName TEXT, LastName text, CreatedAtUtc INTEGER)");
                    uow.SaveChanges();
                }
            }

            var users = connection.ToList <User>("firstName = @FirstName", new { FirstName = "Gau%" });

            try
            {
                var first = connection.First <User>(new { Id = 1 });
            }
            catch (EntityNotFoundException x)
            {
                Console.WriteLine("Expected to find user, since First was used instead of FirstOrDefault. User friendly error message: " + x.Message);
            }


            // clear old data
            using (var uow = new AdoNetUnitOfWork(connection))
            {
                using (var cmd = uow.CreateCommand())
                {
                    cmd.CommandText = "SELECT * FROM Users";
                    cmd.AddParameter("id", "983498043903");
                    foreach (var entity in cmd.ToEnumerable <User>())
                    {
                        Console.WriteLine(entity.FirstName);
                    }
                }

                uow.Truncate <User>();
                for (int i = 0; i < 100; i++)
                {
                    uow.Insert(new User {
                        FirstName = "Arne" + i
                    });
                }

                uow.SaveChanges();
            }


            Console.WriteLine("Press ENTER to quit.");
            Console.ReadLine();
        }
Пример #4
0
        public void SaveChangesTwice()
        {
            bool isDisposed = false, isCommited = false;
            var  trans = Substitute.For <IDbTransaction>();
            var  uow   = new AdoNetUnitOfWork(trans, x => isDisposed = true, x => isCommited = true);

            uow.SaveChanges();
            Assert.Throws <InvalidOperationException>(() => uow.SaveChanges());
        }
Пример #5
0
        public void SaveChangesTwice()
        {
            bool isDisposed = false, isCommited = false;
            var trans = Substitute.For<IDbTransaction>();
            var uow = new AdoNetUnitOfWork(trans, x => isDisposed = true, x => isCommited = true);

            uow.SaveChanges();
            Assert.Throws<InvalidOperationException>(() => uow.SaveChanges());
        }
Пример #6
0
        public IUnitOfWork CreateUnitOfWork()
        {
            var transaction = _connection.BeginTransaction();
            var uow         = new AdoNetUnitOfWork(transaction, RemoveTransaction, RemoveTransaction);

            _rwLock.EnterWriteLock();
            _uows.AddLast(uow);
            _rwLock.ExitWriteLock();

            return(uow);
        }
Пример #7
0
        /// <summary>
        /// Create a new unit of work implementation
        /// </summary>
        /// <returns>
        /// A unit of work
        /// </returns>
        public IUnitOfWork CreateUnitOfWork()
        {
            var transaction = _connection.BeginTransaction();
            var uow = new AdoNetUnitOfWork(transaction, RemoveTransaction, RemoveTransaction);

            _rwLock.EnterWriteLock();
            _uows.AddLast(uow);
            _rwLock.ExitWriteLock();

            return uow;
        }
Пример #8
0
        public void RolledBack()
        {
            bool isDisposed = false, isCommited = false;
            var  trans = Substitute.For <IDbTransaction>();
            var  uow   = new AdoNetUnitOfWork(trans, x => isDisposed = true, x => isCommited = true);

            uow.Dispose();

            Assert.False(isCommited);
            Assert.True(isDisposed);
            trans.Received().Rollback();
        }
Пример #9
0
        public void RolledBack()
        {
            bool isDisposed = false, isCommited = false;
            var trans = Substitute.For<IDbTransaction>();
            var uow = new AdoNetUnitOfWork(trans, x => isDisposed = true, x => isCommited = true);

            uow.Dispose();

            Assert.False(isCommited);
            Assert.True(isDisposed);
            trans.Received().Rollback();
        }
        public void rollback_transaction_if_savechanges_have_not_been_made()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();

            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);

            sut.Dispose();

            connection.Transactions[0].IsRolledBack.Should().BeTrue();
        }
        public void attach_transaction_to_created_command()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();

            connection.CurrentState = ConnectionState.Open;

            var sut    = new AdoNetUnitOfWork(connection);
            var actual = sut.CreateCommand();

            actual.Transaction.Should().BeSameAs(connection.Transactions[0]);
            actual.Connection.Should().BeSameAs(connection);
        }
        public void close_connection_if_owned_is_set()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();

            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection, true);

            sut.Dispose();

            connection.State.Should().Be(ConnectionState.Closed);
        }
        public void commit_successfully_if_no_commit_have_been_previously_made()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();

            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);

            sut.SaveChanges();

            connection.Transactions[0].IsCommitted.Should().BeTrue();
        }
        public void dont_close_connection_per_default()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();

            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);

            sut.Dispose();

            connection.State.Should().Be(ConnectionState.Open);
        }
        public void use_the_specified_isolation_level()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();

            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection, true, IsolationLevel.Chaos);


            connection.Transactions[0].IsolationLevel.Should().Be(IsolationLevel.Chaos);
            connection.State.Should().Be(ConnectionState.Open);
        }
        public void throw_if_commit_have_been_previously_made()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();

            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection);

            sut.SaveChanges();
            Action actual = sut.SaveChanges;

            actual.Should().Throw <TransactionAlreadyClosedException>();
        }
Пример #17
0
        public EmanetlerRepository(IUnitOfWork uow)
        {
            if (uow == null)
            {
                throw new ArgumentNullException("uow");
            }

            _unitOfWork = uow as AdoNetUnitOfWork;
            if (_unitOfWork == null)
            {
                throw new NotSupportedException("Ohh my, change that UnitOfWorkFactory, will you?");
            }
        }
        public AsyncUnitOfWorkExtensionsTests()
        {
            CommandBuilderFactory.Assign(mapper => new SqliteCommandBuilder(mapper));

            _dbFile = Path.GetTempFileName();
            var cs = "URI=file:" + _dbFile;
            _connection = new SQLiteConnection(cs);
            _connection.Open();

            _uow = new AdoNetUnitOfWork(_connection);
            _userTable.Create(_connection);

        }
Пример #19
0
        public AsyncUnitOfWorkExtensionsTests()
        {
            CommandBuilderFactory.Assign(mapper => new SqliteCommandBuilder(mapper));

            _dbFile = Path.GetTempFileName();
            var cs = "URI=file:" + _dbFile;

            _connection = new SQLiteConnection(cs);
            _connection.Open();

            _uow = new AdoNetUnitOfWork(_connection);
            _userTable.Create(_connection);
        }
Пример #20
0
        static void Main(string[] args)
        {
            CommandBuilderFactory.Assign(mapper => new SqliteCommandBuilder(mapper));

            string cs = "URI=file:test.db";
            var connection = new SQLiteConnection(cs);
            connection.Open();

            if (!connection.TableExists("Users"))
            {
                using (var uow = new AdoNetUnitOfWork(connection))
                {
                    uow.Execute(
                        "CREATE TABLE Users (Id INTEGER PRIMARY KEY AUTOINCREMENT, FirstName TEXT, LastName text, CreatedAtUtc INTEGER)");
                    uow.SaveChanges();
                }
            }

            var users = connection.ToList<User>(new {FirstName = "Gau%"});

            var first = connection.First<User>(new {Id = 1});



            // clear old data
            using (var uow = new AdoNetUnitOfWork(connection))
            {
                using (var cmd = uow.CreateCommand())
                {
                    cmd.CommandText = "SELECT * FROM Users";
                    cmd.AddParameter("id", "983498043903");
                    foreach (var entity in cmd.ToEnumerable<User>())
                    {
                        Console.WriteLine(entity.FirstName);
                    }


                }

                uow.Truncate<User>();
                for (int i = 0; i < 100; i++)
                {
                    uow.Insert(new User { FirstName = "Arne" + i });
                }

                uow.SaveChanges();
            }


        }
Пример #21
0
        static void Main(string[] args)
        {
            CommandBuilderFactory.Assign(mapper => new SqliteCommandBuilder(mapper));

            string cs         = "URI=file:test.db";
            var    connection = new SQLiteConnection(cs);

            connection.Open();

            if (!connection.TableExists("Users"))
            {
                using (var uow = new AdoNetUnitOfWork(connection))
                {
                    uow.Execute(
                        "CREATE TABLE Users (Id INTEGER PRIMARY KEY AUTOINCREMENT, FirstName TEXT, LastName text, CreatedAtUtc INTEGER)");
                    uow.SaveChanges();
                }
            }

            var users = connection.ToList <User>(new { FirstName = "Gau%" });

            var first = connection.First <User>(new { Id = 1 });



            // clear old data
            using (var uow = new AdoNetUnitOfWork(connection))
            {
                using (var cmd = uow.CreateCommand())
                {
                    cmd.CommandText = "SELECT * FROM Users";
                    cmd.AddParameter("id", "983498043903");
                    foreach (var entity in cmd.ToEnumerable <User>())
                    {
                        Console.WriteLine(entity.FirstName);
                    }
                }

                uow.Truncate <User>();
                for (int i = 0; i < 100; i++)
                {
                    uow.Insert(new User {
                        FirstName = "Arne" + i
                    });
                }

                uow.SaveChanges();
            }
        }
Пример #22
0
        static void Main(string[] args)
        {
            //ADORepository<Course> courseRepository = new ADORepository<Course>();

            AdoNetUnitOfWork unitOfWork = new AdoNetUnitOfWork();

            var data = unitOfWork.Courses.GetAll();

            foreach (var course in data)
            {
                Console.WriteLine(course.Title);
            }

            Console.Read();
        }
        public void close_connection_on_dispose_even_if_savechanges_have_been_called()
        {
            var connection = new Griffin.AdoNetFakes.FakeConnection();

            connection.CurrentState = ConnectionState.Open;

            var sut = new AdoNetUnitOfWork(connection, true);

            sut.SaveChanges();
            sut.Dispose();


            connection.Transactions[0].IsCommitted.Should().BeTrue();
            connection.State.Should().Be(ConnectionState.Closed);
        }
Пример #24
0
        public AsyncUnitOfWorkExtensionsTests()
        {
            CommandBuilderFactory.Assign(mapper => new SqliteCommandBuilder(mapper));
            var provider = new AssemblyScanningMappingProvider();

            provider.Scan(Assembly.GetExecutingAssembly());
            EntityMappingProvider.Provider = provider;

            _dbFile = Path.GetTempFileName();
            var cs = "URI=file:" + _dbFile;

            _connection = new SQLiteConnection(cs);
            _connection.Open();

            _uow = new AdoNetUnitOfWork(_connection);
            _userTable.Create(_connection);
        }
Пример #25
0
 public CityRepository(IDbConnection connection, AdoNetUnitOfWork uow)
 {
     this._connection = connection;
     this._uow        = uow;
 }
        public async Task <ActionResult> Admin(AccountViewModel model)
        {
            SetStateFlag();

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                var account = new Account(model.UserName, model.Password);
                account.Activate();
                account.IsSysAdmin = true;
                var con   = SetupTools.DbTools.OpenConnection();
                var uow   = new AdoNetUnitOfWork(con);
                var repos = new AccountRepository(uow);
                if (await repos.IsUserNameTakenAsync(model.UserName))
                {
                    return(Redirect(Url.GetNextWizardStep()));
                }

                account.SetVerifiedEmail(model.EmailAddress);
                await repos.CreateAsync(account);

                var user = new User(account.Id, account.UserName)
                {
                    EmailAddress = account.Email
                };
                var userRepos = new UserRepository(uow);
                await userRepos.CreateAsync(user);

                var repos2 = new ApplicationRepository(uow);
                var app    = new Application(user.AccountId, "DemoApp")
                {
                    ApplicationType = TypeOfApplication.DesktopApplication
                };
                await repos2.CreateAsync(app);

                var tm = new ApplicationTeamMember(app.Id, account.Id, "System")
                {
                    Roles    = new[] { ApplicationRole.Admin, ApplicationRole.Member },
                    UserName = account.UserName
                };
                await repos2.CreateAsync(tm);

                uow.SaveChanges();

                var claims = new List <Claim>
                {
                    new Claim(ClaimTypes.NameIdentifier, account.Id.ToString(), ClaimValueTypes.Integer32),
                    new Claim(ClaimTypes.Name, account.UserName, ClaimValueTypes.String),
                    new Claim(ClaimTypes.Email, account.Email, ClaimValueTypes.String),
                    new Claim(CoderrClaims.Application, app.Id.ToString(), ClaimValueTypes.Integer32),
                    new Claim(CoderrClaims.ApplicationAdmin, app.Id.ToString(), ClaimValueTypes.Integer32),
                    new Claim(ClaimTypes.Role, CoderrClaims.RoleSysAdmin, ClaimValueTypes.String)
                };
                var identity   = new ClaimsIdentity(claims, "Cookie", ClaimTypes.Name, ClaimTypes.Role);
                var properties = new AuthenticationProperties {
                    IsPersistent = false
                };
                HttpContext.GetOwinContext().Authentication.SignIn(properties, identity);

                return(Redirect(Url.GetNextWizardStep()));
            }
            catch (Exception ex)
            {
                ViewBag.Exception = ex;
                ModelState.AddModelError("", ex.Message);
                return(View(model));
            }
        }
Пример #27
0
 private void RemoveTransaction(AdoNetUnitOfWork obj)
 {
     _rwLock.EnterWriteLock();
     _uows.Remove(obj);
     _rwLock.ExitWriteLock();
 }
        public async Task <ActionResult> Admin(AccountViewModel model)
        {
            SetStateFlag();

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            try
            {
                var account = new Account(model.UserName, model.Password);
                account.Activate();
                var con   = SetupTools.DbTools.OpenConnection();
                var uow   = new AdoNetUnitOfWork(con);
                var repos = new AccountRepository(uow);
                if (await repos.IsUserNameTakenAsync(model.UserName))
                {
                    return(Redirect(Url.GetNextWizardStep()));
                }

                account.SetVerifiedEmail(model.EmailAddress);
                await repos.CreateAsync(account);

                var user = new User(account.Id, account.UserName)
                {
                    EmailAddress = account.Email
                };
                var userRepos = new UserRepository(uow);
                await userRepos.CreateAsync(user);

                var repos2 = new ApplicationRepository(uow);

                var app = new Application(user.AccountId, "DemoApp")
                {
                    ApplicationType = TypeOfApplication.DesktopApplication
                };
                await repos2.CreateAsync(app);

                /*insert into ApplicationMembers (AccountId, ApplicationId, EmailAddress, AddedAtUtc, AddedByName, Roles) SELECT 1, 1, (SELECT TOP 1 email FROM accounts), GetUtcDate(), 'admin', 'Admin,Member';
                 */
                var tm = new ApplicationTeamMember(app.Id, account.Email)
                {
                    AccountId   = account.Id,
                    AddedByName = "system",
                    Roles       = new[] { "Admin, Member" },
                    UserName    = account.UserName
                };
                await repos2.CreateAsync(tm);

                uow.SaveChanges();
                SessionUser.Current = new SessionUser(account.Id, model.UserName);
                return(Redirect(Url.GetNextWizardStep()));
            }
            catch (Exception ex)
            {
                ViewBag.Exception = ex;
                ModelState.AddModelError("", ex.Message);
                return(View(model));
            }
        }
Пример #29
0
 private void RemoveTransaction(AdoNetUnitOfWork obj)
 {
     _rwLock.EnterWriteLock();
     _uows.Remove(obj);
     _rwLock.ExitWriteLock();
 }