コード例 #1
0
 private void UpdateDatabase()
 {
     using (var ctx = new BonoboGitServerContext())
     {
         DoUpdate(ctx);
     }
 }
コード例 #2
0
        public AddGuidColumn(BonoboGitServerContext context)
        {
            AuthProvider = DependencyResolver.Current.GetService<IAuthenticationProvider>();

            _db = context.Database;

            if (UpgradeHasAlreadyBeenRun())
            {
                return;
            }

            using (var trans = context.Database.BeginTransaction())
            {
                try
                {
                    RenameTables();
                    CreateTables();
                    CopyData();
                    AddRelations();
                    DropRenamedTables();
                    trans.Commit();
                }
                catch (Exception)
                {
                    trans.Rollback();
                    throw;
                }
            }
        }
コード例 #3
0
        public bool CreateUser(string username, string password, string name, string surname, string email)
        {
            if (String.IsNullOrEmpty(username)) throw new ArgumentException("Value cannot be null or empty.", "userName");
            if (String.IsNullOrEmpty(password)) throw new ArgumentException("Value cannot be null or empty.", "password");
            if (String.IsNullOrEmpty(name)) throw new ArgumentException("Value cannot be null or empty.", "name");
            if (String.IsNullOrEmpty(surname)) throw new ArgumentException("Value cannot be null or empty.", "surname");
            if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");

            using (var database = new BonoboGitServerContext())
            {
                var user = new User
                {
                    Username = username,
                    Password = EncryptPassword(password),
                    Name = name,
                    Surname = surname,
                    Email = email,
                };
                database.Users.Add(user);
                try
                {
                    database.SaveChanges();
                }
                catch (UpdateException)
                {
                    return false;
                }
            }

            return true;
        }
コード例 #4
0
        public bool Create(TeamModel model)
        {
            if (model == null) throw new ArgumentException("team");
            if (model.Name == null) throw new ArgumentException("name");

            using (var database = new BonoboGitServerContext())
            {
                var team = new Team
                {
                    Name = model.Name,
                    Description = model.Description
                };
                database.Teams.Add(team);
                if (model.Members != null)
                {
                    AddMembers(model.Members, team, database);
                }
                try
                {
                    database.SaveChanges();
                }
                catch (UpdateException)
                {
                    return false;
                }
            }

            return true;
        }
コード例 #5
0
        public bool Create(RepositoryModel model)
        {
            if (model == null) throw new ArgumentException("model");
            if (model.Name == null) throw new ArgumentException("name");

            using (var database = new BonoboGitServerContext())
            {
                var repository = new Repository
                {
                    Name = model.Name,
                    Description = model.Description,
                    Anonymous = model.AnonymousAccess,
                };
                database.Repositories.Add(repository);
                AddMembers(model.Users, model.Administrators, model.Teams, repository, database);
                try
                {
                    database.SaveChanges();
                }
                catch (UpdateException)
                {
                    return false;
                }
            }

            return true;
        }
コード例 #6
0
        public void CodeAction(BonoboGitServerContext context)
        {
            _db = context.Database;

            if (UpgradeHasAlreadyBeenRun())
            {
                return;
            }

            using (var trans = context.Database.BeginTransaction())
            {
                try
                {
                    RenameTables();
                    CreateTables();
                    CopyData();
                    AddRelations();
                    DropRenamedTables();
                    trans.Commit();
                }
                catch (Exception)
                {
                    trans.Rollback();
                    throw;
                }
            }
        }
コード例 #7
0
        private void UpdateDatabase()
        {
            using (var ctx = new BonoboGitServerContext())
            {
                IObjectContextAdapter ctxAdapter = ctx;

                foreach (var item in UpdateScriptRepository.GetScriptsBySqlProviderName(ctx.Database.Connection.GetType().Name))
                {
                    if (!string.IsNullOrEmpty(item.Precondition))
                    {
                        try
                        {
                            var preConditionResult = ctxAdapter.ObjectContext.ExecuteStoreQuery<int>(item.Precondition).Single();
                            if (preConditionResult == 0)
                            {
                                continue;
                            }
                        }
                        catch(Exception)
                        {
                            // consider failures in pre-conditions as an indication that
                            // store ecommand should be executed
                        }
                    }
                    ctxAdapter.ObjectContext.ExecuteStoreCommand(item.Command);
                }
            }
        }
コード例 #8
0
 public bool AllowsAnonymous(string project)
 {
     using (var database = new BonoboGitServerContext())
     {
         var repo = database.Repositories.FirstOrDefault(i => i.Name == project);
         return (repo != null && repo.Anonymous);
     }
 }
コード例 #9
0
 public override void CreateRole(string roleName)
 {
     using (var database = new BonoboGitServerContext())
     {
         database.Roles.Add(new Role
         {
             Name = roleName,
         });
     }
 }
コード例 #10
0
 public IList<Models.RepositoryModel> GetAllRepositories()
 {
     using (var db = new BonoboGitServerContext())
     {
         var result = new List<RepositoryModel>();
         foreach (var item in db.Repositories)
         {
             result.Add(ConvertToModel(item));
         }
         return result;
     }
 }
コード例 #11
0
 public bool IsRepositoryAdministrator(string username, string project)
 {
     using (var database = new BonoboGitServerContext())
     {
         var user = database.Users.FirstOrDefault(i => i.Username == username);
         if (user != null)
         {
             if (user.Roles.FirstOrDefault(i => i.Name == Definitions.Roles.Administrator) != null
              || user.AdministratedRepositories.FirstOrDefault(i => i.Name == project) != null)
             {
                 return true;
             }
         }
     }
     return false;
 }
コード例 #12
0
        public void Delete(string name)
        {
            if (name == null) throw new ArgumentException("name");

            using (var db = new BonoboGitServerContext())
            {
                var team = db.Teams.FirstOrDefault(i => i.Name == name);
                if (team != null)
                {
                    team.Repositories.Clear();
                    team.Users.Clear();
                    db.Teams.Remove(team);
                    db.SaveChanges();
                }
            }
        }
コード例 #13
0
 public void DeleteUser(string username)
 {
     using (var database = new BonoboGitServerContext())
     {
         var user = database.Users.FirstOrDefault(i => i.Username == username);
         if (user != null)
         {
             user.AdministratedRepositories.Clear();
             user.Roles.Clear();
             user.Repositories.Clear();
             user.Teams.Clear();
             database.Users.Remove(user);
             database.SaveChanges();
         }
     }
 }
コード例 #14
0
        public void Delete(string name)
        {
            if (name == null) throw new ArgumentException("name");

            using (var db = new BonoboGitServerContext())
            {
                var repo = db.Repositories.FirstOrDefault(i => i.Name == name);
                if (repo != null)
                {
                    repo.Administrators.Clear();
                    repo.Users.Clear();
                    repo.Teams.Clear();
                    db.Repositories.Remove(repo);
                    db.SaveChanges();
                }
            }
        }
コード例 #15
0
 public override string[] FindUsersInRole(string roleName, string usernameToMatch)
 {
     var result = new HashSet<string>();
     using (var database = new BonoboGitServerContext())
     {
         var matchingRoles = database.Roles.Where(i => i.Name == roleName && i.Users.Where(user => user.Username.Contains(usernameToMatch)).Count() > 0);
         var usernames = matchingRoles.Select(i => i.Users.Select(u => u.Username));
         foreach (var roleUsernames in usernames)
         {
             foreach (var username in roleUsernames)
             {
                 result.Add(username);
             }
         }
     }
     return result.ToArray();
 }
コード例 #16
0
        private void DoUpdate(BonoboGitServerContext ctx)
        {
            IObjectContextAdapter ctxAdapter = ctx;
            var connectiontype = ctx.Database.Connection.GetType().Name;

            foreach (var item in UpdateScriptRepository.GetScriptsBySqlProviderName(connectiontype))
            {
                if (!string.IsNullOrEmpty(item.Precondition))
                {
                    try
                    {
                        var preConditionResult = ctxAdapter.ObjectContext.ExecuteStoreQuery<int>(item.Precondition).Single();
                        if (preConditionResult == 0)
                        {
                            continue;
                        }
                    }
                    catch (Exception)
                    {
                        // consider failures in pre-conditions as an indication that
                        // store ecommand should be executed
                    }
                }

                try
                {
                    ctxAdapter.ObjectContext.ExecuteStoreCommand(item.Command);
                }
                catch(Exception ex)
                {
                    Trace.TraceError("Exception while processing upgrade script {0}\r\n{1}", item.Command, ex);
                    throw;
                }
            }
            // the current pattern does not cut it anymore for adding the guid column

            if (connectiontype.Equals("SQLiteConnection"))
            {
                new Sqlite.AddGuidColumn(ctx);
            }
            else
            {
                new SqlServer.AddGuidColumn(ctx);
            }
        }
コード例 #17
0
        public override void AddUsersToRoles(string[] usernames, string[] roleNames)
        {
            using (var database = new BonoboGitServerContext())
            {
                var roles = database.Roles.Where(i => roleNames.Contains(i.Name));
                var users = database.Users.Where(i => usernames.Contains(i.Username));

                foreach (var role in roles)
                {
                    foreach (var user in users)
                    {
                        role.Users.Add(user);
                    }
                }

                database.SaveChanges();
            }
        }
コード例 #18
0
 public IList<UserModel> GetAllUsers()
 {
     using (var db = new BonoboGitServerContext())
     {
         var result = new List<UserModel>();
         foreach (var item in db.Users)
         {
             result.Add(new UserModel
             {
                 Username = item.Username,
                 Name = item.Name,
                 Surname = item.Surname,
                 Email = item.Email,
                 Roles = item.Roles.Select(i => i.Name).ToArray(),
             });
         }
         return result;
     }
 }
コード例 #19
0
 public bool HasPermission(string username, string project)
 {
     using (var database = new BonoboGitServerContext())
     {
         var user = database.Users.FirstOrDefault(i => i.Username == username);
         var repository = database.Repositories.FirstOrDefault(i => i.Name == project);
         if (user != null && project != null)
         {
             if (user.Roles.FirstOrDefault(i => i.Name == Definitions.Roles.Administrator) != null
              || user.Repositories.FirstOrDefault(i => i.Name == project) != null
              || user.AdministratedRepositories.FirstOrDefault(i => i.Name == project) != null
              || user.Teams.Select(i => i.Name).FirstOrDefault(t => repository.Teams.Select(i => i.Name).Contains(t)) != null)
             {
                 return true;
             }
         }
     }
     return false;
 }
コード例 #20
0
        public IList<TeamModel> GetAllTeams()
        {
            using (var db = new BonoboGitServerContext())
            {
                var result = new List<TeamModel>();
                foreach (var item in db.Teams)
                {
                    result.Add(new TeamModel
                    {
                        Name = item.Name,
                        Description = item.Description,
                        Members = item.Users.Select(i => i.Username).ToArray(),
                        Repositories = item.Repositories.Select(m => m.Name).ToArray(),
                    });
                }

                return result;
            }
        }
コード例 #21
0
        private void UpdateDatabase()
        {
            using (var ctx = new BonoboGitServerContext())
            {
                IObjectContextAdapter ctxAdapter = ctx;

                foreach (var item in UpdateScriptRepository.GetScriptsBySqlProviderName(ctx.Database.Connection.GetType().Name))
                {
                    if (!string.IsNullOrEmpty(item.Precondition))
                    {
                        var preConditionResult = ctxAdapter.ObjectContext.ExecuteStoreQuery<int>(item.Precondition).Single();
                        if (preConditionResult == 0)
                        {
                            continue;
                        }
                    }
                    ctxAdapter.ObjectContext.ExecuteStoreCommand(item.Command);
                }
            }
        }
コード例 #22
0
        private void DoUpdate(BonoboGitServerContext ctx)
        {
            IObjectContextAdapter ctxAdapter = ctx;
            var connectiontype = ctx.Database.Connection.GetType().Name;

            foreach (var item in UpdateScriptRepository.GetScriptsBySqlProviderName(connectiontype))
            {
                if (!string.IsNullOrEmpty(item.Precondition))
                {
                    try
                    {
                        var preConditionResult = ctxAdapter.ObjectContext.ExecuteStoreQuery<int>(item.Precondition).Single();
                        if (preConditionResult == 0)
                        {
                            continue;
                        }
                    }
                    catch (Exception)
                    {
                        // consider failures in pre-conditions as an indication that
                        // store ecommand should be executed
                    }
                }

                if (!string.IsNullOrEmpty(item.Command))
                {
                    try
                    {
                        ctxAdapter.ObjectContext.ExecuteStoreCommand(item.Command);
                    }
                    catch (Exception ex)
                    {
                        Trace.TraceError("Exception while processing upgrade script {0}\r\n{1}", item.Command, ex);
                        throw;
                    }
                }

                item.CodeAction(ctx);
            }
        }
コード例 #23
0
        public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
        {
            using (var database = new BonoboGitServerContext())
            {
                var role = database.Roles.FirstOrDefault(i => i.Name == roleName);
                if (role != null)
                {
                    if (throwOnPopulatedRole)
                    {
                        if (role.Users.Count > 0)
                        {
                            throw new InvalidOperationException("Can't delete role with members.");
                        }
                    }

                    database.Roles.Remove(role);
                    database.SaveChanges();
                    return true;
                }

                return false;
            }
        }
コード例 #24
0
        private void UpdateDatabase()
        {
            using (var ctx = new BonoboGitServerContext())
            using (var connection = ctx.Database.Connection)
            using (var command = connection.CreateCommand())
            {
                connection.Open();

                foreach (var item in new UpdateScriptRepository().Scripts)
                {
                    if (!String.IsNullOrEmpty(item.Precondition))
                    {
                        command.CommandText = item.Precondition;
                        if (Convert.ToInt32(command.ExecuteScalar()) == 0)
                        {
                            continue;
                        }
                    }

                    command.CommandText = item.Command;
                    command.ExecuteNonQuery();
                }
            }
        }
コード例 #25
0
 public void RunWithContext(BonoboGitServerContext context, IAuthenticationProvider authenticationProvider)
 {
     DoUpdate(context, authenticationProvider);
 }
コード例 #26
0
 public void RunWithContext(BonoboGitServerContext context)
 {
     DoUpdate(context);
 }
コード例 #27
0
 public void RunWithContext(BonoboGitServerContext context)
 {
     DoUpdate(context);
 }
コード例 #28
0
 public override string[] GetAllRoles()
 {
     using (var database = new BonoboGitServerContext())
     {
         return database.Roles.Select(i => i.Name).ToArray();
     }
 }
コード例 #29
0
 public BonoboGitServerContext GetContext()
 {
     return(BonoboGitServerContext.FromDatabase(_connection));
 }
コード例 #30
0
 public void CodeAction(BonoboGitServerContext context)
 {
 }
コード例 #31
0
 public override bool RoleExists(string roleName)
 {
     using (var database = new BonoboGitServerContext())
     {
         return database.Roles.FirstOrDefault(i => i.Name == roleName) != null;
     }
 }
コード例 #32
0
 public override bool IsUserInRole(string username, string roleName)
 {
     using (var database = new BonoboGitServerContext())
     {
         var role = database.Roles.FirstOrDefault(i => i.Name == roleName);
         return (role != null) ? role.Users.Where(i => i.Username == username).Count() > 0 : false;
     }
 }
コード例 #33
0
 public override string[] GetUsersInRole(string roleName)
 {
     using (var database = new BonoboGitServerContext())
     {
         var role = database.Roles.FirstOrDefault(i => i.Name == roleName);
         return (role != null) ? role.Users.Select(i => i.Username).ToArray() : null;
     }
 }
コード例 #34
0
 public override string[] GetRolesForUser(string username)
 {
     using (var database = new BonoboGitServerContext())
     {
         var user = database.Users.FirstOrDefault(i => i.Username == username);
         return (user != null) ? user.Roles.Select(i => i.Name).ToArray() : null;
     }
 }