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");
        }
Example #2
0
        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");
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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");
        }
Example #5
0
        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");
        }
Example #6
0
        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);
            }
        }