177 lines
5.0 KiB
C#
177 lines
5.0 KiB
C#
///
|
|
/// Copyright (c) 2013-2016 Sensus Metering Systems
|
|
///
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
using System.Drawing;
|
|
using System.Text;
|
|
using System.Windows.Forms;
|
|
using TBF.Resources;
|
|
|
|
namespace TBF.Forms
|
|
{
|
|
/// <summary>
|
|
/// Provides login dialog as well as user authorization using TBF.User.Authorize(...)
|
|
/// (i.e. when DialogResult is OK, user was authorized).
|
|
/// </summary>
|
|
public partial class LoginDlg : Form
|
|
{
|
|
// Private fields
|
|
string user;
|
|
string password;
|
|
Config.Grp.GID requiredGroupMembership = Config.Grp.GID.Invalid;
|
|
bool noDatabase;
|
|
|
|
Config.Entities.LoginMethod method;
|
|
|
|
|
|
/// <summary>
|
|
/// Constructor.
|
|
/// </summary>
|
|
public LoginDlg()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor with a predefined user.
|
|
/// </summary>
|
|
public LoginDlg(string predefinedUser)
|
|
: this()
|
|
{
|
|
user = predefinedUser;
|
|
userNameTextBox.Text = predefinedUser;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor with 'no Database' flag.
|
|
/// </summary>
|
|
public LoginDlg(bool noDatabase)
|
|
: this()
|
|
{
|
|
this.noDatabase = noDatabase;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor when a specific group membership is required.
|
|
/// </summary>
|
|
public LoginDlg(Config.Grp.GID requiredGroupMembership)
|
|
: this()
|
|
{
|
|
this.requiredGroupMembership = requiredGroupMembership;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor with a predefined user when a specific group membership is required.
|
|
/// </summary>
|
|
public LoginDlg(string predefinedUser, Config.Grp.GID requiredGroupMembership)
|
|
: this()
|
|
{
|
|
user = predefinedUser;
|
|
userNameTextBox.Text = predefinedUser;
|
|
this.requiredGroupMembership = requiredGroupMembership;
|
|
}
|
|
|
|
private void LoginDlg_Load(object sender, EventArgs e)
|
|
{
|
|
Localize();
|
|
|
|
if (user == null)
|
|
userNameTextBox.Select();
|
|
else
|
|
passwordTextBox.Select();
|
|
}
|
|
|
|
void Localize()
|
|
{
|
|
Text = Strings.User_Login + " TBF v." + Program.Version;
|
|
aliasLabel.Text = GetAliasLabel();
|
|
passwordLabel.Text = Strings.Password;
|
|
okButton.Text = Strings.OkBtnText;
|
|
cancelButton.Text = Strings.CancelBtnText;
|
|
}
|
|
|
|
string GetAliasLabel()
|
|
{
|
|
switch (method)
|
|
{
|
|
default:
|
|
case Config.Entities.LoginMethod.UserName: return Strings.User_name;
|
|
case Config.Entities.LoginMethod.FullName: return Strings.Full_name;
|
|
case Config.Entities.LoginMethod.Number: return Strings.User_code;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Try to authorize the user when OK clicked.
|
|
/// </summary>
|
|
private void okButton_Click(object sender, EventArgs e)
|
|
{
|
|
user = userNameTextBox.Text;
|
|
password = passwordTextBox.Text;
|
|
|
|
bool authorized = Config.Entities.User.IsPowerUser(user, password);
|
|
|
|
if (!authorized && !noDatabase)
|
|
{
|
|
Config.Entities.User loadedUser = Config.Entities.User.LoadUserByName(user);
|
|
if (loadedUser != null)
|
|
{
|
|
switch (method)
|
|
{
|
|
default:
|
|
case Config.Entities.LoginMethod.UserName:
|
|
authorized = (requiredGroupMembership == Config.Grp.GID.Invalid) ? loadedUser.Authorize(user, password) : loadedUser.Authorize(user, password, requiredGroupMembership);
|
|
break;
|
|
case Config.Entities.LoginMethod.FullName:
|
|
authorized = (requiredGroupMembership == Config.Grp.GID.Invalid) ? loadedUser.AuthorizeFullName(user, password) : loadedUser.AuthorizeFullName(user, password, requiredGroupMembership);
|
|
break;
|
|
case Config.Entities.LoginMethod.Number:
|
|
int number;
|
|
if (!int.TryParse(user, out number)) break;
|
|
authorized = (requiredGroupMembership == Config.Grp.GID.Invalid) ? loadedUser.AuthorizeNumber(number, password) : loadedUser.AuthorizeNumber(number, password, requiredGroupMembership);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (authorized)
|
|
{
|
|
DialogResult = DialogResult.OK;
|
|
Close();
|
|
if (Program.MainWnd != null) Program.MainWnd.UpdateUser();
|
|
return;
|
|
}
|
|
|
|
MessageBox.Show(Strings.Invalid_username_or_password, Strings.Error, MessageBoxButtons.OK);
|
|
DialogResult = DialogResult.None;
|
|
return;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Cancel clicked, do not try to authorize.
|
|
/// </summary>
|
|
private void cancelButton_Click(object sender, EventArgs e)
|
|
{
|
|
if (requiredGroupMembership == Config.Grp.GID.Invalid)
|
|
{
|
|
Config.Entities.User.Unauthorize();
|
|
}
|
|
|
|
DialogResult = DialogResult.Cancel;
|
|
Close();
|
|
return;
|
|
}
|
|
|
|
private void aliasLabel_Click(object sender, EventArgs e)
|
|
{
|
|
method++;
|
|
if (method == Config.Entities.LoginMethod.Count)
|
|
method = 0;
|
|
aliasLabel.Text = GetAliasLabel();
|
|
}
|
|
}
|
|
}
|