예제 #1
0
        public bool UpdateContributor(GroupUserModel groupUserModel)
        {
            DatabaseGroupUser databaseGroupUser = GetDatabaseGroupUserWithSqlLogin(groupUserModel.SqlLogin, groupUserModel.DbId);

            if (databaseGroupUser == null)
            {
                return(false);
            }

            // Modification du mot de passe sur le serveur
            string serverName = null;

            try
            {
                // Obtention de la base de données
                DatabaseDb databaseDB = GetDatabase(groupUserModel.DbId);
                if (databaseDB == null)
                {
                    return(false);
                }

                // Obtention du serveur
                DatabaseServerName databaseServerName = db.DatabaseServerName.Find(databaseDB.ServerId);
                if (databaseServerName == null)
                {
                    return(false);
                }
                serverName = databaseServerName.Name;

                // Obtention du serveur réel : MySQL, SQL Server, ... avec son adresse IP
                DatabaseManagement management = DatabaseManagement.CreateDatabaseManagement(databaseServerName.Code, databaseServerName.Iplocale, databaseServerName.PortLocal);
                if (management == null)
                {
                    return(false);
                }

                management.UpdateContributor(databaseDB.NomBd, groupUserModel.SqlLogin, groupUserModel.GroupType, groupUserModel.Password);
            }
            catch (Exception ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(string.Format("Erreur dans l'ajout du contributeur {0} sur le serveur '{1}'", groupUserModel.ToString(), serverName), ex);
            }

            try
            {
                // Maj du type
                databaseGroupUser.GroupType = groupUserModel.GroupType;
                // Modification du contributeur dans le groupe
                db.Entry(databaseGroupUser).State = EntityState.Modified;
                this.db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(string.Format("Erreur dans la modification du contributeur {0} dans le référentiel", groupUserModel.ToString()), ex);
            }

            return(true);
        }
예제 #2
0
        public bool UpdateDatabase(int id, DatabaseModel database)
        {
            DatabaseDb databaseDB = GetDatabase(database.Id);

            if (databaseDB == null)
            {
                return(false);
            }

            // Modification des données
            databaseDB.Commentaire = database.Commentaire;

            db.Entry(databaseDB).State = EntityState.Modified;
            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new Exception(string.Format("Erreur dans la modification de la base de données '{0}' dans le référentiel", database.ToString()));
            }

            return(true);
        }
예제 #3
0
        private bool InternalRemoveDatabase(DatabaseDb database)
        {
            string serverName = "Serveur non trouvé";

            try
            {
                // Obtention du serveur
                DatabaseServerName databaseServerName = db.DatabaseServerName.Find(database.ServerId);
                if (databaseServerName == null)
                {
                    return(false);
                }

                // Obtention du serveur réel : MySQL, SQL Server, ... avec son adresse IP
                DatabaseManagement management = DatabaseManagement.CreateDatabaseManagement(databaseServerName.Code, databaseServerName.Iplocale, databaseServerName.PortLocal);
                if (management == null)
                {
                    return(false);
                }

                // et suppression de la base de données sur le serveur de BD
                management.RemoveDatabase(database.NomBd);
            }
            catch (Exception ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(string.Format("Erreur dans la suppression de la base de données {0} sur le serveur '{1}'", database.ToString(), serverName), ex);
            }

            // Suppression des contributeurs associés
            db.DatabaseGroupUser.RemoveRange(database.Users);
            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new Exception(string.Format("Erreur dans la suppression des contributeurs de la base de données '{0}' dans le référentiel", database.ToString()));
            }

            // Suppression de la base de données
            db.DatabaseDb.Remove(database);
            try
            {
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new Exception(string.Format("Erreur dans la suppression de la base de données '{0}' dans le référentiel", database.ToString()));
            }

            return(true);
        }
예제 #4
0
        public ActionResult <DatabaseDb> GetDatabase(int id)
        {
            DatabaseDb databaseDb = _service.GetDatabase(id);

            if (databaseDb == null)
            {
                return(NotFound());
            }

            FillPermissions(databaseDb);
            return(Ok(databaseDb));
        }
예제 #5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="databaseDb"></param>
 /// <param name="jwtAuthenticationIdentity"></param>
 private void FillPermissions(DatabaseDb databaseDb, JWTAuthenticationIdentity jwtAuthenticationIdentity)
 {
     if (jwtAuthenticationIdentity == null || string.IsNullOrEmpty(jwtAuthenticationIdentity.Name))
     {
         databaseDb.CanBeDeleted = databaseDb.CanBeUpdated = databaseDb.CanAddGroupUser = false;
         if (databaseDb.Users != null)
         {
             foreach (DatabaseGroupUser user in databaseDb.Users)
             {
                 user.CanBeUpdated = user.CanBeDeleted = false;
             }
         }
     }
     else
     {
         // Si l'utilisateur est administrateur il peut faire toutes les opérations
         int groupType = DatabaseGroupUserPermissions.GetGroupType(databaseDb.Users, jwtAuthenticationIdentity.Name);
         if (groupType == DatabaseGroupUserPermissions.ADMINISTRATEUR)
         {
             databaseDb.CanBeDeleted = databaseDb.CanBeUpdated = databaseDb.CanAddGroupUser = true;
             if (databaseDb.Users != null)
             {
                 foreach (DatabaseGroupUser user in databaseDb.Users)
                 {
                     user.CanBeUpdated = user.CanBeDeleted = true;
                 }
             }
         }
         else
         {
             databaseDb.CanBeDeleted = databaseDb.CanBeUpdated = databaseDb.CanAddGroupUser = false;
             if (databaseDb.Users != null)
             {
                 foreach (DatabaseGroupUser user in databaseDb.Users)
                 {
                     // Si l'utilisateur connecté est l'utilisateur alors il peut faire les actions
                     if (!String.IsNullOrWhiteSpace(user.UserLogin) && user.UserLogin.Equals(jwtAuthenticationIdentity.Name, StringComparison.InvariantCultureIgnoreCase))
                     {
                         user.CanBeUpdated = user.CanBeDeleted = true;
                     }
                     else
                     {
                         user.CanBeUpdated = user.CanBeDeleted = false;
                     }
                 }
             }
         }
     }
 }
예제 #6
0
        /*public bool RemoveDatabase(DatabaseDb database)
         * {
         *  if (database == null)
         *  {
         *      return false;
         *  }
         *  // L'objet passé en paramètre est de source inconnue, donc on recharge la base de données
         *  DatabaseDb databaseDB = GetDatabase(database.Id);
         *  if (databaseDB == null)
         *      return false;
         *
         *  return InternalRemoveDatabase(databaseDB);
         * }*/

        public DatabaseDb RemoveDatabase(int id)
        {
            DatabaseDb databaseDB = GetDatabase(id);

            if (databaseDB == null)
            {
                return(null);
            }

            if (InternalRemoveDatabase(databaseDB))
            {
                return(databaseDB);
            }

            return(null);
        }
예제 #7
0
        public DatabaseDb GetDatabase(int serverId, string nomBD)
        {
            try
            {
                /*DatabaseDb databaseDb = db.DatabaseDb.Include(sn => sn.Server).Include(u => u.Users)
                 *  .SingleOrDefault(db => db.ServerId == serverId && db.NomBd.Equals(nomBD, StringComparison.InvariantCultureIgnoreCase));*/

                var        list       = db.DatabaseDb.Include(sn => sn.Server).Include(u => u.Users).AsEnumerable();
                DatabaseDb databaseDb = list.SingleOrDefault(db => db.ServerId == serverId && db.NomBd.Equals(nomBD, StringComparison.InvariantCultureIgnoreCase));
                return(databaseDb);
            }
            catch (Exception)
            {
            }

            return(null);
        }
예제 #8
0
        public IActionResult DeleteDatabaseDb(int id)
        {
            // Vérification de l'appelant
            if (!this.SecurityCheckRoleAdminOrUser())
            {
                return(Forbid());
            }

            // L'appelant doit être un administrateur de la base de données
            if (!_service.IsAdministrateur(this.GetJWTIdentity().Name, id))
            {
                return(Forbid());
            }

            DatabaseDb databaseDb = _service.RemoveDatabase(id);

            if (databaseDb == null)
            {
                return(NotFound());
            }

            return(Ok(databaseDb));
        }
예제 #9
0
        public ActionResult <DatabaseDb> PostDatabaseDb(DatabaseModel database)
        {
            // Vérification de l'appelant
            if (!this.SecurityCheckRoleAdminOrOwner(database.UserLogin))
            {
                return(Forbid());
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            DatabaseDb databaseDb = _service.AddDatabase(database);

            if (databaseDb == null)
            {
                return(Conflict());
            }

            FillPermissions(databaseDb);
            return(CreatedAtAction(nameof(GetDatabase), new { id = databaseDb.Id }, databaseDb));
        }
예제 #10
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="databaseDb"></param>
 private void FillPermissions(DatabaseDb databaseDb)
 {
     FillPermissions(databaseDb, GetJWTIdentity());
 }
예제 #11
0
        public DatabaseDb AddDatabase(DatabaseModel database)
        {
            // Vérification du nom
            if (!RegularExpression.IsCorrectFileName(database.NomBD))
            {
                throw new DatabaseException("Le nom ne doit pas comporter des caractères spéciaux.");
            }

            // Le nom de la base de données doit être unique sur un serveur donné
            if (GetDatabase(database.ServerId, database.NomBD) != null)
            {
                throw new DatabaseException("Le nom de la base de données existe déjà.");
            }

            string             serverName         = "Serveur non trouvé";
            DatabaseServerUser databaseServerUser = null;

            try
            {
                // Obtention du serveur
                DatabaseServerName databaseServerName = db.DatabaseServerName.Find(database.ServerId);
                if (databaseServerName == null)
                {
                    return(null);
                }
                serverName = databaseServerName.Name;

                // Obtention du compte utilisateur du serveur
                ServerAccountService serverAccountService = new ServerAccountService(this.ServiceEpsiContext);
                databaseServerUser = serverAccountService.GetAccountByServerLogin(database.ServerId, database.UserLogin);
                if (databaseServerUser == null)
                {
                    return(null);
                }

                // Obtention du serveur réel : MySQL, SQL Server, ... avec son adresse IP
                DatabaseManagement management = DatabaseManagement.CreateDatabaseManagement(databaseServerName.Code, databaseServerName.Iplocale, databaseServerName.PortLocal);
                if (management == null)
                {
                    return(null);
                }

                // et céation de la base de données sur le serveur de BD
                management.CreateDatabase(database.NomBD, databaseServerUser.SqlLogin);
            }
            catch (Exception ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(string.Format("Erreur dans l'ajout de la base de données {0} sur le serveur '{1}', Erreur: {2}", database.ToString(), serverName, ex.Message));
            }

            // Ajout de la base de données dans le référentiel
            DatabaseDb databaseDB = new DatabaseDb
            {
                ServerId     = database.ServerId,
                NomBd        = database.NomBD,
                DateCreation = DateTime.Now,
                Commentaire  = database.Commentaire
            };

            db.DatabaseDb.Add(databaseDB);

            try
            {
                db.SaveChanges();

                // puis du créateur comme contributeur avec tous les droits
                DatabaseGroupUser databaseGroupUser = new DatabaseGroupUser
                {
                    DbId             = databaseDB.Id,
                    UserLogin        = databaseServerUser.UserLogin,
                    UserFullName     = database.UserFullName,
                    SqlLogin         = databaseServerUser.SqlLogin,
                    GroupType        = DatabaseValues.ADMINISTRATEUR,
                    AddedByUserLogin = databaseServerUser.UserLogin
                };
                db.DatabaseGroupUser.Add(databaseGroupUser);
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                if (!Exists(databaseDB.ServerId))
                {
                    return(null);
                }
                else
                {
                    LogManager.GetLogger().Error(ex);
                    throw new DatabaseException(string.Format("Erreur dans l'ajout de la base de données dans le référentiel", database.ToString()), ex);
                }
            }

            // Enregistrement dans les logs
            WriteLogs("BDD Création - " + string.Format("L'utilisateur '<b>{0}</b>' a créé la bdd '{1}' de type '{2}'", database.UserLogin, database.NomBD, database.ServerId));
            return(databaseDB);
        }
예제 #12
0
        public DatabaseGroupUser AddContributor(string userLogin, GroupUserModel groupUserModel)
        {
            string serverName = null;

            try
            {
                // Obtention de la base de données
                DatabaseDb databaseDB = GetDatabase(groupUserModel.DbId);
                if (databaseDB == null)
                {
                    return(null);
                }

                // Obtention du serveur
                DatabaseServerName databaseServerName = db.DatabaseServerName.Find(databaseDB.ServerId);
                if (databaseServerName == null)
                {
                    return(null);
                }
                serverName = databaseServerName.Name;

                // Obtention du serveur réel : MySQL, SQL Server, ... avec son adresse IP
                DatabaseManagement management = DatabaseManagement.CreateDatabaseManagement(databaseServerName.Code, databaseServerName.Iplocale, databaseServerName.PortLocal);
                if (management == null)
                {
                    return(null);
                }

                management.AddContributor(databaseDB.NomBd, groupUserModel.SqlLogin, groupUserModel.GroupType, groupUserModel.Password);
            }
            catch (Exception ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(string.Format("Erreur dans l'ajout du contributeur {0} sur le serveur '{1}'", groupUserModel.ToString(), serverName), ex);
            }

            DatabaseGroupUser contributor = new DatabaseGroupUser
            {
                DbId             = groupUserModel.DbId,
                SqlLogin         = groupUserModel.SqlLogin,
                AddedByUserLogin = userLogin,
                GroupType        = groupUserModel.GroupType,
                UserLogin        = groupUserModel.UserLogin,
                UserFullName     = groupUserModel.UserFullName
            };

            try
            {
                // Ajout du contributeur dans le groupe
                this.db.DatabaseGroupUser.Add(contributor);
                this.db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(string.Format("Erreur dans l'ajout du contributeur {0} dans le référentiel", groupUserModel.ToString()), ex);
            }

            // Envoi du mail

            /*
             * if (userLoginSQL != null)
             *  contributor.UserLoginSQL = userLoginSQL;
             *
             *
             *  if (userEpsi != null)
             *  {
             *      contributor.UserEpsiFullName = userEpsi.Nom + " " + userEpsi.Prenom;
             *
             *      // Envoi du mail
             *      if (!string.IsNullOrWhiteSpace(userEpsi.Mail))
             *      {
             *          StringBuilder body = new StringBuilder();
             *          body.AppendFormat("Bonjour, </b><br /><br />Vous avez été ajouté comme contributeur dans la base de données '{0}' par l'utilisateur '{1}'", infos.Name, infos.Createur);
             *          if (accountAdded)
             *          {
             *              body.AppendFormat("<br /><br />Un compte a été créé sur le serveur '{0}' avec un mot de passe aléatoire.<br />", infos.Server.Name);
             *              body.Append("Vous devez vous connecter à <a href='https://ingenium.montpellier.epsi.fr/'>Ingénium</a> pour modifier le mot de passe de ce compte.");
             *          }
             *          body.Append("Connectez-vous à <a href='https://ingenium.montpellier.epsi.fr/'>Ingénium</a> pour voir vos base de données.");
             *          body.Append(@"</b><br /><br />L'administrateur réseau<br />EPSI Montpellier");
             *
             *          SendMail(userEpsi.Mail, "EPSI - Base de données - Ajout de contributeur", body.ToString());
             *      }
             *  }
             * }*/

            return(contributor);

            /*
             * {
             *  Message = message,
             *  Status = status,
             *  UserEpsiFullName = contributor.UserEpsiFullName,
             *  UserId = userId,
             *  LoginSQL = contributor.UserLoginSQL,
             *  GroupType = groupType,
             *  GroupTypeDescription = DatabaseService.GetGroupDescription(groupType)
             * });*/
        }