GTB: - unambiguous messages on password repair
This commit is contained in:
parent
1056dfefeb
commit
cc142e2ce5
@ -268,6 +268,9 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
/// <remarks date="2025-Oct-17" author="Thomas Wiedebusch">
|
||||
/// - Actions on pwdContainer error.
|
||||
/// </remarks>
|
||||
/// <remarks date="2025-Oct-20" author="Thomas Wiedebusch">
|
||||
/// - Password checks extended.
|
||||
/// </remarks>
|
||||
private void Connect()
|
||||
{
|
||||
try
|
||||
@ -313,6 +316,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
{
|
||||
LowLevelActionControl(false);
|
||||
LogErrorText("ERROR: Cannot read out PcbId! Access to Cordonel denied!");
|
||||
LogText(StrSeparator);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -325,7 +329,8 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
string.IsNullOrEmpty(pwdContainer.Skeleton)))
|
||||
{
|
||||
LowLevelActionControl(false);
|
||||
LogErrorText("ERROR: Login failed and passwords cannot be acquired from database!");
|
||||
LogErrorText("ERROR: Login failed and passwords cannot be acquired from the database!");
|
||||
LogText(StrSeparator);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -350,7 +355,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
// CASE 1: - The 'offline password' is valid and equals the 'Lvl8 password' and the
|
||||
// 'production password'
|
||||
LogText("The 'production password' is the 'Lvl8 password'\n" +
|
||||
"Installed password file is valid and compared with database");
|
||||
"Installed password file is valid and compared with the database");
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -358,7 +363,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
// 'production password' is not correctly updated
|
||||
ShowPasswordRepairMessage(
|
||||
"The 'production password' is not correctly set to the 'Lvl8 password'\n" +
|
||||
"Installed password file is valid and compared with database\n" +
|
||||
"Installed password file is valid and compared with the database\n" +
|
||||
"[Repair Password] enabled");
|
||||
}
|
||||
}
|
||||
@ -366,7 +371,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
else if (_currentGenesis.OfflinePassword.Equals(pwdContainer.Skeleton))
|
||||
ShowPasswordRepairMessage(
|
||||
"The 'offline password' is the 'SkeletonKey'\n" +
|
||||
"Password exists on database but password file not installed'\n" +
|
||||
"Password exists on the database but password file not installed'\n" +
|
||||
"[Repair Password] enabled");
|
||||
}// The 'offline password' is in use
|
||||
else // The 'production password' is in use
|
||||
@ -376,7 +381,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
// CASE 4: - The 'production password' is the 'Lvl8 password' as the login succeeded.
|
||||
LogText(
|
||||
"Successfully logged in with the 'production password' which equals the 'Lvl8 password'\n" +
|
||||
"Installed password file is valid and compared with database");
|
||||
"Installed password file is valid and compared with the database");
|
||||
}
|
||||
else if (pwdContainer.Password.Equals(pwdContainer.Skeleton))
|
||||
{
|
||||
@ -387,7 +392,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
// CASE 5: - The 'production password' is the 'SkeletonKey' as the login succeeded.
|
||||
ShowPasswordRepairMessage(
|
||||
"Successfully logged in with the 'production password' which equals the 'SkeletonKey'\n" +
|
||||
"Password exists on database but password file not installed'\n" +
|
||||
"Password exists on the database but password file not installed'\n" +
|
||||
"[Repair Password] enabled");
|
||||
}
|
||||
}
|
||||
@ -396,14 +401,14 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
{
|
||||
// CASE 6: - The login succeeded but the password file request from database failed
|
||||
LogText("Successfully logged in with the 'offline password'.\n" +
|
||||
"Passwords cannot be acquired from database and therefore not compared");
|
||||
"Passwords cannot be acquired from the database and therefore not compared");
|
||||
}
|
||||
}// Initial login succeeded
|
||||
|
||||
// Login can only be tried on valid database collection of passwords
|
||||
if (!retValPwdBuild)
|
||||
{
|
||||
sb.AppendLine(@"Passwords cannot be acquired from database [E0]!");
|
||||
sb.AppendLine(@"Passwords cannot be acquired from the database [E0]!");
|
||||
}
|
||||
// As the initial login wasn't successfully, try the acquired combinations from the database passwords
|
||||
else if (!_currentGenesis.IsLoggedOn)
|
||||
@ -418,8 +423,8 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
if (_currentGenesis.IsLoggedOn && retVal)
|
||||
{
|
||||
ShowPasswordRepairMessage("Successfully logged in with 'Lvl8 password'\n" +
|
||||
"Installed password file is valid and compared with database!\n" +
|
||||
"'production password' in database not actual, update required\n" +
|
||||
"Installed password file is valid and compared with the database!\n" +
|
||||
"'production password' in the database not actual, update required\n" +
|
||||
"[Repair Password] enabled");
|
||||
}
|
||||
else
|
||||
@ -435,7 +440,7 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
if (_currentGenesis.Login(pwdContainer.Skeleton))
|
||||
{
|
||||
ShowPasswordRepairMessage("Successfully logged in with 'SkeletonKey'\n" +
|
||||
"'production password' in database not actual, update required\n" +
|
||||
"'production password' in the database not actual, update required\n" +
|
||||
"[Repair Password] enabled");
|
||||
}
|
||||
else
|
||||
@ -493,10 +498,12 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
|
||||
if (!_currentGenesis.IsLoggedOn)
|
||||
{
|
||||
LogText(StrSeparator);
|
||||
return;
|
||||
}
|
||||
|
||||
_meterFile = new MeterFile(_currentGenesis);
|
||||
LogText(StrSeparator);
|
||||
|
||||
Invoke(new Action(() =>
|
||||
{
|
||||
@ -2170,73 +2177,74 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
Task.Factory.StartNew(() =>
|
||||
{
|
||||
// Request password file and force generation
|
||||
SetActualProcessAndLog("Request password files from database");
|
||||
SetActualProcessAndLog("Request passwords from the database");
|
||||
var ret = MeterPwdHandlerDb.RequestPwdFileFromDb(_currentGenesis.GetPcbId(), out var pwdContainer);
|
||||
if (pwdContainer?.ListOfHashes == null || pwdContainer.ListOfPasswords == null || !ret)
|
||||
{
|
||||
LogText(@"Password file from server corrupted [M3]!");
|
||||
LogText(@"Passwords from server corrupted [M3]!");
|
||||
LowLevelActionControl(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// Build password file
|
||||
SetActualProcessAndLog("Build password file");
|
||||
SetActualProcessAndLog("Build 'password file'");
|
||||
var _meterPwdFile = new MeterPwdFile(_currentGenesis);
|
||||
var retValBol = _meterPwdFile.BuildPwdFile(pwdContainer.ListOfPasswords, 1, pwdContainer.Skeleton);
|
||||
if (!retValBol)
|
||||
{
|
||||
LogText(@"Unable to build password file [M3]!");
|
||||
LogText(@"Unable to build 'password file' [M3]!");
|
||||
LowLevelActionControl(false);
|
||||
return;
|
||||
}
|
||||
|
||||
// Install password file and verify byte wise
|
||||
SetActualProcessAndLog("Install and verify password file into meter");
|
||||
SetActualProcessAndLog("Install 'password file' into meter, read it out and verify it");
|
||||
_currentGenesis.ReLogin();
|
||||
retValBol = _meterPwdFile.UnlockEraseWriteMeterPwdFile();
|
||||
retValBol &= _meterPwdFile.WriteMeterPwdFile() && _meterPwdFile.VerifyMeterPwdFile();
|
||||
|
||||
if (!retValBol)
|
||||
{
|
||||
LogText(@"Installed password file check failed [M4]!");
|
||||
LogErrorText(@"ERROR: Installed 'password file' check failed [M4]!");
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if new password is in the meter with login level 8 even if the file write wasn't successful
|
||||
SetActualProcessAndLog("Validate Lvl8 password from password file");
|
||||
SetActualProcessAndLog("Validate 'Lvl8 password' from 'password file'");
|
||||
_currentGenesis.Logout();
|
||||
retValBol = _currentGenesis.Login(Encoding.UTF8.GetString(pwdContainer.ListOfPasswords.Last()));
|
||||
if (!retValBol)
|
||||
{
|
||||
LogText(@"Login with new password failed [M4]!");
|
||||
LogErrorText(@"ERROR: Login with 'Lvl8 password' failed [M4]!");
|
||||
return;
|
||||
}
|
||||
LogText(@"Password was successfully installed.");
|
||||
LogText(@"Successfully installed the 'password file'");
|
||||
|
||||
// Set new password in production database
|
||||
SetActualProcessAndLog("Replace SkeletonKey with Lvl8 password as production password in database");
|
||||
SetActualProcessAndLog(
|
||||
"Replace 'SkeletonKey' with 'Lvl8 password' as 'production password' in the database");
|
||||
retValBol = MeterPwdHandlerDb.SetPwdFromSkeletonToLvl8inDd(_currentGenesis.PcbId, pwdContainer);
|
||||
if (!retValBol)
|
||||
{
|
||||
LogText(@"Update of production password in database failed [E3]!");
|
||||
LogErrorText(@"ERROR: Update of 'production password' in the database failed [E3]!");
|
||||
return;
|
||||
}
|
||||
LogText(@"Production password successfully updated in database");
|
||||
LogText(@"Successfully updated 'production password' in the database");
|
||||
|
||||
// Check password level 3 as all applications need to use this
|
||||
SetActualProcessAndLog("Validate Lv3 as SkeletonKey in meter");
|
||||
SetActualProcessAndLog("Validate 'Lv3 password' as 'SkeletonKey' in meter (used by meter-apps)");
|
||||
retValBol = _currentGenesis.WriteRegister("SYSTEM_ExitReason", new Byte[] { 21 });
|
||||
var exitResult = RegisterConverter.ByteArrayToValue<Int16>(_currentGenesis.ReadRegister("SYSTEM_ExitReason"));
|
||||
if (exitResult != 0 || !retValBol)
|
||||
{
|
||||
LogText(@"Meter reports wrong SkeletonKey at Lvl3 [M4]!");
|
||||
LogErrorText(@"ERROR: Meter reports wrong 'SkeletonKey' at 'Lvl3 password' [M4]!");
|
||||
return;
|
||||
}
|
||||
LogText(@"Meter reports correct SkeletonKey at Lvl3.");
|
||||
LogText(@"Meter reports correct 'SkeletonKey' as 'Lvl3 password'");
|
||||
|
||||
// Clear intermediate stored password to force password collection from DB on simple login without
|
||||
// given new password. Then the password will be taken from the DB or offline file.
|
||||
SetActualProcessAndLog("Crosscheck production password with meter password Lvl8");
|
||||
SetActualProcessAndLog("Crosscheck 'production password' with meter 'Lvl8 password");
|
||||
_currentGenesis.Logout();
|
||||
_currentGenesis.ClearPassword();
|
||||
|
||||
@ -2248,10 +2256,10 @@ namespace Xylem.Common.Ui.GenesisToolBox
|
||||
|
||||
if (!retValBol)
|
||||
{
|
||||
LogText(@"Invalid password in production database [E3]!");
|
||||
LogErrorText(@"ERROR: Invalid 'production password' in the production database [E3]!");
|
||||
return;
|
||||
}
|
||||
LogText(@"Password Lvl8 successfully validated with production database.");
|
||||
LogText(@"Successfully validated 'Lvl8 password' of the production database");
|
||||
_repairPasswordEnabled = false;
|
||||
}).ContinueWith(delegate
|
||||
{
|
||||
|
||||
Loading…
Reference in New Issue
Block a user