예제 #1
0
        public IActionResult DeleteAccounts(int id, ServerAccountModel serverAccount)
        {
            // Vérification de l'appelant
            if (!this.SecurityCheckRoleAdminOrOwner(serverAccount.UserLogin))
            {
                return(Forbid());
            }

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

            if (id < 0 || string.IsNullOrWhiteSpace(serverAccount.UserLogin))
            {
                return(BadRequest());
            }

            if (id != serverAccount.ServerId)
            {
                return(BadRequest());
            }
            DatabaseServerUser databaseServerUser = _service.RemoveAccount(id, serverAccount.UserLogin);

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

            return(Ok(databaseServerUser));
        }
예제 #2
0
        public IHttpActionResult Put(int id, ServerAccountModel serverAccount)
        {
            // Vérification de l'appelant
            IHttpActionResult result = this.SecurityCheckRoleAdminOrOwner(serverAccount.UserLogin);

            if (result != null)
            {
                return(result);
            }

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

            if (id != serverAccount.ServerId)
            {
                return(BadRequest());
            }

            if (service.UpdateAccount(serverAccount))
            {
                return(StatusCode(HttpStatusCode.NoContent));
            }

            return(StatusCode(HttpStatusCode.NotFound));
        }
예제 #3
0
        public void TestUpdateAccount()
        {
            ServerAccountModel serverAccount = new ServerAccountModel()
            {
                ServerId  = 0,
                UserLogin = "******",
                Password  = "******"
            };

            Assert.IsTrue(service.UpdateAccount(serverAccount));
        }
예제 #4
0
        public void TestAddAccount()
        {
            DateTime           dateDuJour    = DateTime.Now;
            string             login         = string.Format("Test-{0}{1}{2}.{3}{4}", dateDuJour.Year, dateDuJour.Month, dateDuJour.Day, dateDuJour.Second, dateDuJour.Millisecond);
            ServerAccountModel serverAccount = new ServerAccountModel()
            {
                ServerId  = 0,
                UserLogin = login,
                Password  = "******"
            };

            DatabaseServerUser databaseServerUser = service.AddAccount(serverAccount);

            Assert.IsNotNull(databaseServerUser);
            Assert.IsFalse(string.IsNullOrWhiteSpace(databaseServerUser.SqlLogin));
        }
        public DatabaseServerUser AddAccount(ServerAccountModel serverAccount)
        {
            DatabaseServerUser databaseServerUser = new DatabaseServerUser
            {
                ServerId  = serverAccount.ServerId,
                UserLogin = serverAccount.UserLogin
            };

            string serverName = "Serveur non trouvé";

            try
            {
                // Obtention du serveur
                DatabaseServerName databaseServerName = this.db.DatabaseServerName.Find(serverAccount.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);
                // Création du login SQL
                databaseServerUser.SqlLogin = management.MakeSqlLogin(serverAccount.UserLogin);
                // Ajout du login SQL sur le serveur
                management.AddOrUpdateUser(databaseServerUser.SqlLogin, serverAccount.Password);
            }
            catch (Exception ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(string.Format("Erreur dans l'ajout du compte utilisateur {0} sur le serveur '{1}', Erreur: {2}", serverAccount.ToString(), serverName, ex.Message));
            }

            // Ajout de l'utilisateur pour cette BD
            try
            {
                db.DatabaseServerUser.Add(databaseServerUser);
                db.SaveChanges();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(string.Format("Erreur dans l'ajout du compte utilisateur {0} dans le référentiel", serverAccount.ToString()), ex);
            }

            return(databaseServerUser);
        }
예제 #6
0
        public static void InitialisationTests(TestContext context)
        {
            service = new ServerAccountService();

            // Ajout d'un compte pour les tests
            // Cela constitue aussi un test !
            ServerAccountModel serverAccount = new ServerAccountModel()
            {
                ServerId  = 0,
                UserLogin = "******",
                Password  = "******"
            };

            DatabaseServerUser databaseServerUser = service.AddAccount(serverAccount);

            Assert.IsNotNull(databaseServerUser);
        }
        public bool UpdateAccount(ServerAccountModel serverAccount)
        {
            DatabaseServerUser databaseServerUser = null;
            DatabaseServerName databaseServerName = null;
            string             serverName         = "Serveur non trouvé";

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

                // Obtention du login SQL de l'utilisateur
                var databaseServerUsers = db.DatabaseServerUser.Include(su => su.Server).AsEnumerable();
                databaseServerUser = databaseServerUsers.SingleOrDefault(su => su.ServerId == serverAccount.ServerId && su.UserLogin.Equals(serverAccount.UserLogin, StringComparison.InvariantCultureIgnoreCase));
                if (databaseServerUser == null)
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(String.Format("Erreur dans l'obtention du compte utilisateur {0} dans le référentiel, Erreur: {1}", serverAccount.ToString(), ex.Message));
            }

            try
            {
                // Obtention du serveur réel : MySQL, SQL Server, ... avec son adresse IP
                DatabaseManagement management = DatabaseManagement.CreateDatabaseManagement(databaseServerName.Code, databaseServerName.Iplocale, databaseServerName.PortLocal);
                // Modification du mot de passe du login SQL sur le serveur
                management.AddOrUpdateUser(databaseServerUser.SqlLogin, serverAccount.Password);
            }
            catch (Exception ex)
            {
                LogManager.GetLogger().Error(ex);
                throw new DatabaseException(String.Format("Erreur dans la modification du compte utilisateur {0} sur le serveur '{1}', Erreur: {2}", serverAccount.ToString(), serverName, ex.Message));
            }

            return(true);
        }
예제 #8
0
        public IActionResult Put(int id, ServerAccountModel serverAccount)
        {
            // Vérification de l'appelant
            if (!this.SecurityCheckRoleAdminOrOwner(serverAccount.UserLogin))
            {
                return(Forbid());
            }

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

            if (id != serverAccount.ServerId)
            {
                return(BadRequest());
            }

            return(_service.UpdateAccount(serverAccount) ?
                   StatusCode(StatusCodes.Status204NoContent) :
                   NotFound());
        }
예제 #9
0
        public ActionResult <DatabaseServerUser> PostAccounts(ServerAccountModel serverAccount)
        {
            // Vérification de l'appelant
            if (!this.SecurityCheckRoleAdminOrOwner(serverAccount.UserLogin))
            {
                return(Forbid());
            }

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

            DatabaseServerUser databaseServerUser = _service.AddAccount(serverAccount);

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

            return(Ok(databaseServerUser));
            //return CreatedAtAction(nameof(GetAccountsByServerId ), new { id = databaseServerUser.ServerId }, databaseServerUser);
        }
예제 #10
0
        public IHttpActionResult PostAccounts(ServerAccountModel serverAccount)
        {
            // Vérification de l'appelant
            IHttpActionResult result = this.SecurityCheckRoleAdminOrOwner(serverAccount.UserLogin);

            if (result != null)
            {
                return(result);
            }

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

            DatabaseServerUser databaseServerUser = service.AddAccount(serverAccount);

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

            return(CreatedAtRoute("DefaultApi", new { id = databaseServerUser.ServerId }, databaseServerUser));
        }