source: trunk/CrypPlugins/P2PEditor/GUI/Controls/ForgotPasswordView.xaml.cs @ 2447

Last change on this file since 2447 was 2447, checked in by kopal, 11 years ago

added password reset gui

File size: 14.1 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 ForgotPasswordView
18    {
19        public static string WorldName = ".*";
20
21        public ForgotPasswordView()
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                this.MessageLabel.Content = "Username is not valid.";
32                this.MessageLabel.Visibility = Visibility.Visible;     
33                this.UsernameField.Focus();
34                this.UsernameField.SelectAll();
35                return;
36            }
37
38           
39            Requesting = true;
40            Thread thread = new Thread(new ParameterizedThreadStart(ResetPassword));
41            PasswordReset passwordReset = new PasswordReset(this.UsernameField.Text, null);
42            thread.Start(passwordReset);
43        }
44
45        public void ResetPassword(object o)
46        {
47            PasswordReset passwordReset = (PasswordReset)o;
48
49            try
50            {
51                CertificateClient certificateClient = new CertificateClient();
52                certificateClient.ProgramName = System.Reflection.Assembly.GetEntryAssembly().GetName().Name;
53                certificateClient.ProgramVersion = System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString();
54                certificateClient.InvalidPasswordReset += InvalidPasswordReset;
55                certificateClient.PasswordResetVerificationRequired += new EventHandler<EventArgs>(delegate
56                {
57                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
58                    {
59                        this.MessageLabel.Content = "Please check your email account for a password reset verification code.";
60                        this.MessageLabel.Visibility = Visibility.Visible;
61                        this.UsernameField.Text = "";
62                    }, null);
63                });
64                certificateClient.CertificateAuthorizationRequired += new EventHandler<EventArgs>(delegate
65                {
66                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
67                    {
68                        this.MessageLabel.Content = "Certificate authorization required";
69                        this.MessageLabel.Visibility = Visibility.Visible;
70                    }, null);
71                });
72
73                certificateClient.EmailVerificationRequired += new EventHandler<EventArgs>(delegate
74                {
75                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
76                    {
77                        this.MessageLabel.Content = "Registration successful. To activate your account, you need to validate your email address.\n A verification code was sent per email.";
78                        this.UsernameField.Text = "";                     
79                        this.MessageLabel.Visibility = Visibility.Visible;
80                    }, null);
81                });
82
83                certificateClient.CertificateReceived += CertificateReceived;
84
85                certificateClient.InvalidCertificateRegistration += InvalidCertificateRegistration;
86
87                certificateClient.ServerErrorOccurred += new EventHandler<ProcessingErrorEventArgs>(delegate
88                {
89                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
90                    {
91                        this.MessageLabel.Content = "Server error occurred. Please try again later";
92                        this.MessageLabel.Visibility = Visibility.Visible;
93                    }, null);
94                });
95
96                certificateClient.NewProtocolVersion += new EventHandler<EventArgs>(delegate
97                {
98                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
99                    {
100                        this.MessageLabel.Content = "New ProtocolVersion. Please update CrypTool 2.0";
101                        this.MessageLabel.Visibility = Visibility.Visible;
102                    }, null); 
103                });
104
105                certificateClient.ResetPassword(passwordReset);
106
107            }
108            catch (NetworkException nex)
109            {
110                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
111                {
112                    this.MessageLabel.Content = "There was a communication problem with the server: " + nex.Message + "\n" + "Please try again later";
113                    this.MessageLabel.Visibility = Visibility.Visible;
114                }, null);
115            }
116            catch (Exception ex)
117            {
118                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
119                {
120                    this.MessageLabel.Content = "An exception occured: " + ex.Message;
121                    this.MessageLabel.Visibility = Visibility.Visible;
122                }, null);
123            }
124            finally
125            {
126                Requesting = false;               
127            }
128        }
129
130        public void InvalidPasswordReset(object sender, ProcessingErrorEventArgs args)
131        {
132            switch (args.Type)
133            {
134                case ErrorType.CertificateNotYetAuthorized:
135                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
136                    {
137                        this.MessageLabel.Content = "Your certificate was not authorized,\nso a reset is not possible at this moment";
138                        this.MessageLabel.Visibility = Visibility.Visible;
139                    }, null);
140                    break;
141                case ErrorType.CertificateRevoked:
142                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
143                    {
144                        this.MessageLabel.Content = "Your certificate was revoked.\nYou can not reset it";
145                        this.MessageLabel.Visibility = Visibility.Visible;
146                    }, null);
147                    break;
148                case ErrorType.DeserializationFailed:
149                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
150                    {
151                        this.MessageLabel.Content = "Deserialization of communication packet on the server side failed.\nPlease try again.";
152                        this.MessageLabel.Visibility = Visibility.Visible;
153                    }, null);
154                    break;
155                case ErrorType.NoCertificateFound:
156                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
157                    {
158                        this.MessageLabel.Content = "The username does not exist";
159                        this.MessageLabel.Visibility = Visibility.Visible;
160                    }, null);
161                    break;
162                case ErrorType.SmtpServerDown:
163                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
164                    {
165                        this.MessageLabel.Content = "Our email server is currently offline.\nPlease try again later.";
166                        this.MessageLabel.Visibility = Visibility.Visible;
167                    }, null);
168                    break;
169                default:
170                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
171                    {
172                        this.MessageLabel.Content = "We had an error: " + args.Message;
173                        this.MessageLabel.Visibility = Visibility.Visible;
174                    }, null);
175                    break;
176            }
177        }
178
179        public void InvalidCertificateRegistration(object sender, ProcessingErrorEventArgs args)
180        {
181            try
182            {
183                switch (args.Type)
184                {
185                    case ErrorType.AvatarAlreadyExists:
186                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
187                        {
188                            this.MessageLabel.Content = "The username already exists. Please choose another one.";
189                            this.MessageLabel.Visibility = Visibility.Visible;
190                        }, null);
191                        break;
192                    case ErrorType.EmailAlreadyExists:
193                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
194                        {
195                            this.MessageLabel.Content = "The email already exists. Please choose another one.";
196                            this.MessageLabel.Visibility = Visibility.Visible;
197                        }, null);
198                        break;
199                    case ErrorType.WrongPassword:
200                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
201                        {
202                            this.MessageLabel.Content = "The username and email already exist but the entered password was wrong.";
203                            this.MessageLabel.Visibility = Visibility.Visible;
204                        }, null);
205                        break;
206                    default:
207                        this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
208                        {
209                            this.MessageLabel.Content = "Invalid registration: " + args.Type;
210                            this.MessageLabel.Visibility = Visibility.Visible;
211                        }, null);
212                        break;
213                }
214            }
215            catch (Exception) 
216            { 
217            }
218            finally
219            {
220                Requesting = false;
221            } 
222        }
223
224        public void CertificateReceived(object sender, CertificateReceivedEventArgs args)
225        {
226            try
227            {
228                String path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "PeersAtPlay" + Path.DirectorySeparatorChar + "Certificates" + Path.DirectorySeparatorChar);
229                try
230                {
231                    if (!Directory.Exists(path))
232                    {
233                        Directory.CreateDirectory(path);
234                    }
235                }
236                catch (Exception ex)
237                {
238                    this.MessageLabel.Content = "Cannot create default account data directory '" + path + "':\n" + ex.Message;
239                    this.MessageLabel.Visibility = Visibility.Visible;
240                    return;
241                }
242                args.Certificate.SaveCrtToAppData();
243                args.Certificate.SavePkcs12ToAppData(args.Certificate.Password);               
244                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
245                {                   
246                    ((P2PEditorPresentation)((P2PEditor)GetValue(P2PEditorProperty)).Presentation).Connect.Username.Text = this.UsernameField.Text;
247                    this.UsernameField.Text = "";                 
248                    this.RequestPage.Visibility = System.Windows.Visibility.Hidden;
249                }, null);               
250            }
251            catch (Exception ex)
252            {
253                 this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
254                        {
255                            this.MessageLabel.Content = "Could not save the received certificate to your AppData folder:\n\n" +
256                                (ex.GetBaseException() != null && ex.GetBaseException().Message != null ? ex.GetBaseException().Message : ex.Message);
257                            this.MessageLabel.Visibility = Visibility.Visible;
258                        }, null);
259            }
260            finally
261            {
262                Requesting = false;
263            }
264        }
265
266        private bool requesting = false;
267        public bool Requesting
268        {
269            get { return requesting; }
270            set
271            {
272                requesting = value;
273                try
274                {
275                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
276                    {
277                        Storyboard storyboard = (Storyboard)FindResource("AnimateWorldIcon");
278                        if (requesting)
279                        {
280                            this.RequestLabel.Visibility = System.Windows.Visibility.Visible;
281                            storyboard.Begin();
282                        }
283                        else
284                        {
285                            this.RequestLabel.Visibility = System.Windows.Visibility.Hidden;
286                            storyboard.Stop();
287                        }
288                    }, null);
289                }
290                catch (Exception)
291                {                   
292                }
293            }
294        }
295
296        private void BackButton_Click(object sender, RoutedEventArgs e)
297        {
298            this.P2PEditorPresentation.ShowConnectView();
299        }
300
301        private void OKButton_Click(object sender, RoutedEventArgs e)
302        {
303            this.RequestPage.Visibility = Visibility.Visible;
304            this.P2PEditorPresentation.ShowConnectView();
305        }
306
307        private void ActivateButton_Click(object sender, RoutedEventArgs e)
308        {
309           
310        }
311    }
312}
Note: See TracBrowser for help on using the repository browser.