Esempio n. 1
0
        public void Test_LineEndings_PasswordOnly()
        {
            var crlf = "password\r\n";
            var cr   = "password\r";
            var lf   = "password\n";
            var none = "password";

            var p = new PasswordFileParser();

            var parsedCrlf = p.Parse(dummyFile, crlf, false);

            Assert.AreEqual(parsedCrlf.Password, "password");
            Assert.AreEqual(parsedCrlf.Metadata, string.Empty);

            var parsedCr = p.Parse(dummyFile, cr, false);

            Assert.AreEqual(parsedCr.Password, "password");
            Assert.AreEqual(parsedCr.Metadata, string.Empty);

            var parsedLf = p.Parse(dummyFile, lf, false);

            Assert.AreEqual(parsedLf.Password, "password");
            Assert.AreEqual(parsedLf.Metadata, string.Empty);

            var parsedNone = p.Parse(dummyFile, none, false);

            Assert.AreEqual(parsedNone.Password, "password");
            Assert.AreEqual(parsedNone.Metadata, string.Empty);
        }
Esempio n. 2
0
        public void Test_EmptyFile()
        {
            var text   = "";
            var p      = new PasswordFileParser();
            var parsed = p.Parse(dummyFile, text, false);

            Assert.AreEqual(parsed.Password, string.Empty);
            Assert.AreEqual(parsed.Metadata, string.Empty);
        }
Esempio n. 3
0
 public DialogCreator(
     INotificationService notificationService,
     IPasswordManager passwordManager,
     PasswordFileParser passwordFileParser,
     Option <ISyncService> syncService)
 {
     this.notificationService = notificationService ?? throw new ArgumentNullException(nameof(notificationService));
     this.passwordManager     = passwordManager ?? throw new ArgumentNullException(nameof(passwordManager));
     this.passwordFileParser  = passwordFileParser;
     this.syncService         = syncService.Value;
     this.pathDisplayHelper   = new PathDisplayHelper(ConfigManager.Config.Interface.DirectorySeparator);
 }
Esempio n. 4
0
        public void Test_Metadata_KeyFormat()
        {
            var duplicate = "password\r\n" +
                            "Username: user\r\n" +
                            "With-Dash: value\r\n" +
                            "_WithUnderline: value2\r\n";

            var p      = new PasswordFileParser();
            var parsed = p.Parse(dummyFile, duplicate, false);

            Assert.IsTrue(parsed.Keys[0].Key == "Username");
            Assert.IsTrue(parsed.Keys[0].Value == "user");
            Assert.IsTrue(parsed.Keys[1].Key == "With-Dash");
            Assert.IsTrue(parsed.Keys[1].Value == "value");
            Assert.IsTrue(parsed.Keys[2].Key == "_WithUnderline");
            Assert.IsTrue(parsed.Keys[2].Value == "value2");
        }
Esempio n. 5
0
        public void Test_Metadata_LineEndings()
        {
            const string crlf = "password\r\n" +
                                "Username: user\r\n" +
                                "Key: value";
            const string cr = "password\r" +
                              "Username: user\r" +
                              "Key: value";
            const string lf = "password\n" +
                              "Username: user\n" +
                              "Key: value";
            const string mixed = "password\r\n" +
                                 "Username: user\n" +
                                 "Key: value\r";

            var p = new PasswordFileParser();

            var parsedCrlf = p.Parse(dummyFile, crlf, false);

            Assert.IsTrue(parsedCrlf.Keys[0].Key == "Username");
            Assert.IsTrue(parsedCrlf.Keys[0].Value == "user");
            Assert.IsTrue(parsedCrlf.Keys[1].Key == "Key");
            Assert.IsTrue(parsedCrlf.Keys[1].Value == "value");

            var parsedCr = p.Parse(dummyFile, cr, false);

            Assert.IsTrue(parsedCr.Keys[0].Key == "Username");
            Assert.IsTrue(parsedCr.Keys[0].Value == "user");
            Assert.IsTrue(parsedCr.Keys[1].Key == "Key");
            Assert.IsTrue(parsedCr.Keys[1].Value == "value");

            var parsedLf = p.Parse(dummyFile, lf, false);

            Assert.IsTrue(parsedLf.Keys[0].Key == "Username");
            Assert.IsTrue(parsedLf.Keys[0].Value == "user");
            Assert.IsTrue(parsedLf.Keys[1].Key == "Key");
            Assert.IsTrue(parsedLf.Keys[1].Value == "value");

            var parsedMixed = p.Parse(dummyFile, mixed, false);

            Assert.IsTrue(parsedMixed.Keys[0].Key == "Username");
            Assert.IsTrue(parsedMixed.Keys[0].Value == "user");
            Assert.IsTrue(parsedMixed.Keys[1].Key == "Key");
            Assert.IsTrue(parsedMixed.Keys[1].Value == "value");
        }
Esempio n. 6
0
        public void Test_Metadata_Multiple_Keys()
        {
            var duplicate = "password\r\n" +
                            "Username: user\r\n" +
                            "Duplicate: value1\r\n" +
                            "Duplicate: value2\r\n" +
                            "Duplicate: value3\r\n";

            var p      = new PasswordFileParser();
            var parsed = p.Parse(dummyFile, duplicate, false);

            Assert.IsTrue(parsed.Keys[0].Key == "Username");
            Assert.IsTrue(parsed.Keys[0].Value == "user");
            Assert.IsTrue(parsed.Keys[1].Key == "Duplicate");
            Assert.IsTrue(parsed.Keys[1].Value == "value1");
            Assert.IsTrue(parsed.Keys[2].Key == "Duplicate");
            Assert.IsTrue(parsed.Keys[2].Value == "value2");
            Assert.IsTrue(parsed.Keys[3].Key == "Duplicate");
            Assert.IsTrue(parsed.Keys[3].Value == "value3");
        }
Esempio n. 7
0
        public void GetUsername_LineNumberInvalid_ThrowsException(int lineNumber, bool isValid)
        {
            var passwordFile = new ParsedPasswordFile(new PasswordFile(null, null), "password", "username");
            var parser       = new PasswordFileParser(new UsernameDetectionConfig
            {
                MethodString = "line-number",
                Options      = new UsernameDetectionOptions
                {
                    LineNumber = lineNumber
                }
            });

            if (isValid)
            {
                Should.NotThrow(() => parser.GetUsername(passwordFile));
            }
            else
            {
                Should.Throw <PasswordParseException>(() => parser.GetUsername(passwordFile));
            }
        }
Esempio n. 8
0
        public void Test_LineEndings_Metadata()
        {
            var crlf = "password\r\nmeta-data";
            var cr   = "password\rmeta-data";
            var lf   = "password\nmeta-data";

            var p = new PasswordFileParser();

            var parsedCrlf = p.Parse(dummyFile, crlf, false);

            Assert.AreEqual(parsedCrlf.Password, "password");
            Assert.AreEqual(parsedCrlf.Metadata, "meta-data");

            var parsedCr = p.Parse(dummyFile, cr, false);

            Assert.AreEqual(parsedCr.Password, "password");
            Assert.AreEqual(parsedCr.Metadata, "meta-data");

            var parsedLf = p.Parse(dummyFile, lf, false);

            Assert.AreEqual(parsedLf.Password, "password");
            Assert.AreEqual(parsedLf.Metadata, "meta-data");
        }
Esempio n. 9
0
        /// <summary>
        /// Asks the user to choose a password file, decrypts it, and copies the resulting value to the clipboard.
        /// </summary>
        public void DecryptPassword(bool copyToClipboard, bool typeUsername, bool typePassword)
        {
            var selectedFile = RequestPasswordFile();

            // If the user cancels their selection, the password decryption should be cancelled too.
            if (selectedFile == null)
            {
                return;
            }

            KeyedPasswordFile passFile;

            try
            {
                passFile = passwordManager.DecryptPassword(selectedFile, ConfigManager.Config.PasswordStore.FirstLineOnly);
            }
            catch (GpgError e)
            {
                notificationService.ShowErrorWindow("Password decryption failed: " + e.Message);
                return;
            }
            catch (GpgException e)
            {
                notificationService.ShowErrorWindow("Password decryption failed. " + e.Message);
                return;
            }
            catch (ConfigurationException e)
            {
                notificationService.ShowErrorWindow("Password decryption failed: " + e.Message);
                return;
            }
            catch (Exception e)
            {
                notificationService.ShowErrorWindow($"Password decryption failed: An error occurred: {e.GetType().Name}: {e.Message}");
                return;
            }

            if (copyToClipboard)
            {
                clipboard.Place(passFile.Password, TimeSpan.FromSeconds(ConfigManager.Config.Interface.ClipboardTimeout));
                if (ConfigManager.Config.Notifications.Types.PasswordCopied)
                {
                    notificationService.Raise($"The password has been copied to your clipboard.\nIt will be cleared in {ConfigManager.Config.Interface.ClipboardTimeout:0.##} seconds.", Severity.Info);
                }
            }
            var usernameEntered = false;

            if (typeUsername)
            {
                var username = new PasswordFileParser().GetUsername(passFile);
                if (username != null)
                {
                    KeyboardEmulator.EnterText(username, ConfigManager.Config.Output.DeadKeys);
                    usernameEntered = true;
                }
            }
            if (typePassword)
            {
                // If a username has also been entered, press Tab to switch to the password field.
                if (usernameEntered)
                {
                    KeyboardEmulator.EnterRawText("{TAB}");
                }

                KeyboardEmulator.EnterText(passFile.Password, ConfigManager.Config.Output.DeadKeys);
            }
        }