git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@19 7f62d464-2af8-f54e-996c-e91b33f51cbe
395 lines
14 KiB
ObjectPascal
395 lines
14 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvBaseDBPasswordDialog.pas, released on 2006-07-21
|
|
|
|
The Initial Developer of the Original Code is Jens Fudickar
|
|
All Rights Reserved.
|
|
|
|
Contributor(s):
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.delphi-jedi.org
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvBaseDBPasswordDialog.pas 12461 2009-08-14 17:21:33Z obones $
|
|
|
|
unit JvBaseDBPasswordDialog;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF UNITVERSIONING}
|
|
JclUnitVersioning,
|
|
{$ENDIF UNITVERSIONING}
|
|
JvDynControlEngine,
|
|
Classes, JvBaseDlg, JvAppStorage, Forms, Controls,
|
|
JvPropertyStore, Menus, JvBaseDBDialog, JvDynControlEngineIntf;
|
|
|
|
type
|
|
TJvPasswordDialogModifyPasswordEvent = procedure(var Password: string) of object;
|
|
|
|
TJvBaseDBPasswordDialogOptions = class(TPersistent)
|
|
private
|
|
FAllowedPasswordCharacters: string;
|
|
FCheckOldPassword: Boolean;
|
|
FMinPasswordLength: Integer;
|
|
public
|
|
constructor Create; virtual;
|
|
procedure Assign(Source: TPersistent); override;
|
|
published
|
|
property AllowedPasswordCharacters: string read FAllowedPasswordCharacters
|
|
write FAllowedPasswordCharacters;
|
|
property CheckOldPassword: Boolean read FCheckOldPassword write
|
|
FCheckOldPassword default True;
|
|
property MinPasswordLength: Integer read FMinPasswordLength write
|
|
FMinPasswordLength default 4;
|
|
end;
|
|
|
|
TJvBaseDBPasswordDialog = class(TJvBaseDBDialog)
|
|
private
|
|
ButtonPanel: TWinControl;
|
|
CancelBtn: TWinControl;
|
|
ChangeBtn: TWinControl;
|
|
FAfterTransferPasswordFromSession: TJvPasswordDialogModifyPasswordEvent;
|
|
FBeforeTransferPasswordToSession: TJvPasswordDialogModifyPasswordEvent;
|
|
FOptions: TJvBaseDBPasswordDialogOptions;
|
|
INewPasswordEditData: IJvDynControlData;
|
|
INewPasswordRetypeEditData: IJvDynControlData;
|
|
IOldPasswordEditData: IJvDynControlData;
|
|
NewPasswordEdit: TWinControl;
|
|
NewPasswordRetypeEdit: TWinControl;
|
|
OldPasswordEdit: TWinControl;
|
|
procedure CancelBtnClick(Sender: TObject);
|
|
procedure ChangeBtnClick(Sender: TObject);
|
|
procedure FormClose(Sender: TObject; var Action: TCloseAction);
|
|
procedure FormShow(Sender: TObject);
|
|
function GetNewPassword: string;
|
|
function GetNewPasswordRetype: string;
|
|
function GetOldPassword: string;
|
|
procedure ResizeFormControls;
|
|
procedure SetOptions(const Value: TJvBaseDBPasswordDialogOptions);
|
|
protected
|
|
function ChangePasswordInSession(NewPassword: string): Boolean; virtual;
|
|
function CheckAllowedCharacters(const NewPassword: string): Boolean;
|
|
procedure ClearControlInterfaceObjects; virtual;
|
|
procedure CreateFormControls(aForm: TForm); override;
|
|
function GetPasswordFromSession: string; virtual;
|
|
property NewPassword: string read GetNewPassword;
|
|
property NewPasswordRetype: string read GetNewPasswordRetype;
|
|
property OldPassword: string read GetOldPassword;
|
|
public
|
|
constructor Create(AOwner: TComponent); override;
|
|
destructor Destroy; override;
|
|
function ChangePassword: Boolean;
|
|
published
|
|
property Options: TJvBaseDBPasswordDialogOptions read FOptions write SetOptions;
|
|
property AfterTransferPasswordFromSession: TJvPasswordDialogModifyPasswordEvent
|
|
read FAfterTransferPasswordFromSession write
|
|
FAfterTransferPasswordFromSession;
|
|
property BeforeTransferPasswordToSession: TJvPasswordDialogModifyPasswordEvent
|
|
read FBeforeTransferPasswordToSession write
|
|
FBeforeTransferPasswordToSession;
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
const
|
|
UnitVersioning: TUnitVersionInfo = (
|
|
RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_39/run/JvBaseDBPasswordDialog.pas $';
|
|
Revision: '$Revision: 12461 $';
|
|
Date: '$Date: 2009-08-14 19:21:33 +0200 (ven., 14 août 2009) $';
|
|
LogPath: 'JVCL\run'
|
|
);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
implementation
|
|
|
|
uses
|
|
Sysutils, Types, ExtCtrls, ComCtrls, StdCtrls, JvResources, JvdsADialogs,
|
|
Dialogs;
|
|
|
|
|
|
constructor TJvBaseDBPasswordDialog.Create(AOwner: TComponent);
|
|
begin
|
|
inherited Create(AOwner);
|
|
FOptions := TJvBaseDBPasswordDialogOptions.Create();
|
|
end;
|
|
|
|
destructor TJvBaseDBPasswordDialog.Destroy;
|
|
begin
|
|
FreeAndNil(FOptions);
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialog.CancelBtnClick(Sender: TObject);
|
|
begin
|
|
DBDialog.ModalResult := mrCancel;
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialog.ChangeBtnClick(Sender: TObject);
|
|
begin
|
|
if not ChangeBtn.Enabled then
|
|
Exit;
|
|
if not ChangePassword then
|
|
DBDialog.ModalResult := mrNone
|
|
else
|
|
DBDialog.ModalResult := mrOk;
|
|
end;
|
|
|
|
function TJvBaseDBPasswordDialog.ChangePassword: Boolean;
|
|
var
|
|
SessionPassword: string;
|
|
begin
|
|
Result := False;
|
|
try
|
|
if Options.CheckOldPassword then
|
|
begin
|
|
SessionPassword := GetPasswordFromSession;
|
|
if Assigned(AfterTransferPasswordFromSession) then
|
|
AfterTransferPasswordFromSession(SessionPassword);
|
|
if not (OldPassword = SessionPassword) then
|
|
begin
|
|
JVDsaDialogs.MessageDlg(RsOldPasswordsMismatch, mtError, [mbok], 0, dckScreen,
|
|
0, mbDefault, mbDefault, mbDefault, DynControlEngine);
|
|
exit;
|
|
end;
|
|
end;
|
|
if not (NewPassword = NewPasswordRetype) then
|
|
begin
|
|
JVDsaDialogs.MessageDlg(RsPasswordsMismatch, mtError, [mbok], 0, dckScreen,
|
|
0, mbDefault, mbDefault, mbDefault, DynControlEngine);
|
|
Exit;
|
|
end;
|
|
if (Length(NewPassword) < Options.MinPasswordLength) then
|
|
begin
|
|
JVDsaDialogs.MessageDlg(Format(RsPasswordLengthToShort, [Options.MinPasswordLength]), mtError, [mbok], 0,
|
|
dckScreen,
|
|
0, mbDefault, mbDefault, mbDefault, DynControlEngine);
|
|
exit;
|
|
end;
|
|
if not CheckAllowedCharacters(NewPassword) then
|
|
begin
|
|
JVDsaDialogs.MessageDlg(Format(RsPasswordNotAllowedCharacters, [Options.MinPasswordLength]), mtError, [mbok], 0,
|
|
dckScreen,
|
|
0, mbDefault, mbDefault, mbDefault, DynControlEngine);
|
|
exit;
|
|
end;
|
|
|
|
if Assigned(BeforeTransferPasswordToSession) then
|
|
BeforeTransferPasswordToSession(SessionPassword);
|
|
Result := ChangePasswordInSession(NewPassword);
|
|
if Result then
|
|
JVDsaDialogs.MessageDlg(RsPasswordChanged, mtInformation, [mbOK], 0, dckScreen,
|
|
0, mbDefault, mbDefault, mbDefault, DynControlEngine)
|
|
else
|
|
JVDsaDialogs.MessageDlg(RsPasswordNotChanged, mtInformation, [mbOK], 0, dckScreen,
|
|
0, mbDefault, mbDefault, mbDefault, DynControlEngine);
|
|
except
|
|
on E: Exception do
|
|
JVDsaDialogs.MessageDlg(E.Message, mtError, [mbOK], 0, dckScreen,
|
|
0, mbDefault, mbDefault, mbDefault, DynControlEngine);
|
|
end;
|
|
end;
|
|
|
|
function TJvBaseDBPasswordDialog.ChangePasswordInSession(NewPassword: string):
|
|
Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
function TJvBaseDBPasswordDialog.CheckAllowedCharacters(const NewPassword:
|
|
string): Boolean;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
if Options.AllowedPasswordCharacters <> '' then
|
|
begin
|
|
Result := False;
|
|
for I := 1 to Length(NewPassword) - 1 do
|
|
if Pos(NewPassword[i], Options.AllowedPasswordCharacters) <= 0 then
|
|
Exit;
|
|
end;
|
|
Result := True;
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialog.ClearControlInterfaceObjects;
|
|
begin
|
|
INewPasswordEditData := nil;
|
|
INewPasswordRetypeEditData := nil;
|
|
IOldPasswordEditData := nil;
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialog.CreateFormControls(aForm: TForm);
|
|
var
|
|
MainPanel: TWinControl;
|
|
LabelControl: TControl;
|
|
IDynControlLabel: IJvDynControlLabel;
|
|
IDynControlBevelBorder: IJvDynControlBevelBorder;
|
|
IDynControlEdit: IJvDynControlEdit;
|
|
begin
|
|
|
|
aForm.Name := 'DBChangePasswordDialog';
|
|
aForm.Left := 472;
|
|
aForm.Top := 229;
|
|
aForm.BorderIcons := [biSystemMenu, biMinimize, biMaximize, biHelp];
|
|
aForm.BorderStyle := bsDialog;
|
|
aForm.Caption := RsChangePassword;
|
|
aForm.ClientHeight := 415;
|
|
aForm.ClientWidth := 317;
|
|
aForm.Position := poScreenCenter;
|
|
aForm.OnClose := FormClose;
|
|
aForm.OnShow := FormShow;
|
|
|
|
ButtonPanel := DynControlEngine.CreatePanelControl(aForm, aForm, 'ButtonPanel', '', alBottom);
|
|
ChangeBtn := DynControlEngine.CreateButton(AForm, ButtonPanel, 'ChangeBtn',
|
|
RsChangeButtonCaption, '', ChangeBtnClick, True, False);
|
|
ChangeBtn.Left := 60;
|
|
ChangeBtn.Top := 4;
|
|
ChangeBtn.Width := 90;
|
|
ChangeBtn.Height := 25;
|
|
CancelBtn := DynControlEngine.CreateButton(AForm, ButtonPanel, 'CancelBtn',
|
|
RsButtonCancelCaption, '', CancelBtnClick, False, True);
|
|
CancelBtn.Left := 460;
|
|
CancelBtn.Top := 4;
|
|
CancelBtn.Width := 90;
|
|
CancelBtn.Height := 25;
|
|
|
|
ButtonPanel.Height := CancelBtn.Height + 8;
|
|
|
|
MainPanel := DynControlEngine.CreatePanelControl(aForm, aForm, 'MainPanel', '', alClient);
|
|
MainPanel.TabOrder := 0;
|
|
if Supports(MainPanel, IJvDynControlBevelBorder, IDynControlBevelBorder) then
|
|
IDynControlBevelBorder.ControlSetBorderWidth(5);
|
|
if Supports(MainPanel, IJvDynControlBevelBorder, IDynControlBevelBorder) then
|
|
IDynControlBevelBorder.ControlSetBevelOuter(bvNone);
|
|
|
|
if Options.CheckOldPassword then
|
|
begin
|
|
LabelControl := DynControlEngine.CreateLabelControl(aForm, MainPanel, 'OldPasswortLabel', RsOldPasswordLabel, nil);
|
|
LabelControl.Align := alTop;
|
|
OldPasswordEdit := DynControlEngine.CreateEditControl(aForm, MainPanel, 'OldPasswortEdit');
|
|
OldPasswordEdit.Align := alTop;
|
|
OldPasswordEdit.TabOrder := 0;
|
|
Supports(OldPasswordEdit, IJvDynControlData, IOldPasswordEditData);
|
|
IOldPasswordEditData.ControlValue := '';
|
|
if Supports(OldPasswordEdit, IJvDynControlEdit, IDynControlEdit) then
|
|
IDynControlEdit.ControlSetPasswordChar('*');
|
|
if Supports(LabelControl, IJvDynControlLabel, IDynControlLabel) then
|
|
IDynControlLabel.ControlSetFocusControl(OldPasswordEdit);
|
|
end;
|
|
LabelControl := DynControlEngine.CreateLabelControl(aForm, MainPanel, 'NewPasswortLabel', RsNewPasswordLabel, nil);
|
|
LabelControl.Align := alTop;
|
|
NewPasswordEdit := DynControlEngine.CreateEditControl(aForm, MainPanel, 'NewPasswortEdit');
|
|
NewPasswordEdit.Align := alTop;
|
|
NewPasswordEdit.TabOrder := 1;
|
|
Supports(NewPasswordEdit, IJvDynControlData, INewPasswordEditData);
|
|
INewPasswordEditData.ControlValue := '';
|
|
if Supports(NewPasswordEdit, IJvDynControlEdit, IDynControlEdit) then
|
|
IDynControlEdit.ControlSetPasswordChar('*');
|
|
if Supports(LabelControl, IJvDynControlLabel, IDynControlLabel) then
|
|
IDynControlLabel.ControlSetFocusControl(NewPasswordEdit);
|
|
LabelControl := DynControlEngine.CreateLabelControl(aForm, MainPanel, 'NewPasswortLabelRetype',
|
|
RsConfirmPasswordLabel, nil);
|
|
LabelControl.Align := alTop;
|
|
NewPasswordRetypeEdit := DynControlEngine.CreateEditControl(aForm, MainPanel, 'NewPasswortRetypeEdit');
|
|
NewPasswordRetypeEdit.Align := alTop;
|
|
NewPasswordRetypeEdit.TabOrder := 2;
|
|
Supports(NewPasswordRetypeEdit, IJvDynControlData, INewPasswordRetypeEditData);
|
|
INewPasswordRetypeEditData.ControlValue := '';
|
|
if Supports(INewPasswordRetypeEditData, IJvDynControlEdit, IDynControlEdit) then
|
|
IDynControlEdit.ControlSetPasswordChar('*');
|
|
if Supports(LabelControl, IJvDynControlLabel, IDynControlLabel) then
|
|
IDynControlLabel.ControlSetFocusControl(NewPasswordRetypeEdit);
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialog.FormClose(Sender: TObject; var Action:
|
|
TCloseAction);
|
|
begin
|
|
ClearControlInterfaceObjects;
|
|
Action := caFree;
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialog.FormShow(Sender: TObject);
|
|
begin
|
|
ResizeFormControls;
|
|
end;
|
|
|
|
function TJvBaseDBPasswordDialog.GetNewPassword: string;
|
|
begin
|
|
Result := INewPasswordEditData.ControlValue;
|
|
end;
|
|
|
|
function TJvBaseDBPasswordDialog.GetNewPasswordRetype: string;
|
|
begin
|
|
Result := INewPasswordRetypeEditData.ControlValue;
|
|
end;
|
|
|
|
function TJvBaseDBPasswordDialog.GetOldPassword: string;
|
|
begin
|
|
if assigned(IOldPasswordEditData) then
|
|
Result := IOldPasswordEditData.ControlValue
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function TJvBaseDBPasswordDialog.GetPasswordFromSession: string;
|
|
begin
|
|
Result := '';
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialog.ResizeFormControls;
|
|
begin
|
|
if Assigned(DBDialog) then
|
|
begin
|
|
CancelBtn.Left := DBDialog.ClientWidth - CancelBtn.Width - 5;
|
|
ChangeBtn.Left := CancelBtn.Left - ChangeBtn.Width - 5;
|
|
DBDialog.ClientHeight := NewPasswordRetypeEdit.Top + NewPasswordRetypeEdit.Height + 2 + ButtonPanel.Height;
|
|
end;
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialog.SetOptions(const Value:
|
|
TJvBaseDBPasswordDialogOptions);
|
|
begin
|
|
FOptions.Assign(Value);
|
|
end;
|
|
|
|
constructor TJvBaseDBPasswordDialogOptions.Create;
|
|
begin
|
|
inherited Create;
|
|
FCheckOldPassword := True;
|
|
FMinPasswordLength := 4;
|
|
FAllowedPasswordCharacters := 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_#$';
|
|
end;
|
|
|
|
procedure TJvBaseDBPasswordDialogOptions.Assign(Source: TPersistent);
|
|
begin
|
|
if Source is TJvBaseDBPasswordDialogOptions then
|
|
begin
|
|
CheckOldPassword := TJvBaseDBPasswordDialogOptions(Source).CheckOldPassword;
|
|
MinPasswordLength := TJvBaseDBPasswordDialogOptions(Source).MinPasswordLength;
|
|
AllowedPasswordCharacters := TJvBaseDBPasswordDialogOptions(Source).AllowedPasswordCharacters;
|
|
end
|
|
else
|
|
inherited Assign(Source);
|
|
end;
|
|
|
|
{$IFDEF UNITVERSIONING}
|
|
initialization
|
|
RegisterUnitVersion(HInstance, UnitVersioning);
|
|
|
|
finalization
|
|
UnregisterUnitVersion(HInstance);
|
|
{$ENDIF UNITVERSIONING}
|
|
|
|
end.
|