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"; }
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"; }