/// /// Copyright (c) 2013-2018 Sensus Slovensko a.s. /// using System; using System.Windows.Forms; using log4net; using TBF.Resources; using GemCard; using System.Drawing; namespace TBF.UI.Shared { /// /// Provides login dialog that includes test bench selection. /// It is used only once on program startup. Does not do authorisation /// as User.users have not been loadded from the DB yet. /// public partial class LoginDlgWithBenchSelection : Form { private static readonly ILog log = LogManager.GetLogger(typeof(LoginDlgWithBenchSelection)); public const string UseTheTagPassword = "UseTheTag0293578"; /// Private fields string alias; string password; string benchName = null; string legalizator; /// Smart card support, card S/N is used as user.Tag GemCard.CardNative card; string smartCardReader; /// Readonly public properties to do the authorization. public string Alias { get { return alias; } } public string Password { get { return password; } } public string BenchName { get { return benchName; } } public Common.LoginMethod Method; public string Legalizator { get { return legalizator; } } /// /// Constructor. /// public LoginDlgWithBenchSelection() { InitializeComponent(); } /// /// Constructor with a predefined bench. /// public LoginDlgWithBenchSelection(string predefinedBench) : this() { benchName = predefinedBench; #if LANG_PL || BAHRAIN_50 Height = 156; EnableAndPrepareLegalizatorCombo(legalizatorComboBox); #else legalizator = string.Empty; #endif } /// /// Load Legalizator order combo box items from the LocalSettings LastLegalizators array /// /// Legalizator ComboBox void EnableAndPrepareLegalizatorCombo(ComboBox comboBox) { legalizatorLabel.Visible = true; legalizatorComboBox.Visible = true; legalizatorComboBox.Enabled = true; for (int i = 0; i < Program.LocalSettings.LastLegalizatorsCount; i++) { comboBox.Items.Add(Program.LocalSettings.LastLegalizators[i]); } legalizator = (comboBox.Items.Count > 0) ? Program.LocalSettings.LastLegalizators[0] : string.Empty; comboBox.Text = legalizator; } private void LoginDlgWithBenchSelection_Load(object sender, EventArgs e) { Localize(); #if DEBUG userNameTextBox.Text = "milan"; passwordTextBox.Text = "kremik"; #endif Array.Sort(Program.LocalSettings.TestBenches); for (int i = 0; i < Program.LocalSettings.BenchesCount; i++) { testBenchComboBox.Items.Add(Program.LocalSettings.TestBenches[i].BenchName); if (benchName != null && benchName == Program.LocalSettings.TestBenches[i].BenchName) { testBenchComboBox.Text = benchName; } } smartCardReader = null; /// null = No smart card reader detected #if TURA_IPERL || TURA_IPERL_NEW || TURA_SPECIAL try { card = new CardNative(); /// Find NFC smart card reader string[] cardReaders = card.ListReaders(); if (cardReaders != null) { foreach (var crd in cardReaders) { log.WarnFormat("SMART card reader found: {0}", crd); } foreach (var crd in cardReaders) { if (crd.Contains("NFC")) { log.ErrorFormat("SMART card reader selected: {0}", crd); smartCardReader = crd; /// NFC smart card reader detected break; } } } if (!string.IsNullOrEmpty(smartCardReader)) { /// Reader found, initialize NFC smart card reader card.OnCardInserted += delegate(object sndr, CardInsertedEventArgs args) { if (InvokeRequired) { Invoke(new EventHandler(OnCardInserted), sndr, args); } else OnCardInserted(sndr, args); }; card.OnCardRemoved += delegate(object sndr, CardRemovedEventArgs args) { if (InvokeRequired) { Invoke(new EventHandler(OnCardRemoved), sndr, args); } else OnCardRemoved(sndr, args); }; card.StartCardEvents(smartCardReader); Text += " (NFC)"; } } catch (Exception) { smartCardReader = null; } #endif } void Localize() { Text = Strings.User_Login + " TBF v." + Program.Version; aliasLabel.Text = GetAliasLabel(); passwordLabel.Text = Strings.Password; testBenchLabel.Text = Strings.Test_bench; okButton.Text = Strings.OkBtnText; cancelButton.Text = Strings.CancelBtnText; legalizatorLabel.Text = Strings.Legalizator; } string GetAliasLabel() { switch (Method) { default: case Common.LoginMethod.UserName: return Strings.User_name; case Common.LoginMethod.FullName: return Strings.Full_name; case Common.LoginMethod.Number: return Strings.User_code; } } /// /// OK clicked (authorization is done outside this dialog). /// private void okButton_Click(object sender, EventArgs e) { if (testBenchComboBox.SelectedItem != null) { alias = userNameTextBox.Text; password = passwordTextBox.Text; benchName = testBenchComboBox.SelectedItem.ToString(); if (legalizatorComboBox.Visible && legalizatorComboBox.Enabled) { legalizator = legalizatorComboBox.Text; Program.LocalSettings.UpdateHistory(legalizator, ref Program.LocalSettings.LastLegalizators); } DialogResult = DialogResult.OK; Close(); return; } else { MessageBox.Show(Strings.PLs_select_testbench, Strings.Warning, MessageBoxButtons.OK); } } /// /// Cancel clicked. /// private void cancelButton_Click(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; Close(); return; } private void passwordTextBox_TextChanged(object sender, EventArgs e) { if (passwordTextBox.Text != "") { this.AcceptButton = okButton; } } private void userNameTextBox_KeyPress(object sender, KeyPressEventArgs e) { if (Convert.ToInt32(e.KeyChar) == 13) { passwordTextBox.Focus(); } } private void passwordTextBox_KeyPress(object sender, KeyPressEventArgs e) { if (Convert.ToInt32(e.KeyChar) == 13) { okButton_Click(sender, e); } } private void aliasLabel_Click(object sender, EventArgs e) { Method++; if (Method == Common.LoginMethod.Count) Method = 0; aliasLabel.Text = GetAliasLabel(); } void OnCardInserted(object sender, CardInsertedEventArgs args) { string tag = string.Empty; try { BackColor = Color.Green; card.Connect(smartCardReader, SHARE.Shared, PROTOCOL.T0orT1); /// Read the serial number of the card APDUResponse response = card.Transmit(new APDUCommand(0xFF, 0xCA, 0x00, 0x00, null, 7)); tag = response.ToString(); card.Disconnect(DISCONNECT.Leave); } catch { tag = string.Empty; } if (testBenchComboBox.SelectedItem != null) { alias = tag; password = UseTheTagPassword; benchName = testBenchComboBox.SelectedItem.ToString(); if (legalizatorComboBox.Enabled) { legalizator = legalizatorComboBox.Text; Program.LocalSettings.UpdateHistory(legalizator, ref Program.LocalSettings.LastLegalizators); } DialogResult = DialogResult.OK; Close(); return; } else { MessageBox.Show(Strings.PLs_select_testbench, Strings.Warning, MessageBoxButtons.OK); } } void OnCardRemoved(object sender, CardRemovedEventArgs args) { BackColor = SystemColors.Control; } private void LoginDlgWithBenchSelection_FormClosing(object sender, FormClosingEventArgs e) { if (!string.IsNullOrEmpty(smartCardReader)) { try { card.StopCardEvents(); } catch { } } } } }