summaryrefslogtreecommitdiffstats
path: root/src/OAuth/OAuthConsumerWpf/Authorize.xaml.cs
blob: 4ed1932e4c292c926eb4afbfe3b42a8fa347b607 (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
namespace DotNetOpenAuth.Samples.OAuthConsumerWpf {
	using System;
	using System.Collections.Generic;
	using System.Linq;
	using System.Text;
	using System.Threading;
	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.Shapes;
	using System.Xml.Linq;
	using DotNetOpenAuth.ApplicationBlock;
	using DotNetOpenAuth.OAuth;

	/// <summary>
	/// Interaction logic for Authorize.xaml
	/// </summary>
	public partial class Authorize : Window {
		private DesktopConsumer consumer;
		private string requestToken;

		internal Authorize(DesktopConsumer consumer, FetchUri fetchUriCallback) {
			this.InitializeComponent();

			this.consumer = consumer;
			Cursor original = this.Cursor;
			this.Cursor = Cursors.Wait;
			ThreadPool.QueueUserWorkItem(delegate(object state) {
				Uri browserAuthorizationLocation = fetchUriCallback(this.consumer, out this.requestToken);
				System.Diagnostics.Process.Start(browserAuthorizationLocation.AbsoluteUri);
				this.Dispatcher.BeginInvoke(new Action(() => {
					this.Cursor = original;
					finishButton.IsEnabled = true;
				}));
			});
		}

		internal delegate Uri FetchUri(DesktopConsumer consumer, out string requestToken);

		internal string AccessToken { get; set; }

		private void finishButton_Click(object sender, RoutedEventArgs e) {
			var grantedAccess = this.consumer.ProcessUserAuthorization(this.requestToken, this.verifierBox.Text);
			this.AccessToken = grantedAccess.AccessToken;
			DialogResult = true;
			Close();
		}

		private void cancelButton_Click(object sender, RoutedEventArgs e) {
			DialogResult = false;
			Close();
		}
	}
}