source: trunk/CrypPlugins/P2PEditor/GUI/Controls/GetNewCertificateView.xaml.cs @ 2413

Last change on this file since 2413 was 2413, checked in by kopal, 11 years ago
  • WebDHT is now the default setting of p2p connection
  • if certificates path does not exist, p2p editor tries to create it now
File size: 13.4 KB
RevLine 
[2344]1using System;
2using System.ComponentModel;
3using System.IO;
4using System.Windows;
5using System.Windows.Forms;
6using Cryptool.P2PEditor.Distributed;
7using Cryptool.P2PEditor.Worker;
8using Cryptool.PluginBase;
9using PeersAtPlay.CertificateLibrary.Network;
10using System.Threading;
11using PeersAtPlay.CertificateLibrary.Util;
12using System.Windows.Threading;
13using System.Windows.Media.Animation;
14
15namespace Cryptool.P2PEditor.GUI.Controls
16{
17    public partial class GetNewCertificate
18    {
19        public static string WorldName = ".*";
20
21        public GetNewCertificate()
22        {
[2378]23            InitializeComponent();           
[2344]24        }
25
26        private void Request_Click(object sender, RoutedEventArgs e)
27        {
[2378]28            this.MessageLabel.Visibility = Visibility.Hidden;
[2344]29            if (!Verification.IsValidAvatar(this.UsernameField.Text))
30            {
[2378]31
32                this.MessageLabel.Content = "Username is not valid.";
33                this.MessageLabel.Visibility = Visibility.Visible;     
[2344]34                this.UsernameField.Focus();
35                this.UsernameField.SelectAll();
36                return;
37            }
38
39            if (!Verification.IsValidEmailAddress(this.EmailField.Text))
40            {
[2378]41                this.MessageLabel.Content = "Email is not valid.";
42                this.MessageLabel.Visibility = Visibility.Visible; 
[2344]43                this.EmailField.Focus();
44                this.EmailField.SelectAll();
45                return;
46            }
47           
48            if (this.PasswordField.Password != this.ConfirmField.Password)
49            {
[2378]50                this.MessageLabel.Content = "Passwords did not match.";
51                this.MessageLabel.Visibility = Visibility.Visible;
[2344]52                this.PasswordField.Password = "";
53                this.ConfirmField.Password = "";
54                this.PasswordField.Focus();
55                return;
56            }   
57
58            if (!Verification.IsValidPassword(this.PasswordField.Password))
59            {
[2378]60                this.MessageLabel.Content = "Password is not valid.";
61                this.MessageLabel.Visibility = Visibility.Visible;
[2344]62                this.PasswordField.Password = "";
63                this.ConfirmField.Password = "";
64                this.PasswordField.Focus();
65                return;
66            }
67           
68            Requesting = true;
69            Thread thread = new Thread(new ParameterizedThreadStart(RetrieveCertificate));
[2399]70            CertificateRegistration certReg = new CertificateRegistration(this.UsernameField.Text,
71                                                     this.EmailField.Text,
72                                                     WorldName,
73                                                     this.PasswordField.Password);
74            thread.Start(certReg);
[2344]75        }
76
77        public void RetrieveCertificate(object o)
78        {
[2399]79            CertificateRegistration certReg = (CertificateRegistration)o;
[2344]80
81            try
82            {
83                CertificateClient certificateClient = new CertificateClient();
[2399]84                certificateClient.ProgramName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
85                certificateClient.ProgramVersion = System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString();
[2344]86
87                certificateClient.CertificateAuthorizationRequired += new EventHandler<EventArgs>(delegate
88                {
[2378]89                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
90                    {
91                        this.MessageLabel.Content = "Certificate authorization required";
92                        this.MessageLabel.Visibility = Visibility.Visible;
[2399]93                    }, null);
[2344]94                });
95
[2399]96                certificateClient.EmailVerificationRequired += new EventHandler<EventArgs>(delegate
[2344]97                {
[2378]98                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
99                    {
[2408]100                        this.MessageLabel.Content = "Registration successful. To activate your account, you need to validate your email address.\n A verification code was sent per email.";
101                        this.UsernameField.Text = "";
102                        this.EmailField.Text = "";
103                        this.PasswordField.Password = "";
104                        this.ConfirmField.Password = "";
[2378]105                        this.MessageLabel.Visibility = Visibility.Visible;
[2399]106                    }, null);
[2344]107                });
108
109                certificateClient.CertificateReceived += CertificateReceived;
110
[2399]111                certificateClient.InvalidCertificateRegistration += InvalidCertificateRegistration;
[2344]112
[2399]113                certificateClient.ServerErrorOccurred += new EventHandler<ProcessingErrorEventArgs>(delegate
[2344]114                {
[2378]115                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
116                    {
117                        this.MessageLabel.Content = "Server error occurred. Please try again later";
118                        this.MessageLabel.Visibility = Visibility.Visible;
[2399]119                    }, null);
[2344]120                });
121
122                certificateClient.NewProtocolVersion += new EventHandler<EventArgs>(delegate
123                {
[2378]124                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
125                    {
126                        this.MessageLabel.Content = "New ProtocolVersion. Please update CrypTool 2.0";
127                        this.MessageLabel.Visibility = Visibility.Visible;
128                    }, null); 
[2344]129                });
130
[2399]131                certificateClient.RegisterCertificate(certReg);
132
[2344]133            }
134            catch (NetworkException nex)
135            {
[2378]136                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
137                {
138                    this.MessageLabel.Content = "There was a communication problem with the server: " + nex.Message + "\n" + "Please try again later";
139                    this.MessageLabel.Visibility = Visibility.Visible;
140                }, null);
[2344]141            }
142            catch (Exception ex)
143            {
[2378]144                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
145                {
146                    this.MessageLabel.Content = "An exception occured: " + ex.Message;
147                    this.MessageLabel.Visibility = Visibility.Visible;
148                }, null);
[2344]149            }
150            finally
151            {
152                Requesting = false;               
153            }
154        }
155
[2399]156        public void InvalidCertificateRegistration(object sender, ProcessingErrorEventArgs args)
[2344]157        {
158            try
159            {
[2399]160                switch (args.Type)
[2344]161                {
[2399]162                    case ErrorType.AvatarAlreadyExists:
[2378]163                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
164                        {
[2379]165                            this.MessageLabel.Content = "The username already exists. Please choose another one.";
[2378]166                            this.MessageLabel.Visibility = Visibility.Visible;
167                        }, null);
[2344]168                        break;
[2399]169                    case ErrorType.EmailAlreadyExists:
[2378]170                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
171                        {
[2379]172                            this.MessageLabel.Content = "The email already exists. Please choose another one.";
[2378]173                            this.MessageLabel.Visibility = Visibility.Visible;
174                        }, null);
[2344]175                        break;
[2399]176                    case ErrorType.WrongPassword:
[2344]177                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
[2378]178                        {
179                            this.MessageLabel.Content = "The username and email already exist but the entered password was wrong.";
180                            this.MessageLabel.Visibility = Visibility.Visible;
181                        }, null);
182                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
[2344]183                        {                           ;
184                            this.PasswordField.Password = "";
185                            this.ConfirmField.Password = "";
186                            this.PasswordField.Focus();
187                        }, null);       
188                        break;
189                    default:
[2378]190                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
191                        {
[2399]192                            this.MessageLabel.Content = "Invalid registration: " + args.Type;
[2378]193                            this.MessageLabel.Visibility = Visibility.Visible;
194                        }, null);
[2344]195                        break;
196                }
197            }
198            catch (Exception) 
199            { 
200            }
201            finally
202            {
203                Requesting = false;
204            } 
205        }
206
207        public void CertificateReceived(object sender, CertificateReceivedEventArgs args)
208        {
209            try
210            {
[2413]211                String path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "PeersAtPlay" + Path.DirectorySeparatorChar + "Certificates" + Path.DirectorySeparatorChar);
212                try
213                {
214                    if (!Directory.Exists(path))
215                    {
216                        Directory.CreateDirectory(path);
217                    }
218                }
219                catch (Exception ex)
220                {
221                    this.MessageLabel.Content = "Cannot create default account data directory '" + path + "':\n" + ex.Message;
222                    this.MessageLabel.Visibility = Visibility.Visible;
223                    return;
224                }
[2344]225                args.Certificate.SaveCrtToAppData();
[2347]226                args.Certificate.SavePkcs12ToAppData(args.Certificate.Password);               
[2344]227                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
[2347]228                {                   
[2344]229                    ((P2PEditorPresentation)((P2PEditor)GetValue(P2PEditorProperty)).Presentation).Connect.Username.Text = this.UsernameField.Text;
230                    ((P2PEditorPresentation)((P2PEditor)GetValue(P2PEditorProperty)).Presentation).Connect.Password.Password = this.PasswordField.Password;
231                    this.UsernameField.Text = "";
232                    this.EmailField.Text = "";
233                    this.PasswordField.Password = "";
[2347]234                    this.ConfirmField.Password = "";
235                    this.RequestPage.Visibility = System.Windows.Visibility.Hidden;
236                    this.OKPage.Visibility = System.Windows.Visibility.Visible;
[2344]237                }, null);               
238            }
239            catch (Exception ex)
240            {
[2378]241                 this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
242                        {
243                            this.MessageLabel.Content = "Could not save the received certificate to your AppData folder:\n\n" +
244                                (ex.GetBaseException() != null && ex.GetBaseException().Message != null ? ex.GetBaseException().Message : ex.Message);
245                            this.MessageLabel.Visibility = Visibility.Visible;
246                        }, null);
[2344]247            }
248            finally
249            {
250                Requesting = false;
251            }
252        }
253
254        private bool requesting = false;
255        public bool Requesting
256        {
257            get { return requesting; }
258            set
259            {
260                requesting = value;
261                try
262                {
263                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
264                    {
265                        Storyboard storyboard = (Storyboard)FindResource("AnimateWorldIcon");
266                        if (requesting)
267                        {
268                            this.RequestLabel.Visibility = System.Windows.Visibility.Visible;
269                            this.RequestButton.IsEnabled = false;
270                            storyboard.Begin();
271                        }
272                        else
273                        {
274                            this.RequestLabel.Visibility = System.Windows.Visibility.Hidden;
275                            this.RequestButton.IsEnabled = true;
276                            storyboard.Stop();
277                        }
278                    }, null);
279                }
280                catch (Exception)
281                {                   
282                }
283            }
284        }
285
286        private void BackButton_Click(object sender, RoutedEventArgs e)
287        {
288            this.P2PEditorPresentation.ShowConnectView();
289        }
[2347]290
291        private void OKButton_Click(object sender, RoutedEventArgs e)
292        {
293            this.RequestPage.Visibility = Visibility.Visible;
294            this.OKPage.Visibility = Visibility.Hidden;
295            this.P2PEditorPresentation.ShowConnectView();
296        }
[2390]297
298        private void ActivateButton_Click(object sender, RoutedEventArgs e)
299        {
300            this.P2PEditorPresentation.ShowActivateEmailView();
301        }
[2344]302    }
303}
Note: See TracBrowser for help on using the repository browser.