public static IWebDavClient CreateWebDavClient( string username, SecureString password, string serverUrl, TimeSpan timeout, ServerAdapterType serverAdapterType, bool closeConnectionAfterEachRequest, bool preemptiveAuthentication, bool forceBasicAuthentication, ProxyOptions proxyOptions, bool acceptInvalidChars ) { switch (serverAdapterType) { case ServerAdapterType.WebDavHttpClientBased: case ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth: var productAndVersion = GetProductAndVersion(); return(new DataAccess.HttpClientBasedClient.WebDavClient( () => CreateHttpClient(username, password, serverUrl, timeout, serverAdapterType, proxyOptions, preemptiveAuthentication, forceBasicAuthentication), productAndVersion.Item1, productAndVersion.Item2, closeConnectionAfterEachRequest, acceptInvalidChars, RequiresEtagsWithoutQuotes(serverUrl))); default: throw new ArgumentOutOfRangeException("serverAdapterType"); } }
public static IWebDavClient CreateWebDavClient( string username, string password, TimeSpan timeout, ServerAdapterType serverAdapterType, bool closeConnectionAfterEachRequest, ProxyOptions proxyOptions ) { switch (serverAdapterType) { case ServerAdapterType.Default: case ServerAdapterType.GoogleOAuth: var productAndVersion = GetProductAndVersion(); return(new DataAccess.HttpClientBasedClient.WebDavClient( () => CreateHttpClient(username, password, timeout, serverAdapterType, proxyOptions), productAndVersion.Item1, productAndVersion.Item2, closeConnectionAfterEachRequest)); case ServerAdapterType.SynchronousWebRequestBased: return(new DataAccess.WebRequestBasedClient.WebDavClient( username, password, timeout, timeout, closeConnectionAfterEachRequest)); default: throw new ArgumentOutOfRangeException("serverAdapterType"); } }
private void CurrentOptions_OutlookFolderTypeChanged(object sender, EventArgs e) { if (_currentOptions.OutlookFolderType == OlItemType.olTaskItem) { _serverAdapterType = ServerAdapterType.GoogleTaskApi; } else { _serverAdapterType = ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth; } }
public void CoerceServerAdapterType(OlItemType?itemType) { if (itemType == OlItemType.olTaskItem) { _serverAdapterType = ServerAdapterType.GoogleTaskApi; } else { _serverAdapterType = ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth; } }
public void SetOptions(CalDavSynchronizer.Contracts.Options options) { EmailAddress = options.EmailAddress; if (!string.IsNullOrEmpty(options.CalenderUrl)) { CalenderUrl = options.CalenderUrl; } else { CalenderUrl = OptionTasks.GoogleDavBaseUrl; } _serverAdapterType = options.ServerAdapterType; }
public void SetOptions(Contracts.Options value) { _emailAddressTextBox.Text = value.EmailAddress; if (!string.IsNullOrEmpty(value.CalenderUrl)) { _calenderUrlTextBox.Text = value.CalenderUrl; } else { _calenderUrlTextBox.Text = OptionTasks.GoogleDavBaseUrl; } _serverAdapterType = value.ServerAdapterType; _networkAndProxyOptions = new NetworkAndProxyOptions(value.CloseAfterEachRequest, value.PreemptiveAuthentication, value.ForceBasicAuthentication, value.ProxyOptions ?? new ProxyOptions()); }
public static CardDavDataAccess CreateCardDavDataAccess( string calenderUrl, string username, string password, TimeSpan timeout, ServerAdapterType serverAdapterType) { var productAndVersion = GetProductAndVersion(); var cardDavDataAccess = new CardDavDataAccess( new Uri(calenderUrl), new CardDavClient( () => CreateHttpClient(username, password, timeout, serverAdapterType), productAndVersion.Item1, productAndVersion.Item2)); return(cardDavDataAccess); }
public static IWebDavClient CreateWebDavClient ( string username, string password, TimeSpan timeout, ServerAdapterType serverAdapterType, bool closeConnectionAfterEachRequest, ProxyOptions proxyOptions ) { switch (serverAdapterType) { case ServerAdapterType.Default: case ServerAdapterType.GoogleOAuth: var productAndVersion = GetProductAndVersion(); return new DataAccess.HttpClientBasedClient.WebDavClient ( () => CreateHttpClient (username, password, timeout, serverAdapterType, proxyOptions), productAndVersion.Item1, productAndVersion.Item2, closeConnectionAfterEachRequest); case ServerAdapterType.SynchronousWebRequestBased: return new DataAccess.WebRequestBasedClient.WebDavClient ( username, password, timeout, timeout); default: throw new ArgumentOutOfRangeException ("serverAdapterType"); } }
private static async Task <HttpClient> CreateHttpClient(string username, string password, TimeSpan calDavConnectTimeout, ServerAdapterType serverAdapterType) { switch (serverAdapterType) { case ServerAdapterType.Default: var httpClientHandler = new HttpClientHandler(); if (!string.IsNullOrEmpty(username)) { httpClientHandler.Credentials = new NetworkCredential(username, password); } var httpClient = new HttpClient(httpClientHandler); httpClient.Timeout = calDavConnectTimeout; return(httpClient); case ServerAdapterType.GoogleOAuth: return(await OAuth.Google.GoogleHttpClientFactory.CreateHttpClient(username, GetProductWithVersion())); default: throw new ArgumentOutOfRangeException("serverAdapterType"); } }
public static void DisplayTestReport ( TestResult result, bool selectedSynchronizationModeRequiresWriteableServerResource, string selectedSynchronizationModeDisplayName, OlItemType? outlookFolderType, ServerAdapterType serverAdapterType) { bool hasError = false; bool hasWarning = false; var errorMessageBuilder = new StringBuilder (); var isCalendar = result.ResourceType.HasFlag (ResourceType.Calendar); var isAddressBook = result.ResourceType.HasFlag (ResourceType.AddressBook); var isGoogleTask = result.ResourceType.HasFlag (ResourceType.TaskList); if (isGoogleTask) { if (outlookFolderType != OlItemType.olTaskItem) { errorMessageBuilder.AppendLine ("- The outlook folder is not a task folder, or there is no folder selected."); hasError = true; } } else if (!isCalendar && !isAddressBook) { errorMessageBuilder.AppendLine ("- The specified Url is neither a calendar nor an addressbook!"); hasError = true; } if (isCalendar && isAddressBook) { errorMessageBuilder.AppendLine ("- Ressources which are a calendar and an addressbook are not valid!"); hasError = true; } if (isCalendar) { if (!result.CalendarProperties.HasFlag (CalendarProperties.CalendarAccessSupported)) { errorMessageBuilder.AppendLine ("- The specified Url does not support calendar access."); hasError = true; } if (!result.CalendarProperties.HasFlag (CalendarProperties.SupportsCalendarQuery)) { errorMessageBuilder.AppendLine ("- The specified Url does not support calendar queries. Some features like time range filter may not work!"); hasWarning = true; } if (!result.CalendarProperties.HasFlag (CalendarProperties.IsWriteable)) { if (selectedSynchronizationModeRequiresWriteableServerResource) { errorMessageBuilder.AppendFormat ( "- The specified calendar is not writeable. Therefore it is not possible to use the synchronization mode '{0}'.", selectedSynchronizationModeDisplayName); errorMessageBuilder.AppendLine (); hasError = true; } } if (serverAdapterType == ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth) { if (outlookFolderType != OlItemType.olAppointmentItem) { errorMessageBuilder.AppendLine ("- The outlook folder is not a calendar folder, or there is no folder selected."); hasError = true; } } else if (outlookFolderType != OlItemType.olAppointmentItem && outlookFolderType != OlItemType.olTaskItem) { errorMessageBuilder.AppendLine ("- The outlook folder is not a calendar or task folder, or there is no folder selected."); hasError = true; } } if (isAddressBook) { if (!result.AddressBookProperties.HasFlag (AddressBookProperties.AddressBookAccessSupported)) { errorMessageBuilder.AppendLine ("- The specified Url does not support address books."); hasError = true; } if (!result.AddressBookProperties.HasFlag (AddressBookProperties.IsWriteable)) { if (selectedSynchronizationModeRequiresWriteableServerResource) { errorMessageBuilder.AppendFormat ( "- The specified address book is not writeable. Therefore it is not possible to use the synchronization mode '{0}'.", selectedSynchronizationModeDisplayName); errorMessageBuilder.AppendLine (); hasError = true; } } if (outlookFolderType != OlItemType.olContactItem) { errorMessageBuilder.AppendLine ("- The outlook folder is not an address book, or there is no folder selected."); hasError = true; } } if (hasError) MessageBox.Show ("Connection test NOT successful:" + Environment.NewLine + errorMessageBuilder, OptionTasks.ConnectionTestCaption); else if (hasWarning) MessageBox.Show ("Connection test successful BUT:" + Environment.NewLine + errorMessageBuilder, OptionTasks.ConnectionTestCaption, MessageBoxButtons.OK, MessageBoxIcon.Warning); else MessageBox.Show ("Connection test successful.", OptionTasks.ConnectionTestCaption); }
private static async Task <HttpClient> CreateHttpClient(string username, string password, TimeSpan calDavConnectTimeout, ServerAdapterType serverAdapterType, ProxyOptions proxyOptions) { IWebProxy proxy = (proxyOptions != null) ? CreateProxy(proxyOptions) : null; switch (serverAdapterType) { case ServerAdapterType.Default: var httpClientHandler = new HttpClientHandler(); if (!string.IsNullOrEmpty(username)) { httpClientHandler.Credentials = new NetworkCredential(username, password); httpClientHandler.AllowAutoRedirect = false; } httpClientHandler.Proxy = proxy; httpClientHandler.UseProxy = (proxy != null); var httpClient = new HttpClient(httpClientHandler); httpClient.Timeout = calDavConnectTimeout; return(httpClient); case ServerAdapterType.GoogleOAuth: return(await OAuth.Google.GoogleHttpClientFactory.CreateHttpClient(username, GetProductWithVersion(), proxy)); default: throw new ArgumentOutOfRangeException("serverAdapterType"); } }
private static async System.Threading.Tasks.Task <HttpClient> CreateHttpClient(string username, SecureString password, string serverUrl, TimeSpan calDavConnectTimeout, ServerAdapterType serverAdapterType, ProxyOptions proxyOptions, bool preemptiveAuthentication, bool forceBasicAuthentication) { IWebProxy proxy = (proxyOptions != null) ? CreateProxy(proxyOptions) : null; switch (serverAdapterType) { case ServerAdapterType.WebDavHttpClientBased: var httpClientHandler = new HttpClientHandler(); if (!string.IsNullOrEmpty(username)) { var credentials = new NetworkCredential(username, password); if (forceBasicAuthentication) { var cache = new CredentialCache(); cache.Add(new Uri(new Uri(serverUrl).GetLeftPart(UriPartial.Authority)), "Basic", credentials); httpClientHandler.Credentials = cache; } else { httpClientHandler.Credentials = credentials; } httpClientHandler.AllowAutoRedirect = false; httpClientHandler.PreAuthenticate = preemptiveAuthentication; } httpClientHandler.Proxy = proxy; httpClientHandler.UseProxy = (proxy != null); var httpClient = new HttpClient(httpClientHandler); httpClient.Timeout = calDavConnectTimeout; return(httpClient); case ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth: return(await OAuth.Google.GoogleHttpClientFactory.CreateHttpClient(username, GetProductWithVersion(), proxy)); default: throw new ArgumentOutOfRangeException("serverAdapterType"); } }
private static async Task<HttpClient> CreateHttpClient (string username, string password, TimeSpan calDavConnectTimeout, ServerAdapterType serverAdapterType, ProxyOptions proxyOptions) { IWebProxy proxy = CreateProxy (proxyOptions); switch (serverAdapterType) { case ServerAdapterType.Default: var httpClientHandler = new HttpClientHandler(); if (!string.IsNullOrEmpty (username)) { httpClientHandler.Credentials = new NetworkCredential (username, password); httpClientHandler.AllowAutoRedirect = false; } httpClientHandler.Proxy = proxy; httpClientHandler.UseProxy = (proxy != null); var httpClient = new HttpClient (httpClientHandler); httpClient.Timeout = calDavConnectTimeout; return httpClient; case ServerAdapterType.GoogleOAuth: return await OAuth.Google.GoogleHttpClientFactory.CreateHttpClient (username, GetProductWithVersion(), proxy); default: throw new ArgumentOutOfRangeException ("serverAdapterType"); } }
public static CardDavDataAccess CreateCardDavDataAccess ( string calenderUrl, string username, string password, TimeSpan timeout, ServerAdapterType serverAdapterType) { var productAndVersion = GetProductAndVersion(); var cardDavDataAccess = new CardDavDataAccess ( new Uri (calenderUrl), new CardDavClient ( () => CreateHttpClient (username, password, timeout, serverAdapterType), productAndVersion.Item1, productAndVersion.Item2)); return cardDavDataAccess; }
private async Task TestGoogleConnection () { StringBuilder errorMessageBuilder = new StringBuilder (); if (!OptionTasks.ValidateGoogleEmailAddress (errorMessageBuilder, _emailAddressTextBox.Text)) { MessageBox.Show (errorMessageBuilder.ToString(), "The Email Address is invalid", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } if (UsedServerAdapterType == ServerAdapterType.GoogleTaskApi && !string.IsNullOrWhiteSpace (_calenderUrlTextBox.Text) && _calenderUrlTextBox.Text != c_googleDavBaseUrl) { var service = await OAuth.Google.GoogleHttpClientFactory.LoginToGoogleTasksService (_emailAddressTextBox.Text); try { TaskList task = await service.Tasklists.Get (_calenderUrlTextBox.Text).ExecuteAsync(); } catch (Exception) { errorMessageBuilder.AppendFormat ("The tasklist with id '{0}' is invalid.", _calenderUrlTextBox.Text); MessageBox.Show(errorMessageBuilder.ToString(), "The tasklist is invalid", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } TestResult result = new TestResult (ResourceType.TaskList, CalendarProperties.None, AddressBookProperties.None); OptionTasks.DisplayTestReport (result, false, _dependencies.SelectedSynchronizationModeDisplayName, _dependencies.OutlookFolderType, UsedServerAdapterType); return; } if (!OptionTasks.ValidateWebDavUrl (_calenderUrlTextBox.Text, errorMessageBuilder, false)) { MessageBox.Show (errorMessageBuilder.ToString(), "The CalDav/CardDav Url is invalid", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var enteredUri = new Uri (_calenderUrlTextBox.Text); var webDavClient = CreateWebDavClient (); Uri autoDiscoveredUrl; ResourceType autoDiscoveredResourceType; if (ConnectionTester.RequiresAutoDiscovery (enteredUri)) { var calDavDataAccess = new CalDavDataAccess(enteredUri, webDavClient); IReadOnlyList<Tuple<Uri, string, string>> foundCaldendars = await calDavDataAccess.GetUserCalendarsNoThrow(false); var cardDavDataAccess = new CardDavDataAccess(enteredUri, webDavClient); IReadOnlyList<Tuple<Uri, string>> foundAddressBooks = await cardDavDataAccess.GetUserAddressBooksNoThrow(true); var service = await OAuth.Google.GoogleHttpClientFactory.LoginToGoogleTasksService(_emailAddressTextBox.Text); TaskLists taskLists = await service.Tasklists.List().ExecuteAsync(); if (foundCaldendars.Count > 0 || foundAddressBooks.Count > 0 || taskLists.Items.Any()) { ResourceType initalResourceType; if (_dependencies.OutlookFolderType == OlItemType.olContactItem) { initalResourceType = ResourceType.AddressBook; } else if (_dependencies.OutlookFolderType == OlItemType.olTaskItem) { initalResourceType = ResourceType.TaskList; } else { initalResourceType = ResourceType.Calendar; } using (SelectResourceForm listCalendarsForm = new SelectResourceForm( foundCaldendars, foundAddressBooks, taskLists.Items.Select(i => Tuple.Create(i.Id, i.Title)).ToArray(), initalResourceType)) { if (listCalendarsForm.ShowDialog() == DialogResult.OK) { if (listCalendarsForm.ResourceType == ResourceType.TaskList) { autoDiscoveredUrl = null; _calenderUrlTextBox.Text = listCalendarsForm.SelectedUrl; UsedServerAdapterType = ServerAdapterType.GoogleTaskApi; } else { autoDiscoveredUrl = new Uri(enteredUri.GetLeftPart(UriPartial.Authority) + listCalendarsForm.SelectedUrl); UsedServerAdapterType = ServerAdapterType.WebDavHttpClientBasedWithGoogleOAuth; } autoDiscoveredResourceType = listCalendarsForm.ResourceType; } else { autoDiscoveredUrl = null; autoDiscoveredResourceType = ResourceType.None; } } } else { MessageBox.Show("No resources were found via autodiscovery!", OptionTasks.ConnectionTestCaption); autoDiscoveredUrl = null; autoDiscoveredResourceType = ResourceType.None; } } else { var result = await ConnectionTester.TestConnection (enteredUri, webDavClient, ResourceType.None); if (result.ResourceType != ResourceType.None) { _settingsFaultFinder.FixSynchronizationMode (result); } OptionTasks.DisplayTestReport ( result, _dependencies.SelectedSynchronizationModeRequiresWriteableServerResource, _dependencies.SelectedSynchronizationModeDisplayName, _dependencies.OutlookFolderType, UsedServerAdapterType); return; } if (autoDiscoveredUrl != null) { _calenderUrlTextBox.Text = autoDiscoveredUrl.ToString(); var finalResult = await ConnectionTester.TestConnection(autoDiscoveredUrl, webDavClient, autoDiscoveredResourceType); _settingsFaultFinder.FixSynchronizationMode(finalResult); OptionTasks.DisplayTestReport( finalResult, _dependencies.SelectedSynchronizationModeRequiresWriteableServerResource, _dependencies.SelectedSynchronizationModeDisplayName, _dependencies.OutlookFolderType, UsedServerAdapterType); } else if (UsedServerAdapterType == ServerAdapterType.GoogleTaskApi) { TestResult result = new TestResult(ResourceType.TaskList, CalendarProperties.None, AddressBookProperties.None); OptionTasks.DisplayTestReport (result,false,_dependencies.SelectedSynchronizationModeDisplayName, _dependencies.OutlookFolderType, UsedServerAdapterType); } }
public void SetOptions (Contracts.Options value) { _emailAddressTextBox.Text = value.EmailAddress; if (!string.IsNullOrEmpty (value.CalenderUrl)) _calenderUrlTextBox.Text = value.CalenderUrl; else _calenderUrlTextBox.Text = c_googleDavBaseUrl; UsedServerAdapterType = value.ServerAdapterType; }
private static async Task<HttpClient> CreateHttpClient (string username, string password, TimeSpan calDavConnectTimeout, ServerAdapterType serverAdapterType) { switch (serverAdapterType) { case ServerAdapterType.Default: var httpClientHandler = new HttpClientHandler(); if (!string.IsNullOrEmpty (username)) { httpClientHandler.Credentials = new NetworkCredential (username, password); } var httpClient = new HttpClient (httpClientHandler); httpClient.Timeout = calDavConnectTimeout; return httpClient; case ServerAdapterType.GoogleOAuth: return await OAuth.Google.GoogleHttpClientFactory.CreateHttpClient (username, GetProductWithVersion()); default: throw new ArgumentOutOfRangeException ("serverAdapterType"); } }