307 lines
9.5 KiB
C#
307 lines
9.5 KiB
C#
///
|
|
/// Copyright (c) 2013-2023 Sensus Slovensko a.s.
|
|
///
|
|
using System;
|
|
using System.Drawing;
|
|
using System.Windows.Forms;
|
|
using log4net;
|
|
using GemCard;
|
|
using TBF.Resources;
|
|
|
|
|
|
namespace TBF.UI.Shared
|
|
{
|
|
/// <summary>
|
|
/// 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.
|
|
/// </summary>
|
|
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; } }
|
|
|
|
/// <summary>
|
|
/// Constructor.
|
|
/// </summary>
|
|
public LoginDlgWithBenchSelection()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor with a predefined bench.
|
|
/// </summary>
|
|
public LoginDlgWithBenchSelection(string predefinedBench)
|
|
: this()
|
|
{
|
|
benchName = predefinedBench;
|
|
|
|
#if BAHRAIN_50
|
|
Height = 156;
|
|
EnableAndPrepareLegalizatorCombo(legalizatorComboBox);
|
|
#else
|
|
legalizator = string.Empty;
|
|
#endif
|
|
}
|
|
|
|
/// <summary>
|
|
/// Load Legalizator order combo box items from the LocalSettings LastLegalizators array
|
|
/// </summary>
|
|
/// <param name="orderComboBox">Legalizator ComboBox</param>
|
|
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 = "kraken";
|
|
#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<CardInsertedEventArgs>(OnCardInserted), sndr, args); }
|
|
else OnCardInserted(sndr, args);
|
|
};
|
|
|
|
card.OnCardRemoved += delegate(object sndr, CardRemovedEventArgs args)
|
|
{
|
|
if (InvokeRequired) { Invoke(new EventHandler<CardRemovedEventArgs>(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;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// OK clicked (authorization is done outside this dialog).
|
|
/// </summary>
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cancel clicked.
|
|
/// </summary>
|
|
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 { }
|
|
}
|
|
}
|
|
}
|
|
}
|