summaryrefslogtreecommitdiffstats
path: root/samples/ConsumerWpf/MainWindow.xaml.cs
blob: e1a4b6b9fb1ac85791435c6f46b49b05473a5058 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
namespace DotNetOAuth.Samples.ConsumerWpf {
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;
	using System.Windows;
	using System.Windows.Controls;
	using System.Windows.Data;
	using System.Windows.Documents;
	using System.Windows.Input;
	using System.Windows.Media;
	using System.Windows.Media.Imaging;
	using System.Windows.Navigation;
	using System.Windows.Shapes;
	using System.Xml.Linq;
	using DotNetOAuth;
	using DotNetOAuth.ChannelElements;
	using DotNetOAuth.Messaging;

	/// <summary>
	/// Interaction logic for MainWindow.xaml
	/// </summary>
	public partial class MainWindow : Window {
		private InMemoryTokenManager tokenManager = new InMemoryTokenManager();
		private DesktopConsumer google;
		private string requestToken;

		public MainWindow() {
			InitializeComponent();

			this.google = new DesktopConsumer(Constants.GoogleDescription, this.tokenManager);
		}

		private void beginAuthorizationButton_Click(object sender, RoutedEventArgs e) {
			this.tokenManager.ConsumerKey = consumerKeyBox.Text;
			this.tokenManager.ConsumerSecret = consumerSecretBox.Text;
			this.google.ConsumerKey = consumerKeyBox.Text;

			var extraParameters = new Dictionary<string, string> {
				{ "scope", Constants.GoogleScopes.Contacts },
			};
			Uri browserAuthorizationLocation = this.google.RequestUserAuthorization(extraParameters, null, out this.requestToken);
			System.Diagnostics.Process.Start(browserAuthorizationLocation.AbsoluteUri);
		}

		private void completeAuthorizationButton_Click(object sender, RoutedEventArgs e) {
			var grantedAccess = this.google.ProcessUserAuthorization(this.requestToken);
			Response contactsResponse = this.google.PrepareAuthorizedRequestAndSend(Constants.GoogleScopes.GetContacts, grantedAccess.AccessToken);
			XDocument contactsDocument = XDocument.Parse(contactsResponse.Body);
			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,
								};
			contactsGrid.Children.Clear();
			foreach (var contact in contacts) {
				contactsGrid.RowDefinitions.Add(new RowDefinition());
				TextBlock name = new TextBlock { Text = contact.Name };
				TextBlock email = new TextBlock { Text = contact.Email };
				Grid.SetRow(name, contactsGrid.RowDefinitions.Count - 1);
				Grid.SetRow(email, contactsGrid.RowDefinitions.Count - 1);
				Grid.SetColumn(email, 1);
				contactsGrid.Children.Add(name);
				contactsGrid.Children.Add(email);
			}
		}
	}
}