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); }
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); }
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); }
public ActionResult <DatabaseDb> GetDatabase(int id) { DatabaseDb databaseDb = _service.GetDatabase(id); if (databaseDb == null) { return(NotFound()); } FillPermissions(databaseDb); return(Ok(databaseDb)); }
/// <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; } } } } } }
/*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); }
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); }
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)); }
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)); }
/// <summary> /// /// </summary> /// <param name="databaseDb"></param> private void FillPermissions(DatabaseDb databaseDb) { FillPermissions(databaseDb, GetJWTIdentity()); }
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); }
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) * });*/ }