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)); } }
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)); } }
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"); }
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); }
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); } }
public void AddWebUserNameAndPassword(Uri url, string username, string password) { Keychain.AddInternetPassword(url, username, password); }
public void AddWebPassword(Uri uri, string password) { Keychain.AddInternetPassword(uri, password); }
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); } }