public UtilisateurViewModel(SysUtilisateur utilisateur) { TitleContent = string.Format("{0} / {1}", ResourcesService.GetString("ParameterMenuLabel"), ResourcesService.GetString("UtilisateurLabel")); SaveCommand = new RelayCommand(Save, CanSave); DeleteCommand = new RelayCommand(Delete, CanDelete); Utilisateur = utilisateur; Code = Utilisateur.Code; LoadRights(); }
/// <summary> /// Permet de savoir si le couple utilisateur/mot de passe est correct sur l'application /// </summary> /// <param name="user">Utilisateur</param> /// <param name="password">Mot de passe</param> /// <param name="errorsEnum">Erreur possible lors de l'authentification</param> /// <returns></returns> public bool IsAuth(string user, string password, out AccessControlErrorsEnum errorsEnum) { //1. On vérifie que l'utilisateur existe bien var usersDb = _repositoryService.Where<SysUtilisateur>(u => u.Code == user); if (usersDb.Any()) { var userDb = usersDb.First(); if (userDb.IsBlock) { errorsEnum = AccessControlErrorsEnum.UtilisateurBloque; return false; } else { //2. Préparation du mot de passe avec le GDS var mdpgds = string.Format("{0}.{1}", password, userDb.Gds); //3. On valide le mot de passe if (ServiceLocator.Current.GetInstance<ICryptographyService>().HashSha256(mdpgds) == userDb.MotDePasse) { errorsEnum = AccessControlErrorsEnum.None; CurrentUser = userDb; //On modifie le GDS avec une nouvelle valeur aléatoire GenerateNewGdsForUser(userDb, password); return true; } else { errorsEnum = AccessControlErrorsEnum.MDPIncorrect; return false; } } } else { errorsEnum = AccessControlErrorsEnum.UtilisateurInconnu; return false; } }
/// <summary> /// /// </summary> public AccessLayerService() { _currentUser = null; }
protected virtual void Dispose(bool disposing) { _valuesRightDictionary.Clear(); _currentUser = null; }
/// <summary> /// Permet de générer un nouveau GDS et sauvegarder le mot de passe associé à ce nouveau GDS /// afin de diminuer les chances de prédiction du mot de passe /// </summary> /// <param name="user"></param> /// <param name="password"></param> /// <param name="save"></param> private void GenerateNewGdsForUser(SysUtilisateur user, string password, bool save = true) { //1. Génération d'un nouveau GDS var randomBuffer = CryptographicBuffer.GenerateRandomNumber(); var newGds = Math.Abs(randomBuffer); //2. Cryptage du nouveau GDS avec le mot de passe var newMdpgds = string.Format("{0}.{1}", password, newGds); var newMdp = ServiceLocator.Current.GetInstance<ICryptographyService>().HashSha256(newMdpgds); //3. Enregistrement de ces nouvelles valeurs user.MotDePasse = newMdp; user.Gds = newGds.ToString(CultureInfo.InvariantCulture); if (save) { _repositoryService.Save<SysUtilisateur>(user); } }
/// <summary> /// Permet de sauvegarder un nouveau mot de passe pour l'utilisateur /// </summary> /// <param name="user"></param> /// <param name="password"></param> /// <param name="save"></param> /// <returns></returns> public bool CreateNewPasswordForUser(SysUtilisateur user, string password, bool save = false) { try { GenerateNewGdsForUser(user, password, save); return true; } catch (Exception e) { //SimpleIoc.Default.GetInstance<IServiceLogger>().LogFatalError(e); return false; } }
/// <summary> /// Permet de déconnecte run utilisateur et de re-initialiser les informations actuelles sur les droits /// </summary> public bool Disconnect() { try { CurrentUser = null; _valuesRightDictionary.Clear(); _valuesColumnsRightDictionnaDictionary.Clear(); return true; } catch (Exception) { return false; } }