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

Last change on this file since 2408 was 2408, checked in by kopal, 11 years ago
  • added auto download of certificate data
  • increased space in gui for messages / error messages
File size: 12.7 KB
Line 
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        {
23            InitializeComponent();           
24        }
25
26        private void Request_Click(object sender, RoutedEventArgs e)
27        {
28            this.MessageLabel.Visibility = Visibility.Hidden;
29            if (!Verification.IsValidAvatar(this.UsernameField.Text))
30            {
31
32                this.MessageLabel.Content = "Username is not valid.";
33                this.MessageLabel.Visibility = Visibility.Visible;     
34                this.UsernameField.Focus();
35                this.UsernameField.SelectAll();
36                return;
37            }
38
39            if (!Verification.IsValidEmailAddress(this.EmailField.Text))
40            {
41                this.MessageLabel.Content = "Email is not valid.";
42                this.MessageLabel.Visibility = Visibility.Visible; 
43                this.EmailField.Focus();
44                this.EmailField.SelectAll();
45                return;
46            }
47           
48            if (this.PasswordField.Password != this.ConfirmField.Password)
49            {
50                this.MessageLabel.Content = "Passwords did not match.";
51                this.MessageLabel.Visibility = Visibility.Visible;
52                this.PasswordField.Password = "";
53                this.ConfirmField.Password = "";
54                this.PasswordField.Focus();
55                return;
56            }   
57
58            if (!Verification.IsValidPassword(this.PasswordField.Password))
59            {
60                this.MessageLabel.Content = "Password is not valid.";
61                this.MessageLabel.Visibility = Visibility.Visible;
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));
70            CertificateRegistration certReg = new CertificateRegistration(this.UsernameField.Text,
71                                                     this.EmailField.Text,
72                                                     WorldName,
73                                                     this.PasswordField.Password);
74            thread.Start(certReg);
75        }
76
77        public void RetrieveCertificate(object o)
78        {
79            CertificateRegistration certReg = (CertificateRegistration)o;
80
81            try
82            {
83                CertificateClient certificateClient = new CertificateClient();
84                certificateClient.ProgramName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
85                certificateClient.ProgramVersion = System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString();
86
87                certificateClient.CertificateAuthorizationRequired += new EventHandler<EventArgs>(delegate
88                {
89                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
90                    {
91                        this.MessageLabel.Content = "Certificate authorization required";
92                        this.MessageLabel.Visibility = Visibility.Visible;
93                    }, null);
94                });
95
96                certificateClient.EmailVerificationRequired += new EventHandler<EventArgs>(delegate
97                {
98                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
99                    {
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 = "";
105                        this.MessageLabel.Visibility = Visibility.Visible;
106                    }, null);
107                });
108
109                certificateClient.CertificateReceived += CertificateReceived;
110
111                certificateClient.InvalidCertificateRegistration += InvalidCertificateRegistration;
112
113                certificateClient.ServerErrorOccurred += new EventHandler<ProcessingErrorEventArgs>(delegate
114                {
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;
119                    }, null);
120                });
121
122                certificateClient.NewProtocolVersion += new EventHandler<EventArgs>(delegate
123                {
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); 
129                });
130
131                certificateClient.RegisterCertificate(certReg);
132
133            }
134            catch (NetworkException nex)
135            {
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);
141            }
142            catch (Exception ex)
143            {
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);
149            }
150            finally
151            {
152                Requesting = false;               
153            }
154        }
155
156        public void InvalidCertificateRegistration(object sender, ProcessingErrorEventArgs args)
157        {
158            try
159            {
160                switch (args.Type)
161                {
162                    case ErrorType.AvatarAlreadyExists:
163                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
164                        {
165                            this.MessageLabel.Content = "The username already exists. Please choose another one.";
166                            this.MessageLabel.Visibility = Visibility.Visible;
167                        }, null);
168                        break;
169                    case ErrorType.EmailAlreadyExists:
170                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
171                        {
172                            this.MessageLabel.Content = "The email already exists. Please choose another one.";
173                            this.MessageLabel.Visibility = Visibility.Visible;
174                        }, null);
175                        break;
176                    case ErrorType.WrongPassword:
177                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
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
183                        {                           ;
184                            this.PasswordField.Password = "";
185                            this.ConfirmField.Password = "";
186                            this.PasswordField.Focus();
187                        }, null);       
188                        break;
189                    default:
190                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
191                        {
192                            this.MessageLabel.Content = "Invalid registration: " + args.Type;
193                            this.MessageLabel.Visibility = Visibility.Visible;
194                        }, null);
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            {
211                args.Certificate.SaveCrtToAppData();
212                args.Certificate.SavePkcs12ToAppData(args.Certificate.Password);               
213                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
214                {                   
215                    ((P2PEditorPresentation)((P2PEditor)GetValue(P2PEditorProperty)).Presentation).Connect.Username.Text = this.UsernameField.Text;
216                    ((P2PEditorPresentation)((P2PEditor)GetValue(P2PEditorProperty)).Presentation).Connect.Password.Password = this.PasswordField.Password;
217                    this.UsernameField.Text = "";
218                    this.EmailField.Text = "";
219                    this.PasswordField.Password = "";
220                    this.ConfirmField.Password = "";
221                    this.RequestPage.Visibility = System.Windows.Visibility.Hidden;
222                    this.OKPage.Visibility = System.Windows.Visibility.Visible;
223                }, null);               
224            }
225            catch (Exception ex)
226            {
227                 this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
228                        {
229                            this.MessageLabel.Content = "Could not save the received certificate to your AppData folder:\n\n" +
230                                (ex.GetBaseException() != null && ex.GetBaseException().Message != null ? ex.GetBaseException().Message : ex.Message);
231                            this.MessageLabel.Visibility = Visibility.Visible;
232                        }, null);
233            }
234            finally
235            {
236                Requesting = false;
237            }
238        }
239
240        private bool requesting = false;
241        public bool Requesting
242        {
243            get { return requesting; }
244            set
245            {
246                requesting = value;
247                try
248                {
249                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
250                    {
251                        Storyboard storyboard = (Storyboard)FindResource("AnimateWorldIcon");
252                        if (requesting)
253                        {
254                            this.RequestLabel.Visibility = System.Windows.Visibility.Visible;
255                            this.RequestButton.IsEnabled = false;
256                            storyboard.Begin();
257                        }
258                        else
259                        {
260                            this.RequestLabel.Visibility = System.Windows.Visibility.Hidden;
261                            this.RequestButton.IsEnabled = true;
262                            storyboard.Stop();
263                        }
264                    }, null);
265                }
266                catch (Exception)
267                {                   
268                }
269            }
270        }
271
272        private void BackButton_Click(object sender, RoutedEventArgs e)
273        {
274            this.P2PEditorPresentation.ShowConnectView();
275        }
276
277        private void OKButton_Click(object sender, RoutedEventArgs e)
278        {
279            this.RequestPage.Visibility = Visibility.Visible;
280            this.OKPage.Visibility = Visibility.Hidden;
281            this.P2PEditorPresentation.ShowConnectView();
282        }
283
284        private void ActivateButton_Click(object sender, RoutedEventArgs e)
285        {
286            this.P2PEditorPresentation.ShowActivateEmailView();
287        }
288    }
289}
Note: See TracBrowser for help on using the repository browser.