2 using System.Collections.Generic;
3 using System.ComponentModel;
5 using System.Linq.Expressions;
6 using System.Reflection;
9 using System.Windows.Controls;
10 using System.Windows.Data;
11 using System.Windows.Documents;
12 using System.Windows.Input;
13 using System.Windows.Media;
14 using System.Windows.Media.Imaging;
15 using System.Windows.Shapes;
19 namespace Pithos.Client.WPF.Preferences
22 /// Interaction logic for LoginView.xaml
24 public partial class LoginView : Window,INotifyPropertyChanged
26 private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
38 RaisePropertyChanged(() => Uri);
42 private void RaisePropertyChanged(Expression<Func<Uri>> property)
44 if (PropertyChanged != null)
46 PropertyChanged(this, new PropertyChangedEventArgs(property.GetMemberInfo().Name));
50 public LoginView(Uri uri,string account=null)
52 InitializeComponent();
53 if (String.IsNullOrWhiteSpace(account))
54 this.Title = "Retrieve Pithos credentials";
56 this.Title = "Retrieve Pithos credentials for " + account;
58 LoginBrowser.Navigate(uri);
62 public string Token { get; set; }
63 public string Account { get; set; }
66 private void LoginBrowser_Navigating(object sender, System.Windows.Navigation.NavigatingCancelEventArgs e)
69 Log.Debug(e.ToString());
71 if (e.Uri.Scheme == "pithos")
73 Log.DebugFormat("Authentication response [{0}]",e.Uri);
75 var response = ParseResponse(e.Uri.Query);
76 Account = response["user"];
77 Token = response["token"];
78 Log.InfoFormat("Token received for [{0}]", Account);
84 private static Dictionary<string, string> ParseResponse(string request)
86 //var parts = request.Split(' ');
87 var query = request.TrimStart('?');
89 var items = query.Split('&')
90 .Select(pair => pair.Split('='))
91 .ToDictionary(arr => arr[0].ToLower(), arr => Uri.UnescapeDataString(arr[1]));
95 public event PropertyChangedEventHandler PropertyChanged;
97 private void Retry_Click(object sender, RoutedEventArgs e)
99 LoginBrowser.Navigate(Uri);
102 private void LoginBrowser_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
104 IsBusy.IsBusy = false;