コード例 #1
0
        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));
        }
コード例 #2
0
ファイル: DatabaseService.cs プロジェクト: jlbepsi/WSDatabase
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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));
        }
コード例 #5
0
ファイル: DatabaseService.cs プロジェクト: jlbepsi/WSDatabase
        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);
        }
コード例 #6
0
ファイル: DatabaseService.cs プロジェクト: jlbepsi/WSDatabase
        public DatabaseGroupUser RemoveContributor(string sqlLogin, int databaseId)
        {
            DatabaseGroupUser databaseGroupUser = GetDatabaseGroupUserWithSqlLogin(sqlLogin, databaseId);

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

            if (InternalRemoveContributor(databaseGroupUser))
            {
                return(databaseGroupUser);
            }

            return(null);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        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));
        }
コード例 #10
0
ファイル: DatabaseService.cs プロジェクト: jlbepsi/WSDatabase
        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);
        }
コード例 #11
0
ファイル: DatabaseService.cs プロジェクト: jlbepsi/WSDatabase
        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)
             * });*/
        }