diff options
Diffstat (limited to 'samples/OAuthConsumerWpf/MainWindow.xaml.cs')
-rw-r--r-- | samples/OAuthConsumerWpf/MainWindow.xaml.cs | 141 |
1 files changed, 56 insertions, 85 deletions
diff --git a/samples/OAuthConsumerWpf/MainWindow.xaml.cs b/samples/OAuthConsumerWpf/MainWindow.xaml.cs index 310c2c6..c813576 100644 --- a/samples/OAuthConsumerWpf/MainWindow.xaml.cs +++ b/samples/OAuthConsumerWpf/MainWindow.xaml.cs @@ -6,21 +6,21 @@ using System.IO; using System.Linq; using System.Net; + using System.Net.Http; using System.Security.Cryptography.X509Certificates; using System.ServiceModel; using System.ServiceModel.Channels; + using System.Threading; + using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Xml.Linq; - using DotNetOpenAuth.ApplicationBlock; using DotNetOpenAuth.Messaging; using DotNetOpenAuth.OAuth; using DotNetOpenAuth.OAuth.ChannelElements; using DotNetOpenAuth.Samples.OAuthConsumerWpf.WcfSampleService; - using OAuth2; - using OAuth2 = DotNetOpenAuth.OAuth2; using ProtocolVersion = DotNetOpenAuth.OAuth.ProtocolVersion; @@ -28,9 +28,8 @@ /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { - private InMemoryTokenManager googleTokenManager = new InMemoryTokenManager(); - private DesktopConsumer google; - private string googleAccessToken; + private GoogleConsumer google; + private DotNetOpenAuth.OAuth.AccessToken googleAccessToken; private UserAgentClient wcf; private IAuthorizationState wcfAccessToken; @@ -42,17 +41,12 @@ } private void InitializeGoogleConsumer() { - this.googleTokenManager.ConsumerKey = ConfigurationManager.AppSettings["googleConsumerKey"]; - this.googleTokenManager.ConsumerSecret = ConfigurationManager.AppSettings["googleConsumerSecret"]; - string pfxFile = ConfigurationManager.AppSettings["googleConsumerCertificateFile"]; - if (string.IsNullOrEmpty(pfxFile)) { - this.google = new DesktopConsumer(GoogleConsumer.ServiceDescription, this.googleTokenManager); - } else { + this.google = new GoogleConsumer(); + if (!string.IsNullOrEmpty(pfxFile)) { string pfxPassword = ConfigurationManager.AppSettings["googleConsumerCertificatePassword"]; var signingCertificate = new X509Certificate2(pfxFile, pfxPassword); - var service = GoogleConsumer.CreateRsaSha1ServiceDescription(signingCertificate); - this.google = new DesktopConsumer(service, this.googleTokenManager); + this.google.ConsumerCertificate = signingCertificate; } } @@ -64,25 +58,22 @@ this.wcf = new UserAgentClient(authServer, "sampleconsumer", "samplesecret"); } - private void beginAuthorizationButton_Click(object sender, RoutedEventArgs e) { - if (string.IsNullOrEmpty(this.googleTokenManager.ConsumerKey)) { + private async void beginAuthorizationButton_Click(object sender, RoutedEventArgs e) { + if (string.IsNullOrEmpty(this.google.ConsumerKey)) { MessageBox.Show(this, "You must modify the App.config or OAuthConsumerWpf.exe.config file for this application to include your Google OAuth consumer key first.", "Configuration required", MessageBoxButton.OK, MessageBoxImage.Stop); return; } var auth = new Authorize( this.google, - (DesktopConsumer consumer, out string requestToken) => - GoogleConsumer.RequestAuthorization( - consumer, - GoogleConsumer.Applications.Contacts | GoogleConsumer.Applications.Blogger, - out requestToken)); + consumer => + ((GoogleConsumer)consumer).RequestUserAuthorizationAsync(GoogleConsumer.Applications.Contacts | GoogleConsumer.Applications.Blogger)); bool? result = auth.ShowDialog(); if (result.HasValue && result.Value) { this.googleAccessToken = auth.AccessToken; this.postButton.IsEnabled = true; - XDocument contactsDocument = GoogleConsumer.GetContacts(this.google, this.googleAccessToken, 25, 1); + XDocument contactsDocument = await this.google.GetContactsAsync(this.googleAccessToken); var contacts = from entry in contactsDocument.Root.Elements(XName.Get("entry", "http://www.w3.org/2005/Atom")) select new { Name = entry.Element(XName.Get("title", "http://www.w3.org/2005/Atom")).Value, Email = entry.Element(XName.Get("email", "http://schemas.google.com/g/2005")).Attribute("address").Value }; this.contactsGrid.Children.Clear(); @@ -99,12 +90,12 @@ } } - private void postButton_Click(object sender, RoutedEventArgs e) { + private async void postButton_Click(object sender, RoutedEventArgs e) { XElement postBodyXml = XElement.Parse(this.postBodyBox.Text); - GoogleConsumer.PostBlogEntry(this.google, this.googleAccessToken, this.blogUrlBox.Text, this.postTitleBox.Text, postBodyXml); + await this.google.PostBlogEntryAsync(this.googleAccessToken, this.blogUrlBox.Text, this.postTitleBox.Text, postBodyXml); } - private void beginWcfAuthorizationButton_Click(object sender, RoutedEventArgs e) { + private async void beginWcfAuthorizationButton_Click(object sender, RoutedEventArgs e) { var auth = new Authorize2(this.wcf); auth.Authorization.Scope.AddRange(OAuthUtilities.SplitScopes("http://tempuri.org/IDataApi/GetName http://tempuri.org/IDataApi/GetAge http://tempuri.org/IDataApi/GetFavoriteSites")); auth.Authorization.Callback = new Uri("http://localhost:59721/"); @@ -112,20 +103,20 @@ bool? result = auth.ShowDialog(); if (result.HasValue && result.Value) { this.wcfAccessToken = auth.Authorization; - this.wcfName.Content = this.CallService(client => client.GetName()); - this.wcfAge.Content = this.CallService(client => client.GetAge()); - this.wcfFavoriteSites.Content = this.CallService(client => string.Join(", ", client.GetFavoriteSites())); + this.wcfName.Content = await this.CallServiceAsync(client => client.GetName()); + this.wcfAge.Content = await this.CallServiceAsync(client => client.GetAge()); + this.wcfFavoriteSites.Content = await this.CallServiceAsync(client => string.Join(", ", client.GetFavoriteSites())); } } - private T CallService<T>(Func<DataApiClient, T> predicate) { + private async Task<T> CallServiceAsync<T>(Func<DataApiClient, T> predicate) { DataApiClient client = new DataApiClient(); if (this.wcfAccessToken == null) { throw new InvalidOperationException("No access token!"); } var httpRequest = (HttpWebRequest)WebRequest.Create(client.Endpoint.Address.Uri); - this.wcf.AuthorizeRequest(httpRequest, this.wcfAccessToken); + await this.wcf.AuthorizeRequestAsync(httpRequest, this.wcfAccessToken, CancellationToken.None); HttpRequestMessageProperty httpDetails = new HttpRequestMessageProperty(); httpDetails.Headers[HttpRequestHeader.Authorization] = httpRequest.Headers[HttpRequestHeader.Authorization]; @@ -135,54 +126,42 @@ } } - private void beginButton_Click(object sender, RoutedEventArgs e) { + private async void beginButton_Click(object sender, RoutedEventArgs e) { try { - var service = new ServiceProviderDescription { - RequestTokenEndpoint = new MessageReceivingEndpoint(this.requestTokenUrlBox.Text, this.requestTokenHttpMethod.SelectedIndex == 0 ? HttpDeliveryMethods.GetRequest : HttpDeliveryMethods.PostRequest), - UserAuthorizationEndpoint = new MessageReceivingEndpoint(this.authorizeUrlBox.Text, HttpDeliveryMethods.GetRequest), - AccessTokenEndpoint = new MessageReceivingEndpoint(this.accessTokenUrlBox.Text, this.accessTokenHttpMethod.SelectedIndex == 0 ? HttpDeliveryMethods.GetRequest : HttpDeliveryMethods.PostRequest), - TamperProtectionElements = new ITamperProtectionChannelBindingElement[] { new HmacSha1SigningBindingElement() }, - ProtocolVersion = this.oauthVersion.SelectedIndex == 0 ? ProtocolVersion.V10 : ProtocolVersion.V10a, - }; - var tokenManager = new InMemoryTokenManager(); - tokenManager.ConsumerKey = this.consumerKeyBox.Text; - tokenManager.ConsumerSecret = this.consumerSecretBox.Text; - - var consumer = new DesktopConsumer(service, tokenManager); - string accessToken; - if (service.ProtocolVersion == ProtocolVersion.V10) { - string requestToken; - Uri authorizeUrl = consumer.RequestUserAuthorization(null, null, out requestToken); - Process.Start(authorizeUrl.AbsoluteUri); - MessageBox.Show(this, "Click OK when you've authorized the app."); - var authorizationResponse = consumer.ProcessUserAuthorization(requestToken, null); - accessToken = authorizationResponse.AccessToken; + var service = new ServiceProviderDescription( + this.requestTokenUrlBox.Text, + this.authorizeUrlBox.Text, + this.accessTokenUrlBox.Text); + + var consumer = new Consumer(this.consumerKeyBox.Text, this.consumerSecretBox.Text, service, new MemoryTemporaryCredentialStorage()); + DotNetOpenAuth.OAuth.AccessToken accessToken; + var authorizePopup = new Authorize(consumer, c => c.RequestUserAuthorizationAsync(null, null)); + authorizePopup.Owner = this; + bool? result = authorizePopup.ShowDialog(); + if (result.HasValue && result.Value) { + accessToken = authorizePopup.AccessToken; } else { - var authorizePopup = new Authorize( - consumer, - (DesktopConsumer c, out string requestToken) => c.RequestUserAuthorization(null, null, out requestToken)); - authorizePopup.Owner = this; - bool? result = authorizePopup.ShowDialog(); - if (result.HasValue && result.Value) { - accessToken = authorizePopup.AccessToken; - } else { - return; - } - } - HttpDeliveryMethods resourceHttpMethod = this.resourceHttpMethodList.SelectedIndex < 2 ? HttpDeliveryMethods.GetRequest : HttpDeliveryMethods.PostRequest; - if (this.resourceHttpMethodList.SelectedIndex == 1) { - resourceHttpMethod |= HttpDeliveryMethods.AuthorizationHeaderRequest; + return; } - var resourceEndpoint = new MessageReceivingEndpoint(this.resourceUrlBox.Text, resourceHttpMethod); - using (IncomingWebResponse resourceResponse = consumer.PrepareAuthorizedRequestAndSend(resourceEndpoint, accessToken)) { - this.resultsBox.Text = resourceResponse.GetResponseReader().ReadToEnd(); + + HttpMethod resourceHttpMethod = this.resourceHttpMethodList.SelectedIndex < 2 ? HttpMethod.Get : HttpMethod.Post; + using (var handler = consumer.CreateMessageHandler(accessToken)) { + handler.Location = this.resourceHttpMethodList.SelectedIndex == 1 + ? OAuth1HttpMessageHandlerBase.OAuthParametersLocation.AuthorizationHttpHeader + : OAuth1HttpMessageHandlerBase.OAuthParametersLocation.QueryString; + using (var httpClient = consumer.CreateHttpClient(handler)) { + var request = new HttpRequestMessage(resourceHttpMethod, this.resourceUrlBox.Text); + using (var resourceResponse = await httpClient.SendAsync(request)) { + this.resultsBox.Text = await resourceResponse.Content.ReadAsStringAsync(); + } + } } } catch (DotNetOpenAuth.Messaging.ProtocolException ex) { MessageBox.Show(this, ex.Message); } } - private void oauth2BeginButton_Click(object sender, RoutedEventArgs e) { + private async void oauth2BeginButton_Click(object sender, RoutedEventArgs e) { var authServer = new DotNetOpenAuth.OAuth2.AuthorizationServerDescription { AuthorizationEndpoint = new Uri(this.oauth2AuthorizationUrlBox.Text), }; @@ -195,27 +174,19 @@ var authorizePopup = new Authorize2(client); authorizePopup.Authorization.Scope.AddRange(OAuthUtilities.SplitScopes(this.oauth2ScopeBox.Text)); + authorizePopup.Authorization.Callback = new Uri("http://www.microsoft.com/en-us/default.aspx"); authorizePopup.Owner = this; + authorizePopup.ClientAuthorizationView.RequestImplicitGrant = this.flowBox.SelectedIndex == 1; bool? result = authorizePopup.ShowDialog(); if (result.HasValue && result.Value) { - var requestUri = new UriBuilder(this.oauth2ResourceUrlBox.Text); - if (this.oauth2ResourceHttpMethodList.SelectedIndex > 0) { - requestUri.AppendQueryArgument("access_token", authorizePopup.Authorization.AccessToken); - } - - var request = (HttpWebRequest)WebRequest.Create(requestUri.Uri); - request.Method = this.oauth2ResourceHttpMethodList.SelectedIndex < 2 ? "GET" : "POST"; - if (this.oauth2ResourceHttpMethodList.SelectedIndex == 0) { - client.AuthorizeRequest(request, authorizePopup.Authorization); - } - - using (var resourceResponse = request.GetResponse()) { - using (var responseStream = new StreamReader(resourceResponse.GetResponseStream())) { - this.oauth2ResultsBox.Text = responseStream.ReadToEnd(); + var request = new HttpRequestMessage( + new HttpMethod(((ComboBoxItem)this.oauth2ResourceHttpMethodList.SelectedValue).Content.ToString()), + this.oauth2ResourceUrlBox.Text); + using (var httpClient = new HttpClient(client.CreateAuthorizingHandler(authorizePopup.Authorization))) { + using (var resourceResponse = await httpClient.SendAsync(request)) { + this.oauth2ResultsBox.Text = await resourceResponse.Content.ReadAsStringAsync(); } } - } else { - return; } } catch (Messaging.ProtocolException ex) { MessageBox.Show(this, ex.Message); |