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

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

the request progress is now visible by an animation

File size: 8.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            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            WorldIconRotating = 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 (Exception ex)
121            {
122                System.Windows.MessageBox.Show("An exception occured: " + ex.Message, "Exception occured");
123            }
124            finally
125            {
126                WorldIconRotating = false;
127            }
128        }
129
130        public void InvalidCertificateRequest(object sender, InvalidRequestEventArgs args)
131        {
132            try
133            {
134                switch (args.ErrorType)
135                {
136                    case RespondType.AvatarAlreadyExists:
137                        System.Windows.MessageBox.Show("The username already exists. Please chose another one.", "Username already exists");
138                        break;
139                    case RespondType.EmailAlreadyExists:
140                        System.Windows.MessageBox.Show("The email already exists. Please chose another ones.", "Email already exists");
141                        break;
142                    case RespondType.AvatarEmailAlreadyExists:
143                        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");
144                        break;
145                    default:
146                        System.Windows.MessageBox.Show("Invalid certificate request: " + args.ErrorType, "Invalid certificate request");
147                        break;
148                }
149            }
150            catch (Exception) 
151            { 
152            }
153            finally
154            {
155                WorldIconRotating = false;
156            } 
157        }
158
159        public void CertificateReceived(object sender, CertificateReceivedEventArgs args)
160        {
161            try
162            {
163                args.Certificate.SaveCrtToAppData();
164                args.Certificate.SavePkcs12ToAppData(args.Certificate.Password);
165                System.Windows.MessageBox.Show("Certificate received and stored.", "Certificate received and stored");
166                this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
167                {
168                    this.UsernameField.Text = "";
169                    this.EmailField.Text = "";
170                    this.PasswordField.Password = "";
171                    this.ConfirmField.Password = "";
172                }, null);
173            }
174            catch (Exception ex)
175            {
176                System.Windows.MessageBox.Show("Could not save the received certificate to your AppData folder:\n\n" +
177                       (ex.GetBaseException() != null && ex.GetBaseException().Message != null ? ex.GetBaseException().Message : ex.Message),
178                       "Error while saving the certificate");
179            }
180            finally
181            {
182                WorldIconRotating = false;
183            }
184        }
185
186        private bool worldIconRotating = false;
187        public bool WorldIconRotating
188        {
189            get { return worldIconRotating; }
190            set
191            {
192                worldIconRotating = value;
193                try
194                {
195                    this.Dispatcher.Invoke(DispatcherPriority.Normal, (SendOrPostCallback)delegate
196                    {
197                        Storyboard storyboard = (Storyboard)FindResource("AnimateWorldIcon");
198                        if (worldIconRotating)
199                        {
200                            storyboard.Begin();
201                        }
202                        else
203                        {
204                            storyboard.Stop();
205                        }
206                    }, null);
207                }
208                catch (Exception)
209                {                   
210                }
211            }
212        }
213    }
214}
Note: See TracBrowser for help on using the repository browser.