* Added password change support (references #95)
* Fixed 64bit support * Repaired line endings * Bumped protocol version
This commit is contained in:
1056
Client/CentrED.lpi
1056
Client/CentrED.lpi
File diff suppressed because it is too large
Load Diff
@@ -141,6 +141,7 @@ initialization
|
||||
//$06-$0B --> handled by TLandscape
|
||||
//$0C --> ClientHandling, done by TfrmMain
|
||||
//$0D --> RadarMapHandling, done by TfrmRadarMap
|
||||
//$0E --> LargeScaleCommands, done by TfrmLargeScaleCommands
|
||||
finalization
|
||||
for i := 0 to $FF do
|
||||
if PacketHandlers[i] <> nil then
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2009 Andreas Schneider
|
||||
* Portions Copyright 2013 Andreas Schneider
|
||||
*)
|
||||
unit UPackets;
|
||||
|
||||
@@ -133,6 +133,12 @@ type
|
||||
TGotoClientPosPacket = class(TPacket)
|
||||
constructor Create(AUsername: string);
|
||||
end;
|
||||
|
||||
{ TChangePasswordPacket }
|
||||
|
||||
TChangePasswordPacket = class(TPacket)
|
||||
constructor Create(AOldPassword, ANewPassword: String);
|
||||
end;
|
||||
|
||||
{ TRequestRadarChecksumPacket }
|
||||
|
||||
@@ -346,6 +352,16 @@ begin
|
||||
FStream.WriteStringNull(AUsername);
|
||||
end;
|
||||
|
||||
{ TChangePasswordPacket }
|
||||
|
||||
constructor TChangePasswordPacket.Create(AOldPassword, ANewPassword: String);
|
||||
begin
|
||||
inherited Create($0C, 0);
|
||||
FStream.WriteByte($08);
|
||||
FStream.WriteStringNull(AOldPassword);
|
||||
FStream.WriteStringNull(ANewPassword);
|
||||
end;
|
||||
|
||||
{ TRequestRadarChecksumPacket }
|
||||
|
||||
constructor TRequestRadarChecksumPacket.Create;
|
||||
|
||||
@@ -78,7 +78,8 @@ uses
|
||||
UGameResources, UfrmAccountControl, UfrmEditAccount, UfrmDrawSettings,
|
||||
UfrmBoundaries, UfrmElevateSettings, UfrmConfirmation, UfrmMoveSettings,
|
||||
UfrmAbout, UfrmHueSettings, UfrmRadar, UfrmLargeScaleCommand,
|
||||
UfrmVirtualLayer, UfrmFilter, UfrmRegionControl, UfrmLightlevel;
|
||||
UfrmVirtualLayer, UfrmFilter, UfrmRegionControl, UfrmLightlevel,
|
||||
UfrmChangePassword;
|
||||
|
||||
{$I version.inc}
|
||||
|
||||
@@ -212,6 +213,7 @@ begin
|
||||
frmVirtualLayer := TfrmVirtualLayer.Create(frmMain);
|
||||
frmLightlevel := TfrmLightlevel.Create(frmMain);
|
||||
frmAbout := TfrmAbout.Create(frmMain);
|
||||
frmChangePassword := TfrmChangePassword.Create(frmMain);
|
||||
frmMain.Show;
|
||||
frmInitialize.Hide;
|
||||
tmNoOp.Enabled := True;
|
||||
@@ -308,6 +310,7 @@ begin
|
||||
FreeAndNil(frmLargeScaleCommand);
|
||||
FreeAndNil(frmRadarMap);
|
||||
FreeAndNil(frmLightlevel);
|
||||
FreeAndNil(frmChangePassword);
|
||||
|
||||
if frmMain <> nil then
|
||||
begin
|
||||
|
||||
129
Client/UfrmChangePassword.lfm
Normal file
129
Client/UfrmChangePassword.lfm
Normal file
@@ -0,0 +1,129 @@
|
||||
object frmChangePassword: TfrmChangePassword
|
||||
Left = 283
|
||||
Height = 145
|
||||
Top = 193
|
||||
Width = 315
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Change Password'
|
||||
ClientHeight = 145
|
||||
ClientWidth = 315
|
||||
OnShow = FormShow
|
||||
Position = poMainFormCenter
|
||||
LCLVersion = '1.3'
|
||||
object Label1: TLabel
|
||||
AnchorSideTop.Control = edOldPwd
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = edOldPwd
|
||||
Left = 32
|
||||
Height = 15
|
||||
Top = 13
|
||||
Width = 88
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Old Password:'
|
||||
ParentColor = False
|
||||
end
|
||||
object Label2: TLabel
|
||||
AnchorSideTop.Control = edNewPwd
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = edNewPwd
|
||||
Left = 26
|
||||
Height = 15
|
||||
Top = 46
|
||||
Width = 94
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'New Password:'
|
||||
ParentColor = False
|
||||
end
|
||||
object lblNewPwdRepeat: TLabel
|
||||
AnchorSideTop.Control = edNewPwdRepeat
|
||||
AnchorSideTop.Side = asrCenter
|
||||
AnchorSideRight.Control = edNewPwdRepeat
|
||||
Left = 9
|
||||
Height = 15
|
||||
Top = 79
|
||||
Width = 111
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = 'Repeat Password:'
|
||||
ParentColor = False
|
||||
end
|
||||
object edOldPwd: TEdit
|
||||
Left = 128
|
||||
Height = 25
|
||||
Top = 8
|
||||
Width = 176
|
||||
EchoMode = emPassword
|
||||
PasswordChar = '*'
|
||||
TabOrder = 0
|
||||
end
|
||||
object edNewPwd: TEdit
|
||||
AnchorSideLeft.Control = edOldPwd
|
||||
AnchorSideTop.Control = edOldPwd
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = edOldPwd
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 128
|
||||
Height = 25
|
||||
Top = 41
|
||||
Width = 176
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
EchoMode = emPassword
|
||||
OnChange = edNewPwdChange
|
||||
PasswordChar = '*'
|
||||
TabOrder = 1
|
||||
end
|
||||
object edNewPwdRepeat: TEdit
|
||||
AnchorSideLeft.Control = edNewPwd
|
||||
AnchorSideTop.Control = edNewPwd
|
||||
AnchorSideTop.Side = asrBottom
|
||||
AnchorSideRight.Control = edNewPwd
|
||||
AnchorSideRight.Side = asrBottom
|
||||
Left = 128
|
||||
Height = 25
|
||||
Top = 74
|
||||
Width = 176
|
||||
Anchors = [akTop, akLeft, akRight]
|
||||
BorderSpacing.Top = 8
|
||||
EchoMode = emPassword
|
||||
OnChange = edNewPwdChange
|
||||
PasswordChar = '*'
|
||||
TabOrder = 2
|
||||
end
|
||||
object btnOK: TButton
|
||||
AnchorSideTop.Control = btnCancel
|
||||
AnchorSideRight.Control = btnCancel
|
||||
Left = 149
|
||||
Height = 25
|
||||
Top = 112
|
||||
Width = 75
|
||||
Anchors = [akTop, akRight]
|
||||
BorderSpacing.Right = 8
|
||||
Caption = '&OK'
|
||||
Default = True
|
||||
Enabled = False
|
||||
ModalResult = 1
|
||||
OnClick = btnOKClick
|
||||
TabOrder = 3
|
||||
end
|
||||
object btnCancel: TButton
|
||||
AnchorSideRight.Control = Owner
|
||||
AnchorSideRight.Side = asrBottom
|
||||
AnchorSideBottom.Control = Owner
|
||||
AnchorSideBottom.Side = asrBottom
|
||||
Left = 232
|
||||
Height = 25
|
||||
Top = 112
|
||||
Width = 75
|
||||
Anchors = [akRight, akBottom]
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
Cancel = True
|
||||
Caption = 'Cancel'
|
||||
ModalResult = 2
|
||||
OnClick = btnCancelClick
|
||||
TabOrder = 4
|
||||
end
|
||||
end
|
||||
81
Client/UfrmChangePassword.pas
Normal file
81
Client/UfrmChangePassword.pas
Normal file
@@ -0,0 +1,81 @@
|
||||
unit UfrmChangePassword;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
|
||||
|
||||
type
|
||||
|
||||
{ TfrmChangePassword }
|
||||
|
||||
TfrmChangePassword = class(TForm)
|
||||
btnOK: TButton;
|
||||
btnCancel: TButton;
|
||||
edOldPwd: TEdit;
|
||||
edNewPwd: TEdit;
|
||||
edNewPwdRepeat: TEdit;
|
||||
Label1: TLabel;
|
||||
Label2: TLabel;
|
||||
lblNewPwdRepeat: TLabel;
|
||||
procedure btnCancelClick(Sender: TObject);
|
||||
procedure btnOKClick(Sender: TObject);
|
||||
procedure edNewPwdChange(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
private
|
||||
{ private declarations }
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
frmChangePassword: TfrmChangePassword;
|
||||
|
||||
implementation
|
||||
|
||||
uses
|
||||
UdmNetwork, UPackets, UEnums;
|
||||
|
||||
{$R *.lfm}
|
||||
|
||||
{ TfrmChangePassword }
|
||||
|
||||
procedure TfrmChangePassword.FormShow(Sender: TObject);
|
||||
begin
|
||||
edOldPwd.Text := '';
|
||||
edNewPwd.Text := '';
|
||||
edNewPwdRepeat.Text := '';
|
||||
end;
|
||||
|
||||
procedure TfrmChangePassword.btnCancelClick(Sender: TObject);
|
||||
begin
|
||||
Close;
|
||||
end;
|
||||
|
||||
procedure TfrmChangePassword.btnOKClick(Sender: TObject);
|
||||
begin
|
||||
dmNetwork.Send(TChangePasswordPacket.Create(edOldPwd.Text,
|
||||
edNewPwd.Text));
|
||||
end;
|
||||
|
||||
procedure TfrmChangePassword.edNewPwdChange(Sender: TObject);
|
||||
var
|
||||
pwdValid: Boolean;
|
||||
begin
|
||||
if edNewPwd.Text <> edNewPwdRepeat.Text then
|
||||
begin
|
||||
pwdValid := False;
|
||||
lblNewPwdRepeat.Font.Color := clRed;
|
||||
end else
|
||||
begin
|
||||
pwdValid := True;
|
||||
lblNewPwdRepeat.Font.Color := clDefault;
|
||||
end;
|
||||
|
||||
btnOK.Enabled := (Length(edNewPwd.Text) > 0) and pwdValid;
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
5468
Client/UfrmMain.lfm
5468
Client/UfrmMain.lfm
File diff suppressed because it is too large
Load Diff
@@ -103,6 +103,7 @@ type
|
||||
lblY: TLabel;
|
||||
lbClients: TListBox;
|
||||
MainMenu1: TMainMenu;
|
||||
mnuChangePassword: TMenuItem;
|
||||
mnuWhiteBackground: TMenuItem;
|
||||
mnuSecurityQuestion: TMenuItem;
|
||||
mnuShowAnimations: TMenuItem;
|
||||
@@ -222,6 +223,7 @@ type
|
||||
procedure lblChatHeaderCaptionClick(Sender: TObject);
|
||||
procedure lblChatHeaderCaptionMouseEnter(Sender: TObject);
|
||||
procedure lblChatHeaderCaptionMouseLeave(Sender: TObject);
|
||||
procedure mnuChangePasswordClick(Sender: TObject);
|
||||
procedure mnuAboutClick(Sender: TObject);
|
||||
procedure mnuAccountControlClick(Sender: TObject);
|
||||
procedure mnuDisconnectClick(Sender: TObject);
|
||||
@@ -407,7 +409,7 @@ uses
|
||||
UfrmBoundaries, UfrmElevateSettings, UfrmConfirmation, UfrmMoveSettings,
|
||||
UfrmAbout, UPacketHandlers, UfrmHueSettings, UfrmRadar, UfrmLargeScaleCommand,
|
||||
UfrmLogin, UResourceManager, UfrmVirtualLayer, UfrmFilter, UfrmRegionControl,
|
||||
Logging, LConvEncoding, LCLType, UfrmLightlevel;
|
||||
Logging, LConvEncoding, LCLType, UfrmLightlevel, UfrmChangePassword;
|
||||
|
||||
type
|
||||
TGLArrayf4 = array[0..3] of GLfloat;
|
||||
@@ -1417,6 +1419,11 @@ begin
|
||||
lblChatHeaderCaption.Font.Underline := False;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.mnuChangePasswordClick(Sender: TObject);
|
||||
begin
|
||||
frmChangePassword.ShowModal;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.mnuAboutClick(Sender: TObject);
|
||||
begin
|
||||
frmAbout.ShowModal;
|
||||
@@ -3060,6 +3067,7 @@ var
|
||||
i: Integer;
|
||||
accessLevel: TAccessLevel;
|
||||
accessChangedListener: TAccessChangedListener;
|
||||
pwdChangeStatus: TPasswordChangeStatus;
|
||||
begin
|
||||
case ABuffer.ReadByte of
|
||||
$01: //client connected
|
||||
@@ -3117,6 +3125,23 @@ begin
|
||||
for accessChangedListener in FAccessChangedListeners.Reversed do
|
||||
accessChangedListener(accessLevel);
|
||||
end;
|
||||
$08: //password change status
|
||||
begin
|
||||
pwdChangeStatus := TPasswordChangeStatus(ABuffer.ReadByte);
|
||||
case pwdChangeStatus of
|
||||
pcSuccess:
|
||||
Messagedlg('Password Change', 'Your password has been changed', mtInformation, [mbOK], 0);
|
||||
pcOldPwInvalid:
|
||||
Messagedlg('Password Change', 'The old password is wrong.' + sLineBreak +
|
||||
'Your password has NOT been changed.', mtWarning, [mbOK], 0);
|
||||
pcNewPwInvalid:
|
||||
Messagedlg('Password Change', 'The new password is not allowed.' + sLineBreak +
|
||||
'Your password has NOT been changed.', mtWarning, [mbOK], 0);
|
||||
pcIdentical:
|
||||
Messagedlg('Password Change', 'The new password matched the old password.' + sLineBreak +
|
||||
'Your password has NOT been changed.', mtWarning, [mbOK], 0);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user