00001 using System;
00002 using System.Collections.Generic;
00003 using System.ComponentModel;
00004 using System.Data;
00005 using System.Drawing;
00006 using System.Text;
00007 using System.Windows.Forms;
00008 using Shared;
00009 using System.Threading;
00010
00011 namespace Client
00012 {
00016 public partial class Login : Form
00017 {
00019 private IAccessHandler accessHandler;
00021 private LocalSettings localSettings;
00023 private RMIClient client;
00024
00028 public Login()
00029 {
00030 this.localSettings = new LocalSettings();
00031 InitializeComponent();
00032
00033 this.FormBorderStyle = FormBorderStyle.FixedDialog;
00034
00035 txtUsername.Text = localSettings.Username;
00036 txtPassword.Text = localSettings.Password;
00037 chkRemember.Checked = localSettings.Username != null && localSettings.Username.Length > 0;
00038
00039 if (txtUsername.Text.Length > 0)
00040 {
00041 chkRemember.Visible = false;
00042 cmdForgetMe.Visible = true;
00043 }
00044
00045 pleaseWait.Dock = DockStyle.Fill;
00046 }
00047
00053 private void btnLogin_Click(object sender, EventArgs e)
00054 {
00055 string user = txtUsername.Text;
00056 string pass = txtPassword.Text;
00057
00058 ShowWaitScreen(true);
00059
00060 if (user.Trim().Length < 1)
00061 {
00062 MessageBox.Show("Username is required!", "Try again!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00063 ShowWaitScreen(false);
00064 return;
00065 }
00066 if (pass.Trim().Length < 1)
00067 {
00068 MessageBox.Show("Password is required!", "Try again!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00069 ShowWaitScreen(false);
00070 return;
00071 }
00072
00073 Thread thread = new Thread(new ThreadStart(delegate() {
00074
00075
00076 if (!Connect())
00077 {
00078 this.Invoke(new MethodInvoker(delegate() {
00079 ShowWaitScreen(false);
00080 }));
00081 return;
00082 }
00083
00084 Messages lm = accessHandler.Login(user, Utils.HashedValue(pass));
00085 if (lm != Messages.OK)
00086 {
00087 MessageBox.Show("Login Failed!", "Try again!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00088 this.Invoke(new MethodInvoker(delegate() {
00089 txtPassword.Text = "";
00090 txtPassword.Focus();
00091 ShowWaitScreen(false);
00092 }));
00093 return;
00094 }
00095
00096 if (chkRemember.Checked)
00097 {
00098 this.Invoke(new MethodInvoker(
00099 delegate()
00100 {
00101 localSettings.Username = txtUsername.Text;
00102 localSettings.Password = txtPassword.Text;
00103 }));
00104 }
00105
00106 this.Invoke(new MethodInvoker(delegate()
00107 {
00108
00109 MainWindow mw = new MainWindow(new ReconnectHandler(client, accessHandler));
00110 this.Hide();
00111 mw.FormClosed += delegate(object s, FormClosedEventArgs ea) { this.Show(); accessHandler = null; client.Stop(); };
00112 mw.ShowDialog();
00113
00114 ShowWaitScreen(false);
00115
00116 }));
00117 }));
00118 thread.Start();
00119 }
00120
00126 private void btnQuit_Click(object sender, EventArgs e)
00127 {
00128 Close();
00129 }
00130
00136 private void Login_Shown(object sender, EventArgs e)
00137 {
00138 txtUsername.Focus();
00139 }
00140
00145 public void ShowWaitScreen(bool toggle)
00146 {
00147 if (toggle)
00148 {
00149 pleaseWait.Begin();
00150 this.Refresh();
00151 }
00152 else
00153 {
00154 pleaseWait.End();
00155 }
00156 }
00157
00162 public bool Connect()
00163 {
00164 if (accessHandler != null)
00165 return true;
00166
00167
00168 client = new RMIClient();
00169 accessHandler = client.Connect();
00170
00171 if (accessHandler == null)
00172 {
00173 MessageBox.Show("SKRAMMEL could not create a connection to the server: "+client.ErrorMessage+"\nPlease check your settings and try again!", "Login Failed!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00174
00175 client.Stop();
00176 return false;
00177 }
00178 return true;
00179
00180 }
00181
00187 private void cmdCreateUser_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
00188 {
00189 if (!Connect())
00190 return;
00191 Messages lm = Messages.Fail;
00192 DialogResult result = DialogResult.No;
00193 PersonInfo newUser = new PersonInfo();
00194 while (lm != Messages.OK && result != DialogResult.OK)
00195 {
00196 UserForm CreateNewUserForm = new UserForm();
00197 DialogResult dr = CreateNewUserForm.ShowDialog();
00198 newUser = CreateNewUserForm.PersonInfo;
00199
00200 if (dr == DialogResult.Cancel)
00201 return;
00202
00203 lm = accessHandler.Register(newUser.username, Utils.HashedValue(newUser.password), newUser.name, newUser.department, newUser.email);
00204 if (lm != Messages.OK)
00205 {
00206 MessageBox.Show("Username already Exists!", "Try again!", MessageBoxButtons.OK, MessageBoxIcon.Error);
00207 } else
00208 MessageBox.Show("User was created!", "Success!", MessageBoxButtons.OK, MessageBoxIcon.Information);
00209
00210 txtPassword.Text = newUser.password;
00211 txtUsername.Text = newUser.username;
00212 }
00213 }
00214
00220 private void cmdWhatis_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
00221 {
00222 About about = new About();
00223 about.ShowDialog();
00224 }
00225
00231 private void cmdForgetMe_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
00232 {
00233 localSettings.Username = "";
00234 localSettings.Password = "";
00235 txtUsername.Text = "";
00236 txtPassword.Text = "";
00237 cmdForgetMe.Visible = false;
00238 chkRemember.Visible = true;
00239 txtUsername.Focus();
00240 }
00241
00247 private void btnConfigure_Click(object sender, EventArgs e)
00248 {
00249 LoginConfig lc = new LoginConfig(localSettings);
00250 lc.ShowDialog();
00251 }
00252
00258 private void txtPassword_Enter(object sender, EventArgs e)
00259 {
00260 txtPassword.SelectAll();
00261 }
00262
00268 private void txtUsername_Enter(object sender, EventArgs e)
00269 {
00270 txtUsername.SelectAll();
00271 }
00272 }
00273 }