Exemplo n.º 1
0
        public void InternetPassword_AddFindRemove(string url, string probeUrl, string user, string expectedUsername)
        {
            var uri = new Uri(url);

            if (user != null)
            {
                Keychain.AddInternetPassword(uri, user, password);
            }
            else
            {
                Keychain.AddInternetPassword(uri, password);
            }

            uri = new Uri(probeUrl);

            try {
                var foundPassword = Keychain.FindInternetPassword(uri);
                var passAndUser   = Keychain.FindInternetUserNameAndPassword(uri);

                Assert.AreEqual(password, foundPassword, "#1");
                Assert.AreEqual(expectedUsername, passAndUser.Item1, "#2");
                Assert.AreEqual(password, passAndUser.Item2, "#3");
            } finally {
                Keychain.RemoveInternetPassword(uri);
                if (!string.IsNullOrEmpty(uri.UserInfo))
                {
                    Keychain.RemoveInternetUserNameAndPassword(uri);
                }

                Assert.IsNull(Keychain.FindInternetPassword(uri));
                Assert.IsNull(Keychain.FindInternetUserNameAndPassword(uri));
            }
        }
Exemplo n.º 2
0
        public void InternetPassword_SameHostDifferentPath(string url, string path1, string path2)
        {
            var uri1      = new Uri(url + "/" + path1);
            var uri2      = new Uri(url + "/" + path2);
            var user1     = !string.IsNullOrEmpty(uri1.UserInfo) ? uri1.UserInfo : "user1";
            var user2     = !string.IsNullOrEmpty(uri2.UserInfo) ? uri2.UserInfo : "user2";
            var password1 = password + "1";
            var password2 = password + "2";

            if (!string.IsNullOrEmpty(uri1.UserInfo))
            {
                Keychain.AddInternetPassword(uri1, password1);
            }
            else
            {
                Keychain.AddInternetPassword(uri1, user1, password1);
            }

            if (!string.IsNullOrEmpty(uri2.UserInfo))
            {
                Keychain.AddInternetPassword(uri2, password2);
            }
            else
            {
                Keychain.AddInternetPassword(uri2, user2, password2);
            }

            try {
                var foundPassword1        = Keychain.FindInternetPassword(uri1);
                var foundPasswordAndUser1 = Keychain.FindInternetUserNameAndPassword(uri1);
                var foundPassword2        = Keychain.FindInternetPassword(uri2);
                var foundPasswordAndUser2 = Keychain.FindInternetUserNameAndPassword(uri2);

                Assert.AreEqual(password1, foundPassword1);
                Assert.AreEqual(user1, foundPasswordAndUser1.Item1);
                Assert.AreEqual(password1, foundPasswordAndUser1.Item2);
                Assert.AreEqual(password2, foundPassword2);
                Assert.AreEqual(user2, foundPasswordAndUser2.Item1);
                Assert.AreEqual(password2, foundPasswordAndUser2.Item2);
            } finally {
                Keychain.RemoveInternetPassword(uri1);
                Keychain.RemoveInternetPassword(uri2);
                if (!string.IsNullOrEmpty(uri1.UserInfo))
                {
                    Keychain.RemoveInternetUserNameAndPassword(uri1);
                }
                if (!string.IsNullOrEmpty(uri2.UserInfo))
                {
                    Keychain.RemoveInternetUserNameAndPassword(uri2);
                }

                Assert.IsNull(Keychain.FindInternetPassword(uri1));
                Assert.IsNull(Keychain.FindInternetUserNameAndPassword(uri1));

                Assert.IsNull(Keychain.FindInternetPassword(uri2));
                Assert.IsNull(Keychain.FindInternetUserNameAndPassword(uri2));
            }
        }
Exemplo n.º 3
0
        public void InternetPassword_EmptyUsername()
        {
            Keychain.AddInternetPassword(new Uri("http://google.com"), "", "pa55word");
            var password = Keychain.FindInternetPassword(new Uri("http://google.com"));

            Assert.AreEqual("pa55word", password, "#1");

            var passAndUser = Keychain.FindInternetUserNameAndPassword(new Uri("http://google.com"));

            Assert.AreEqual(null, passAndUser.Item1, "#2");
            Assert.AreEqual("pa55word", passAndUser.Item2, "#3");
        }
Exemplo n.º 4
0
        public void InternetPassword_AddUpdateRemove(string url, string user, string updateUser, string expectedUsername)
        {
            var uri            = new Uri(url);
            var updatePassword = password + "Update";

            if (user != null)
            {
                Keychain.AddInternetPassword(uri, user, password);
            }
            else
            {
                Keychain.AddInternetPassword(uri, password);
            }

            try {
                var foundPassword = Keychain.FindInternetPassword(uri);
                var passAndUser   = Keychain.FindInternetUserNameAndPassword(uri);

                Assert.AreEqual(password, foundPassword);
                if (user != null)
                {
                    Assert.AreEqual(user, passAndUser.Item1);
                }
                Assert.AreEqual(password, passAndUser.Item2);

                if (updateUser != null)
                {
                    Keychain.AddInternetPassword(uri, updateUser, updatePassword);
                }
                else
                {
                    Keychain.AddInternetPassword(uri, updatePassword);
                }

                foundPassword = Keychain.FindInternetPassword(uri);
                passAndUser   = Keychain.FindInternetUserNameAndPassword(uri);

                Assert.AreEqual(updatePassword, foundPassword);
                Assert.AreEqual(expectedUsername, passAndUser.Item1);
                Assert.AreEqual(updatePassword, passAndUser.Item2);
            } finally {
                Keychain.RemoveInternetPassword(uri);
                if (!string.IsNullOrEmpty(uri.UserInfo))
                {
                    Keychain.RemoveInternetUserNameAndPassword(uri);
                }

                Assert.IsNull(Keychain.FindInternetPassword(uri));
                Assert.IsNull(Keychain.FindInternetUserNameAndPassword(uri));
            }
        }
        static ICredentials GetCredentialsFromUser(Uri uri, IWebProxy proxy, CredentialType credentialType)
        {
            NetworkCredential result = null;

            Runtime.RunInMainThread(() => {
                using (var ns = new NSAutoreleasePool()) {
                    var message = credentialType == CredentialType.ProxyCredentials
                                                ? GettextCatalog.GetString(
                        "{0} needs credentials to access the proxy server {1}.",
                        BrandingService.ApplicationName,
                        uri.Host
                        )
                                                : GettextCatalog.GetString(
                        "{0} needs credentials to access {1}.",
                        BrandingService.ApplicationName,
                        uri.Host
                        );

                    using (var alert = new NSAlert()) {
                        alert.MessageText     = GettextCatalog.GetString("Credentials Required");
                        alert.InformativeText = message;

                        var okButton     = alert.AddButton(GettextCatalog.GetString("OK"));
                        var cancelButton = alert.AddButton(GettextCatalog.GetString("Cancel"));

                        alert.Icon = MacPlatformService.ApplicationIcon;

                        var view = new NSView(new CGRect(0, 0, 313, 91));

                        var usernameLabel = new NSTextField(new CGRect(17, 55, 71, 17))
                        {
                            Identifier      = "usernameLabel",
                            StringValue     = "Username:"******"Password:",
                            Alignment       = NSTextAlignment.Right,
                            Editable        = false,
                            Bordered        = false,
                            DrawsBackground = false,
                            Bezeled         = false,
                            Selectable      = false,
                        };
                        view.AddSubview(passwordLabel);

                        var passwordInput = new NSSecureTextField(new CGRect(93, 20, 200, 22));
                        view.AddSubview(passwordInput);

                        using (var alertDelegate = new PasswordAlertWindowDelegate(usernameInput, passwordInput, cancelButton, okButton)) {
                            alert.AccessoryView = view;
                            MonoDevelop.Components.IdeTheme.ApplyTheme(alert.Window);
                            alert.Window.WeakDelegate          = alertDelegate;
                            alert.Window.InitialFirstResponder = usernameInput;
                            alert.Window.ReleasedWhenClosed    = true;
                            if (alert.RunModal() == NSAlertFirstButtonReturn)
                            {
                                var username = usernameInput.StringValue;
                                var password = passwordInput.StringValue;
                                result       = new NetworkCredential(username, password);
                            }
                            alert.Window.Close();
                        }
                    }
                }
            }).Wait();

            // store the obtained credentials in the keychain
            // but don't store for the root url since it may have other credentials
            if (result != null)
            {
                Keychain.AddInternetPassword(uri, result.UserName, result.Password);
            }

            return(result);
        }
        static ICredentials GetCredentialsFromUser(Uri uri, IWebProxy proxy, CredentialType credentialType)
        {
            NetworkCredential result = null;

            DispatchService.GuiSyncDispatch(() => {
                using (var ns = new NSAutoreleasePool()) {
                    var message = credentialType == CredentialType.ProxyCredentials
                                                ? GettextCatalog.GetString(
                        "{0} needs credentials to access the proxy server {1}.",
                        BrandingService.ApplicationName,
                        uri.Host
                        )
                                                : GettextCatalog.GetString(
                        "{0} needs credentials to access {1}.",
                        BrandingService.ApplicationName,
                        uri.Host
                        );

                    var alert = NSAlert.WithMessage(
                        GettextCatalog.GetString("Credentials Required"),
                        GettextCatalog.GetString("OK"),
                        GettextCatalog.GetString("Cancel"),
                        null,
                        message
                        );

                    alert.Icon = NSApplication.SharedApplication.ApplicationIconImage;

                    var view = new NSView(new RectangleF(0, 0, 313, 91));

                    var usernameLabel = new NSTextField(new RectangleF(17, 55, 71, 17))
                    {
                        Identifier      = "usernameLabel",
                        StringValue     = "Username:"******"Password:",
                        Alignment       = NSTextAlignment.Right,
                        Editable        = false,
                        Bordered        = false,
                        DrawsBackground = false,
                        Bezeled         = false,
                        Selectable      = false,
                    };
                    view.AddSubview(passwordLabel);

                    var passwordInput = new NSSecureTextField(new RectangleF(93, 20, 200, 22));
                    view.AddSubview(passwordInput);

                    alert.AccessoryView = view;

                    if (alert.RunModal() != 1)
                    {
                        return;
                    }

                    var username = usernameInput.StringValue;
                    var password = passwordInput.StringValue;
                    result       = new NetworkCredential(username, password);
                }
            });

            // store the obtained credentials in the keychain
            // but don't store for the root url since it may have other credentials
            if (result != null)
            {
                Keychain.AddInternetPassword(uri, result.UserName, result.Password);
            }

            return(result);
        }
        static ICredentials GetCredentialsFromUser(Uri uri, IWebProxy proxy, CredentialType credentialType)
        {
            NetworkCredential result = null;

            /*Runtime.RunInMainThread (() => {
             *
             *      using (var ns = new NSAutoreleasePool ()) {
             *              var message = credentialType == CredentialType.ProxyCredentials
             *                      ? GettextCatalog.GetString (
             *                              "{0} needs credentials to access the proxy server {1}.",
             *                              BrandingService.ApplicationName,
             *                              uri.Host
             *                      )
             *                      : GettextCatalog.GetString (
             *                              "{0} needs credentials to access {1}.",
             *                              BrandingService.ApplicationName,
             *                              uri.Host
             *                      );
             *
             *              var alert = NSAlert.WithMessage (
             *                      GettextCatalog.GetString ("Credentials Required"),
             *                      GettextCatalog.GetString ("OK"),
             *                      GettextCatalog.GetString ("Cancel"),
             *                      null,
             *                      message
             *              );
             *
             *              alert.Icon = NSApplication.SharedApplication.ApplicationIconImage;
             *
             *              var view = new NSView (new CGRect (0, 0, 313, 91));
             *
             *              var usernameLabel = new NSTextField (new CGRect (17, 55, 71, 17)) {
             *                      Identifier = "usernameLabel",
             *                      StringValue = "Username:"******"Password:",
             *                      Alignment = NSTextAlignment.Right,
             *                      Editable = false,
             *                      Bordered = false,
             *                      DrawsBackground = false,
             *                      Bezeled = false,
             *                      Selectable = false,
             *              };
             *              view.AddSubview (passwordLabel);
             *
             *              var passwordInput = new NSSecureTextField (new CGRect (93, 20, 200, 22));
             *              view.AddSubview (passwordInput);
             *
             *              alert.AccessoryView = view;
             *
             *              if (alert.RunModal () != 1)
             *                      return;
             *
             *              var username = usernameInput.StringValue;
             *              var password = passwordInput.StringValue;
             *              result = new NetworkCredential (username, password);
             *      }
             * }).Wait ();*/

            // store the obtained credentials in the keychain
            // but don't store for the root url since it may have other credentials
            if (result != null)
            {
                Keychain.AddInternetPassword(uri, result.UserName, result.Password);
            }

            return(result);
        }
Exemplo n.º 8
0
        public void InternetPassword_Remove()
        {
            var uriBase = new Uri("http://google.com");
            var uri1    = new Uri("http://[email protected]");
            var uri2    = new Uri("http://[email protected]");
            var uri3    = new Uri("http://[email protected]");

            Keychain.AddInternetPassword(uriBase, password);
            Keychain.AddInternetPassword(uri1, "user1", password);
            Keychain.AddInternetPassword(uri2, "user2", password);
            Keychain.AddInternetPassword(uri3, "user3", password);

            AssertKeychain(uriBase, null, password, password);
            AssertKeychain(uri1, null, password, password);
            AssertKeychain(uri2, null, password, password);
            AssertKeychain(uri3, null, password, password);

            // We removed the password for null user
            Keychain.RemoveInternetPassword(uriBase);
            AssertKeychain(uriBase, "user1", password, password);
            AssertKeychain(uri1, "user1", password, password);
            AssertKeychain(uri2, "user1", password, password);
            AssertKeychain(uri3, "user1", password, password);

            // We removed user and pass for user1.
            Keychain.RemoveInternetUserNameAndPassword(uri1);
            AssertKeychain(uriBase, "user2", password, password);
            AssertKeychain(uri1, "user2", password, null);
            AssertKeychain(uri2, "user2", password, password);
            AssertKeychain(uri3, "user2", password, password);

            // We removed user and pass for non-user
            Keychain.RemoveInternetPassword(uri2);
            AssertKeychain(uriBase, "user3", password, password);
            AssertKeychain(uri1, "user3", password, null);
            AssertKeychain(uri2, "user3", password, null);
            AssertKeychain(uri2, "user3", password, null);

            Keychain.RemoveInternetUserNameAndPassword(uri3);
            AssertKeychain(uriBase, null, null, null);
            AssertKeychain(uri1, null, null, null);
            AssertKeychain(uri2, null, null, null);
            AssertKeychain(uri2, null, null, null);

            void AssertKeychain(Uri uri, string expectedUser, string expectedUserPassword, string expectedPassword)
            {
                var userPassword  = Keychain.FindInternetUserNameAndPassword(uri);
                var foundPassword = Keychain.FindInternetPassword(uri);

                if (expectedUser == null && expectedPassword == null)
                {
                    Assert.IsNull(userPassword);
                }
                else
                {
                    Assert.AreEqual(expectedUser, userPassword.Item1);
                    Assert.AreEqual(expectedUserPassword, userPassword.Item2);
                }
                Assert.AreEqual(expectedPassword, foundPassword);
            }
        }
Exemplo n.º 9
0
 public void AddWebUserNameAndPassword(Uri url, string username, string password)
 {
     Keychain.AddInternetPassword(url, username, password);
 }
Exemplo n.º 10
0
 public void AddWebPassword(Uri uri, string password)
 {
     Keychain.AddInternetPassword(uri, password);
 }
Exemplo n.º 11
0
        public void InternetPassword_Remove()
        {
            string passwordNoUser = password + "nouser";

            var uriBase = new Uri("http://" + testDomain);
            var uri1    = new Uri("http://user1@" + testDomain);
            var uri2    = new Uri("http://user2@" + testDomain);
            var uri3    = new Uri("http://" + testDomain + "/path");

            try {
                Keychain.AddInternetPassword(uriBase, passwordNoUser);
                Keychain.AddInternetPassword(uri1, password);
                Keychain.AddInternetPassword(uri2, password);
                Keychain.AddInternetPassword(uri3, "user2", password);

                AssertKeychain(uriBase, null, passwordNoUser, passwordNoUser);
                AssertKeychain(uri1, "user1", password, password);
                AssertKeychain(uri2, "user2", password, password);
                AssertKeychain(uri3, "user2", password, password);

                Keychain.RemoveInternetPassword(uriBase);
                // We removed the password for the entry without user
                // The next best match for uriBase should be "user1" from uri1
                AssertKeychain(uriBase, "user1", password, password);
                AssertKeychain(uri1, "user1", password, password);
                AssertKeychain(uri2, "user2", password, password);
                AssertKeychain(uri3, "user2", password, password);

                Keychain.RemoveInternetUserNameAndPassword(uri1);
                // We removed user and pass for user1.
                // The next best match for uriBase "user2" from uri2 now
                AssertKeychain(uriBase, "user2", password, password);
                // uri1 has no other match, because the user name is specified in the url
                AssertKeychain(uri1, null, null, null);
                AssertKeychain(uri2, "user2", password, password);
                AssertKeychain(uri3, "user2", password, password);

                Keychain.RemoveInternetUserNameAndPassword(uri2);
                AssertKeychain(uriBase, null, null, null);
                AssertKeychain(uri1, null, null, null);
                AssertKeychain(uri2, null, null, null);
                AssertKeychain(uri3, "user2", password, password);

                Keychain.RemoveInternetUserNameAndPassword(uri3);
                // We removed all entries
                AssertKeychain(uriBase, null, null, null);
                AssertKeychain(uri1, null, null, null);
                AssertKeychain(uri2, null, null, null);
                AssertKeychain(uri3, null, null, null);
            } finally {
                Keychain.RemoveInternetPassword(uriBase);
                Keychain.RemoveInternetPassword(uri1);
                Keychain.RemoveInternetPassword(uri2);
                Keychain.RemoveInternetPassword(uri3);
                Keychain.RemoveInternetUserNameAndPassword(uriBase);
                Keychain.RemoveInternetUserNameAndPassword(uri1);
                Keychain.RemoveInternetUserNameAndPassword(uri2);
                Keychain.RemoveInternetUserNameAndPassword(uri3);

                Assert.IsNull(Keychain.FindInternetPassword(uriBase));
                Assert.IsNull(Keychain.FindInternetUserNameAndPassword(uriBase));
                Assert.IsNull(Keychain.FindInternetPassword(uri1));
                Assert.IsNull(Keychain.FindInternetUserNameAndPassword(uri1));
                Assert.IsNull(Keychain.FindInternetPassword(uri2));
                Assert.IsNull(Keychain.FindInternetUserNameAndPassword(uri2));
                Assert.IsNull(Keychain.FindInternetPassword(uri3));
                Assert.IsNull(Keychain.FindInternetUserNameAndPassword(uri3));
            }

            void AssertKeychain(Uri uri, string expectedUser, string expectedUserPassword, string expectedPassword)
            {
                var userPassword  = Keychain.FindInternetUserNameAndPassword(uri);
                var foundPassword = Keychain.FindInternetPassword(uri);

                if (expectedUser == null && expectedPassword == null)
                {
                    Assert.IsNull(userPassword);
                }
                else
                {
                    Assert.AreEqual(expectedUser, userPassword.Item1);
                    Assert.AreEqual(expectedUserPassword, userPassword.Item2);
                }
                Assert.AreEqual(expectedPassword, foundPassword);
            }
        }