public ActionResult <DatabaseGroupUser> Post(GroupUserModel groupUserModel) { // Vérification de l'appelant if (!this.SecurityCheckRoleAdminOrUser()) { return(Forbid()); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } // L'appelant doit être un administrateur de la base de données if (!_service.IsAdministrateur(GetJWTIdentity().Name, groupUserModel.DbId)) { return(Forbid()); } DatabaseGroupUser databaseGroupUser = _service.AddContributor(GetJWTIdentity().Name, groupUserModel); if (databaseGroupUser == null) { return(Conflict()); } // L'utilisateur a tous les droits databaseGroupUser.CanBeDeleted = databaseGroupUser.CanBeUpdated = true; //return CreatedAtRoute("DefaultApi", new { id = databaseGroupUser. }, databaseGroupUser); return(Ok(databaseGroupUser)); }
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 = this.db.DatabaseServerNames.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 IActionResult Delete(String id, GroupUserModel groupUserModel) { string userLogin = GetJWTIdentity().Name; // Vérification de l'appelant if (!this.SecurityCheckRoleAdminOrUser()) { return(Forbid()); } DatabaseGroupUser databaseGroupUser = _service.GetDatabaseGroupUserWithSqlLogin(id, groupUserModel.DbId); if (databaseGroupUser == null) { return(NotFound()); } // L'utilisateur doit être un administrateur de la base de données if (!_service.IsAdministrateur(userLogin, groupUserModel.DbId)) { return(Forbid()); } databaseGroupUser = _service.RemoveContributor(id, groupUserModel.DbId); return(Ok(databaseGroupUser)); }
public IHttpActionResult Delete(String id, GroupUserModel groupUserModel) { string userLogin = this.GetJWTIdentity().Name; // Vérification de l'appelant IHttpActionResult result = this.SecurityCheckRoleAdminOrOwner(userLogin); if (result != null) { return(result); } DatabaseGroupUser databaseGroupUser = service.GetDatabaseGroupUserWithSqlLogin(id, groupUserModel.DbId); if (databaseGroupUser == null) { return(NotFound()); } // L'utilisateur doit être un administrateur de la base de données if (!service.IsAdministrateur(userLogin, groupUserModel.DbId)) { return(ResponseMessage(new System.Net.Http.HttpResponseMessage(HttpStatusCode.Forbidden) { ReasonPhrase = "Vous n'êtes pas administrateur de la base de données" })); } databaseGroupUser = service.RemoveContributor(id, groupUserModel.DbId); return(Ok(databaseGroupUser)); }
public bool IsAdministrateur(string userLogin, int id) { try { DatabaseGroupUser databaseGroupUser = GetDatabaseGroupUser(userLogin, id); if (databaseGroupUser != null) { return(databaseGroupUser.GroupType == DatabaseValues.ADMINISTRATEUR); } } catch (Exception) { } return(false); }
public DatabaseGroupUser RemoveContributor(string sqlLogin, int databaseId) { DatabaseGroupUser databaseGroupUser = GetDatabaseGroupUserWithSqlLogin(sqlLogin, databaseId); if (databaseGroupUser == null) { return(null); } if (InternalRemoveContributor(databaseGroupUser)) { return(databaseGroupUser); } return(null); }
public void TestAddContributor() { GroupUserModel groupUserModel = new GroupUserModel { DbId = 11, SqlLogin = "******", Password = "******", GroupType = 2 }; DatabaseGroupUser databaseGroupUser = service.AddContributor("test.v8", groupUserModel); Assert.IsNotNull(databaseGroupUser); Assert.IsNotNull(databaseGroupUser.SqlLogin); Assert.IsTrue(databaseGroupUser.AddedByUserLogin.Equals("test.v8")); Assert.IsNull(databaseGroupUser.UserLogin); Assert.IsTrue(databaseGroupUser.GroupType == groupUserModel.GroupType); }
private bool InternalRemoveContributor(DatabaseGroupUser databaseGroupUser) { string serverName = "Serveur non trouvé"; try { // Obtention du serveur DatabaseServerName databaseServerName = db.DatabaseServerName.Find(databaseGroupUser.Db.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); } // et suppression de la base de données sur le serveur de BD management.RemoveContributorFromDatabase(databaseGroupUser.Db.NomBd, databaseGroupUser.SqlLogin); } catch (Exception ex) { LogManager.GetLogger().Error(ex); throw new DatabaseException(string.Format("Erreur dans la suppression du contributeur '{0}' de la base de données' {1}' sur le serveur '{2}'", databaseGroupUser.SqlLogin, databaseGroupUser.Db.NomBd, serverName), ex); } // Suppression du contributeur db.DatabaseGroupUser.Remove(databaseGroupUser); try { db.SaveChanges(); } catch (DbUpdateConcurrencyException ex) { LogManager.GetLogger().Error(ex); throw new Exception(string.Format("Erreur dans la suppression du contributeur '{0}' de la base de données '{0}' dans le référentiel", databaseGroupUser.SqlLogin, databaseGroupUser.Db.NomBd)); } return(true); }
public IHttpActionResult Post(GroupUserModel groupUserModel) { // Vérification de l'appelant IHttpActionResult result = this.SecurityCheckRoleAdminOrUser(); if (result != null) { return(result); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } // L'appelant doit être un administrateur de la base de données if (!service.IsAdministrateur(this.GetJWTIdentity().Name, groupUserModel.DbId)) { return(ResponseMessage(new System.Net.Http.HttpResponseMessage(HttpStatusCode.Forbidden) { ReasonPhrase = "Vous n'êtes pas administrateur de la base de données" })); } DatabaseGroupUser databaseGroupUser = service.AddContributor(this.GetJWTIdentity().Name, groupUserModel); if (databaseGroupUser == null) { return(Conflict()); } //return CreatedAtRoute("DefaultApi", new { id = databaseGroupUser. }, databaseGroupUser); // L'utilisateur a tous les droits databaseGroupUser.CanBeDeleted = databaseGroupUser.CanBeUpdated = true; return(Ok(databaseGroupUser)); }
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 = this.db.DatabaseServerNames.Find(database.ServerId); if (databaseServerName == null) { return(null); } // 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}'", database.ToString(), serverName), ex); } // 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.DatabaseDBs.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.DatabaseGroupUsers.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 = this.db.DatabaseServerNames.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.DatabaseGroupUsers.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.DatabaseServerName.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) * });*/ }