public static GitHub_CustomO2 open(this GitHub_CustomO2 gitHub, string url)
        {
            var uri = url.starts("http")
                                        ? url.uri()
                                        : ("https://gitHub.com/" + url).uri();

            gitHub.IE.open(uri.str());
            return(gitHub);
        }
        public static GitHub_CustomO2 login(this GitHub_CustomO2 gitHub)
        {
            var gitHubLogin = @"C:\O2\_USERDATA\accounts.xml".credential("github");

            if (gitHubLogin.isNull())
            {
                gitHubLogin = ascx_AskUserForLoginDetails.ask();
            }
            return(gitHub.login(gitHubLogin.username(), gitHubLogin.password()));
        }
        public static GitHub_CustomO2 logout(this GitHub_CustomO2 gitHub)
        {
            "Logging out".info();
            var ie = gitHub.IE;

            if (ie.hasLink("Log Out"))
            {
                ie.link("Log Out").click();
            }
            return(gitHub);
        }
        public static GitHub_CustomO2 newRepository(this GitHub_CustomO2 gitHub, string name, string description, string homepageUrl)
        {
            var ie = gitHub.IE;

            ie.open("https://github.com/repositories/new");
            ie.field("repository[name]", name);
            ie.field("repository[description]", description);
            ie.field("repository[homepage]", homepageUrl);
            ie.radioButtons()[1].@checked();
            ie.button("<SPAN>Create Repository</SPAN>").click();
            return(gitHub);
        }
        public static GitHub_CustomO2 login(this GitHub_CustomO2 gitHub, string username, string password)
        {
            if (username.inValid() || password.inValid())
            {
                "No valid login credentials were provided".error();
                return(null);
            }
            gitHub.logout();
            var ie = gitHub.IE;

            ie.open("https://github.com/login");
            ie.field("login").value(username);
            ie.field("password").value(password);
            ie.button("Log in").click();
            return(gitHub);
        }
        public static GitHub_CustomO2 add_SSH_PublicKey(this GitHub_CustomO2 gitHub)
        {
            var ie      = gitHub.IE;
            var keyPath = "What is the path to the public key to use?".askUser();

            if (keyPath.fileExists().isFalse())
            {
                "no key file provided".error();
            }
            else
            {
                var title = System.IO.Path.GetFileNameWithoutExtension(keyPath);
                var key   = keyPath.fileContents();
                gitHub.homePage();
                gitHub.accountSettings();
                ie.link("SSH Public Keys").click();
                ie.link("Add another public key").click();
                ie.field("public_key[title]").value(title);
                ie.field("public_key[key]").value(key);
                ie.button("<SPAN>Add key</SPAN>").click();
            }
            return(gitHub);
        }
 public static GitHub_CustomO2 accountSettings(this GitHub_CustomO2 gitHub)
 {
     return(gitHub.openLink("Account Settings"));
 }
 public static GitHub_CustomO2 homePage(this GitHub_CustomO2 gitHub)
 {
     gitHub.IE.open("http://github.com");
     return(gitHub);
 }
        public static GitHub_CustomO2 loginAs(this GitHub_CustomO2 gitHub)
        {
            var gitHubLogin = ascx_AskUserForLoginDetails.ask();

            return(gitHub.login(gitHubLogin.username(), gitHubLogin.password()));
        }
 public static bool isLoggedIn(this GitHub_CustomO2 gitHub)
 {
     return(gitHub.inGitHub() && gitHub.IE.hasLink("Log Out"));
 }
 public static bool inGitHub(this GitHub_CustomO2 gitHub)
 {
     return(gitHub.IE.url().contains("github.com"));
 }
 public static GitHub_CustomO2 openLink(this GitHub_CustomO2 gitHub, string link)
 {
     gitHub.IE.link(link).click();
     return(gitHub);
 }