Esempio n. 1
0
        void connect()
        {
            string url = serverLocationTextBox.Text;

            if (!url.StartsWith("http"))
            {
                url = "https://" + url;
            }
            if (!url.EndsWith(BasePath))
            {
                url += BasePath;
            }
            string host = new Uri(url).Host;

            while (true)
            {
                try
                {
                    if (SelectedCredentials != null)
                    {
                        TokenClient   client   = new TokenClient(TokenEndpoint, "resourceownerclient", SelectedCredentials.ClientSecret);
                        TokenResponse response = client.RequestResourceOwnerPasswordAsync(SelectedCredentials.Username, SelectedCredentials.Password, SelectedCredentials.ClientScope).Result;
                        if (response.IsError)
                        {
                            if (MessageBox.Show(this, "Username or password are not correct!", "Error", MessageBoxButtons.RetryCancel) == DialogResult.Cancel)
                            {
                                return;
                            }
                        }
                        else
                        {
                            _accessToken = response.AccessToken;
                            _httpClient.SetBearerToken(_accessToken);
                            _httpClient.DefaultRequestHeaders.Remove("Accept");
                            _httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata.metadata=minimal");
                            break;
                        }
                    }

                    var loginForm = new LoginForm()
                    {
                        StartPosition = FormStartPosition.CenterParent
                    };
                    if (SelectedCredentials != null)
                    {
                        loginForm.usernameTextBox.Text       = SelectedCredentials.Username;
                        loginForm.passwordTextBox.Text       = SelectedCredentials.Password;
                        loginForm.identityServerTextBox.Text = SelectedCredentials.IdentityServer.Replace(host, "<HostURL>");
                        loginForm.clientScopeTextBox.Text    = SelectedCredentials.ClientScope;
                        loginForm.clientSecretTextBox.Text   = SelectedCredentials.ClientSecret;
                    }
                    if (loginForm.ShowDialog(this) == DialogResult.Cancel)
                    {
                        return;
                    }

                    SelectedCredentials = new Credentials
                    {
                        Username       = loginForm.usernameTextBox.Text,
                        Password       = loginForm.passwordTextBox.Text,
                        IdentityServer = loginForm.identityServerTextBox.Text.Replace("<HostURL>", host),
                        ClientScope    = loginForm.clientScopeTextBox.Text,
                        ClientSecret   = loginForm.clientSecretTextBox.Text
                    };
                    if (!SelectedCredentials.IdentityServer.StartsWith("http"))
                    {
                        SelectedCredentials.IdentityServer = "https://" + SelectedCredentials.IdentityServer;
                    }
                }
                catch (Exception ex)
                {
                    if (MessageBox.Show(this, "Failed to connect to identity server:\r\n" + ex.ToString(), "Error", MessageBoxButtons.RetryCancel) == DialogResult.Cancel)
                    {
                        return;
                    }
                    SelectedCredentials = null;
                }
            }

            FileTree.Nodes.Clear();
            FileTree.Nodes.Add("host", host, 0);
            GetFolders();
            FileTree.ExpandAll();

            serverLocationTextBox.Text     = url;
            serverLocationTextBox.ReadOnly = true;
            connectButton.Text             = "Disconnect";
        }
Esempio n. 2
0
        void connect()
        {
            string url = serverLocationTextBox.Text;

            if (!url.Any())
            {
                return;
            }

            // add default unifi port if no port given
            var url2 = new Uri(!url.StartsWith("http") ? "http://" + url : url);

            if (url2.IsDefaultPort)
            {
                url = url.Replace(url2.Host, url2.Host + DefaultUnifiPort);
            }

            // guess scheme if no scheme given
            try
            {
                if (!url.StartsWith("http"))
                {
                    url = (UrlSupportsSSL(url) ? "https://" : "http://") + url;
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(this, e.Message, "Error");
                return;
            }

            // add API path if missing
            if (!url.EndsWith(BasePath))
            {
                url += BasePath;
            }

            string host = url2.Host;

            while (true)
            {
                try
                {
                    if (SelectedCredentials != null && SelectedCredentials.Username?.Any() == true && SelectedCredentials.Password?.Any() == true)
                    {
                        TokenClient   client   = new TokenClient(TokenEndpoint, "resourceownerclient", SelectedCredentials.ClientSecret, null, AuthenticationStyle.BasicAuthentication);
                        TokenResponse response = client.RequestResourceOwnerPasswordAsync(SelectedCredentials.Username, SelectedCredentials.Password, SelectedCredentials.ClientScope).Result;
                        if (response.IsError)
                        {
                            if (response.ErrorDescription?.Contains("InvalidLogin") == true)
                            {
                                using (new CenterWinDialog(this))
                                {
                                    if (MessageBox.Show(this, "Username or password are not correct!", "Error", MessageBoxButtons.RetryCancel) == DialogResult.Cancel)
                                    {
                                        return;
                                    }
                                }
                            }
                            else if (response.Exception != null)
                            {
                                throw response.Exception;
                            }
                            else
                            {
                                throw new InvalidOperationException(response.Error + ": " + response.ErrorDescription);
                            }
                        }
                        else
                        {
                            _accessToken = response.AccessToken;
                            _httpClient.SetBearerToken(_accessToken);
                            _httpClient.DefaultRequestHeaders.Remove("Accept");
                            _httpClient.DefaultRequestHeaders.Add("Accept", "application/json;odata.metadata=minimal");
                            break;
                        }
                    }

                    var loginForm = new LoginForm()
                    {
                        StartPosition = FormStartPosition.CenterParent
                    };
                    if (SelectedCredentials != null && SelectedCredentials.Username?.Any() == true && SelectedCredentials.Password?.Any() == true)
                    {
                        loginForm.usernameTextBox.Text       = SelectedCredentials.Username;
                        loginForm.passwordTextBox.Text       = SelectedCredentials.Password;
                        loginForm.identityServerTextBox.Text = SelectedCredentials.IdentityServer.Replace(host, "<HostURL>");
                        loginForm.clientScopeTextBox.Text    = SelectedCredentials.ClientScope;
                        loginForm.clientSecretTextBox.Text   = SelectedCredentials.ClientSecret;
                    }
                    if (loginForm.ShowDialog(this) == DialogResult.Cancel)
                    {
                        return;
                    }

                    SelectedCredentials = new Credentials
                    {
                        Username       = loginForm.usernameTextBox.Text,
                        Password       = loginForm.passwordTextBox.Text,
                        IdentityServer = loginForm.identityServerTextBox.Text.Replace("<HostURL>", host),
                        ClientScope    = loginForm.clientScopeTextBox.Text,
                        ClientSecret   = loginForm.clientSecretTextBox.Text
                    };
                    if (!SelectedCredentials.IdentityServer.StartsWith("http"))
                    {
                        SelectedCredentials.IdentityServer = (url.StartsWith("http://") ? "http://" : "https://") + SelectedCredentials.IdentityServer;
                    }
                }
                catch (Exception ex)
                {
                    if (ex.InnerException != null)
                    {
                        ex = ex.InnerException; // bypass AggregateException
                    }
                    if (MessageBox.Show(this, "Failed to connect to identity server (" + SelectedCredentials.IdentityServer + "):\r\n" + ex.Message, "Error", MessageBoxButtons.RetryCancel) == DialogResult.Cancel)
                    {
                        return;
                    }
                    SelectedCredentials = null;
                }
            }

            serverLocationTextBox.Text = url;

            FileTree.Nodes.Clear();
            FileTree.Nodes.Add("host", host, 0);
            GetFolders();
            serverLocationTextBox.Text     = url;
            serverLocationTextBox.ReadOnly = true;
            connectButton.Text             = "Disconnect";
        }