source: trunk/CrypPlugins/P2PEditor/GUI/Controls/GetNewCertificate.xaml.cs @ 2278

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

some style changes
request button disabled while request is running

File size: 9.2 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            if (!Verification.IsValidAvatar(this.UsernameField.Text))
29            {
30                System.Windows.MessageBox.Show("Username is not valid.", "Username is not valid");               
31                this.UsernameField.Focus();
32                this.UsernameField.SelectAll();
33                return;
34            }
35
36            if (!Verification.IsValidEmailAddress(this.EmailField.Text))
37            {
38                System.Windows.MessageBox.Show("Email is not valid.", "Email is not valid");
39                this.EmailField.Focus();
40                this.EmailField.SelectAll();
41                return;
42            }
43           
44            if (this.PasswordField.Password != this.ConfirmField.Password)
45            {
46                System.Windows.MessageBox.Show("Passwords did not match", "Passwords did not match");
47                this.PasswordField.Password = "";
48                this.ConfirmField.Password = "";
49                this.PasswordField.Focus();
50                return;
51            }   
52
53            if (!Verification.IsValidPassword(this.PasswordField.Password))
54            {
55                System.Windows.MessageBox.Show("Password is not valid.", "Password is not valid");
56                this.PasswordField.Password = "";
57                this.ConfirmField.Password = "";
58                this.PasswordField.Focus();
59                return;
60            }
61           
62            Requesting = true;
63            Thread thread = new Thread(new ParameterizedThreadStart(RetrieveCertificate));
64            object[] array = new object[3];
65            array[0] = this.UsernameField.Text;
66            array[1] = this.EmailField.Text;
67            array[2] = this.PasswordField.Password;
68            thread.Start(array);
69        }
70
71        public void RetrieveCertificate(object o)
72        {
73            object[] array = (object[])o;
74            string username = (string)array[0];
75            string email = (string)array[1];
76            string password = (string)array[2];
77
78            try
79            {
80                CertificateClient certificateClient = new CertificateClient();
81                certificateClient.CertificateAuthorizationDenied += new EventHandler<EventArgs>(delegate
82                {
83                    System.Windows.MessageBox.Show("Certificate authorization denied", "Certificate authorization denied");
84                });
85
86                certificateClient.CertificateAuthorizationRequired += new EventHandler<EventArgs>(delegate
87                {
88                    System.Windows.MessageBox.Show("Certificate authorization required", "Certificate authorization required");
89                });
90
91                certificateClient.CertificateNotYetAuthorized += new EventHandler<EventArgs>(delegate
92                {
93                    System.Windows.MessageBox.Show("Certificate not yet authorized", "Certificate not yet authorized");
94                });
95
96                certificateClient.CertificateReceived += CertificateReceived;
97
98                certificateClient.InvalidCertificateRequest += InvalidCertificateRequest;
99
100                certificateClient.InvalidEmailCheck += new EventHandler<InvalidRequestEventArgs>(delegate
101                {
102                    System.Windows.MessageBox.Show("Invalid email address", "Invalid email address");
103                });
104
105                certificateClient.ServerErrorOccurred += new EventHandler<EventArgs>(delegate
106                {
107                    System.Windows.MessageBox.Show("Server error occurred. Please try again later", "Server error occurred");
108                });
109
110                certificateClient.NewProtocolVersion += new EventHandler<EventArgs>(delegate
111                {
112                    System.Windows.MessageBox.Show("The protocol of the certificate server is different from the clients one. Please update.", "Protocol mismatch");
113                });
114
115                certificateClient.RequestCertificate(username,
116                                                     email,
117                                                     WorldName,
118                                                     password);
119            }
120            catch (NetworkException nex)
121            {
122                System.Windows.MessageBox.Show("There was a communication problem with the server: " + nex.Message + "\n" + "Please try again later"  , "Communication problem");
123            }
124            catch (Exception ex)
125            {
126                System.Windows.MessageBox.Show("An exception occured: " + ex.Message, "Exception occured");
127            }
128            finally
129            {
130                Requesting = false;               
131            }
132        }
133
134        public void InvalidCertificateRequest(object sender, InvalidRequestEventArgs args)
135        {
136            try
137            {
138                switch (args.ErrorType)
139                {
140                    case RespondType.AvatarAlreadyExists:
141                        System.Windows.MessageBox.Show("The username already exists. Please chose another one.", "Username already exists");
142                        break;
143                    case RespondType.EmailAlreadyExists:
144                        System.Windows.MessageBox.Show("The email already exists. Please chose another ones.", "Email already exists");
145                        break;
146                    case RespondType.AvatarEmailAlreadyExists:
147                        System.Windows.MessageBox.Show("The username and email already exist but the entered password was wrong. Either enter a new username and email combination or enter the correct password to receive the certificate again", "Username and email already exist");
148                        break;
149                    default:
150                        System.Windows.MessageBox.Show("Invalid certificate request: " + args.ErrorType, "Invalid certificate request");
151                        break;
152                }
153            }
154            catch (Exception) 
155            { 
156            }
157            finally
158            {
159                Requesting = false;
160            } 
161        }
162
163        public void CertificateReceived(object sender, CertificateReceivedEventArgs args)
164        {
165            try
166            {
167                args.Certificate.SaveCrtToAppData();
168                args.Certificate.SavePkcs12ToAppData(args.Certificate.Password);
169                System.Windows.MessageBox.Show("Certificate received and stored.", "Certificate received and stored");
170                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
171                {
172                    this.UsernameField.Text = "";
173                    this.EmailField.Text = "";
174                    this.PasswordField.Password = "";
175                    this.ConfirmField.Password = "";
176                }, null);
177            }
178            catch (Exception ex)
179            {
180                System.Windows.MessageBox.Show("Could not save the received certificate to your AppData folder:\n\n" +
181                       (ex.GetBaseException() != null && ex.GetBaseException().Message != null ? ex.GetBaseException().Message : ex.Message),
182                       "Error while saving the certificate");
183            }
184            finally
185            {
186                Requesting = false;
187            }
188        }
189
190        private bool requesting = false;
191        public bool Requesting
192        {
193            get { return requesting; }
194            set
195            {
196                requesting = value;
197                try
198                {
199                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
200                    {
201                        Storyboard storyboard = (Storyboard)FindResource("AnimateWorldIcon");
202                        if (requesting)
203                        {
204                            this.RequestLabel.Visibility = System.Windows.Visibility.Visible;
205                            this.RequestButton.IsEnabled = false;
206                            storyboard.Begin();
207                        }
208                        else
209                        {
210                            this.RequestLabel.Visibility = System.Windows.Visibility.Hidden;
211                            this.RequestButton.IsEnabled = true;
212                            storyboard.Stop();
213                        }
214                    }, null);
215                }
216                catch (Exception)
217                {                   
218                }
219            }
220        }
221    }
222}
Note: See TracBrowser for help on using the repository browser.