public string DoAction(ParameterBag parameters, KeyRingStore db) { /* * La suppression, fonction importante de ce type d’application, se fera de la manière suivante : * dotnet run -d USERNAME MASTER_PASSWORD TAG */ //Lire les paramètres string Username = parameters.GetNextParameter(); string MasterPassword = parameters.GetNextParameter(); string Tag = parameters.GetNextParameter(); //Chercher le password Password pwd = db.Passwords.Find(Username, Tag); //Charger l'utilisateur associé et tester le Master Password pwd.LoadUser(db).AssertMasterPassword(MasterPassword); //Supprimer le mot de passe de la bd et sauvegarder db.Passwords.Remove(pwd); db.SaveChanges(); //Succès return("OK"); }
static void Main(string[] args) { //Créer un sac de paramètres qu'on initialise avec les arguments de la ligne de commande ParameterBag parameters = new ParameterBag(args); //Lire le flag correspondant à l'action à effectuer string flag = parameters.GetNextParameter(); //Et récupérer l'action correspondante au flag IAction action = GetActionByFlag(flag); //NOTE: On ne fait aucune validation, on laisse les exceptions se lancer, et on affiche ERROR si on en attrape une try { //Ouvrir la base de donnée, elle se fermera automatiquement èa la fin du bloc "using" using (var db = new KeyRingStore()) { //Exécuter l'action et récupérer le résultat à afficher string toShow = action.DoAction(parameters, db); //Afficher le résultat ShowLine(toShow); } } catch (Exception) { //NOTE: Une erreur ne se produira jamais après avoir écrit un texte légitime //Afficher le message d'erreur ShowLine("ERROR"); } }
public string DoAction(ParameterBag parameters, KeyRingStore db) { /** * Évidemment ils doivent pouvoir récupérer les mots de passe avec la commande (cette commande * affiche sur la console le mot de passe en clair) : * dotnet run -g USERNAME MASTER_PASSWORD TAG */ //Lire les paramètres string Username = parameters.GetNextParameter(); string MasterPassword = parameters.GetNextParameter(); string Tag = parameters.GetNextParameter(); //Chercher le password Password pwd = db.Passwords.Find(Username, Tag); //Charger l'utilisateur associé et tester le Master Password pwd.LoadUser(db).AssertMasterPassword(MasterPassword); //Récupérer le mot de passe string Password = pwd.DecryptPassword(MasterPassword, pwd.User.Salt); //Retourner le mot de passe déchiffré return(Password); }
public string DoAction(ParameterBag parameters, KeyRingStore db) { /** * Ensuite, ils pourront ajouter des mots de passe associés à des tags comme ceci: * dotnet run -a USERNAME MASTER_PASSWORD TAG PASSWORD */ //Lire les paramètres string Username = parameters.GetNextParameter(); string MasterPassword = parameters.GetNextParameter(); string Tag = parameters.GetNextParameter(); string Password = parameters.GetNextParameter(); //Chercher l'utilisateur et tester le master password User user = db.Users.Find(Username); user.AssertMasterPassword(MasterPassword); //Construire le nouveau mot de passe Password pwd = new Password { Username = Username, Tag = Tag }; pwd.EncryptPassword(Password, MasterPassword, user.Salt); //L'ajouter à la bd, et enregistrer db.Passwords.Add(pwd); db.SaveChanges(); //Succès return("OK"); }
public string DoAction(ParameterBag parameters, KeyRingStore db) { /** * Avant toute chose le (ou les) utilisateur(s) de votre application devront s’enregistrer sur votre * application avec la commande suivante : * dotnet run -r USERNAME MASTER_PASSWORD */ //Lire les paramètres string Username = parameters.GetNextParameter(); string MasterPassword = parameters.GetNextParameter(); //Créer l'utilisateur User user = new User { Username = Username }; user.SetMasterPassword(MasterPassword); //L'ajouter à la bd, et enregistrer db.Users.Add(user); db.SaveChanges(); //Succès return("OK"); }
public string DoAction(ParameterBag parameters, KeyRingStore db) { //Lire le nom d'utilisateur string Username = parameters.GetNextParameter(); if (!parameters.RemainParameters()) { /** * Pour faciliter la correction, vous devez fournir deux fonctions d’affichage très simples : * dotnet run -t USERNAME doit retourner le mot de passe hashé et le sel cryptographique enregistrés * dans la base de données de l’utilisateur au format suivant : SALT:HASH */ //Chercher l'utilisateur User user = db.Users.Find(Username); //Récupérer le salt et le hash (tous 2 en base 64) string salt = user.Salt; string hash = user.MasterPasswordHash; //Retourner les information de l'utilisateur return(salt + ":" + hash); } else { /** * dotnet run -t USERNAME TAG doit retourner la version chiffrée encodée en Base64 du mot de passe * correspondant au tag */ //Lire les autres paramètres string Tag = parameters.GetNextParameter(); //Chercher le password Password pwd = db.Passwords.Find(Username, Tag); //Récupérer le cipher du mot de passe (en bas 64) string cipher = pwd.StoredPassword; //Retourner le cipher récupéré return(cipher); } }