mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
Session manager: Add checkbox option for users who want to be prompted for username + password rather than saving that to registry. Prompt window itself is called from within TMySQLConnection.SetActive.
This commit is contained in:
@ -37,7 +37,8 @@ uses
|
||||
mysql_connection in '..\..\source\mysql_connection.pas',
|
||||
trigger_editor in '..\..\source\trigger_editor.pas' {frmTriggerEditor: TFrame},
|
||||
searchreplace in '..\..\source\searchreplace.pas' {frmSearchReplace},
|
||||
event_editor in '..\..\source\event_editor.pas' {frmEventEditor: TFrame};
|
||||
event_editor in '..\..\source\event_editor.pas' {frmEventEditor: TFrame},
|
||||
loginform in '..\..\source\loginform.pas' {frmLogin};
|
||||
|
||||
{$R ..\..\res\icon.RES}
|
||||
{$R ..\..\res\version.RES}
|
||||
|
@ -203,6 +203,9 @@
|
||||
<Form>frmEventEditor</Form>
|
||||
<DesignClass>TFrame</DesignClass>
|
||||
</DCCReference>
|
||||
<DCCReference Include="..\..\source\loginform.pas">
|
||||
<Form>frmLogin</Form>
|
||||
</DCCReference>
|
||||
<RcCompile Include="..\..\res\updater.rc">
|
||||
<Form>updater.res</Form>
|
||||
</RcCompile>
|
||||
|
@ -260,7 +260,7 @@ object connform: Tconnform
|
||||
object editPassword: TEdit
|
||||
Left = 101
|
||||
Top = 92
|
||||
Width = 197
|
||||
Width = 126
|
||||
Height = 21
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
PasswordChar = '*'
|
||||
@ -312,6 +312,16 @@ object connform: Tconnform
|
||||
OnChange = Modification
|
||||
OnDropDown = comboDatabasesDropDown
|
||||
end
|
||||
object chkLoginPrompt: TCheckBox
|
||||
Left = 233
|
||||
Top = 94
|
||||
Width = 65
|
||||
Height = 17
|
||||
Anchors = [akTop, akRight]
|
||||
Caption = 'Prompt'
|
||||
TabOrder = 9
|
||||
OnClick = chkLoginPromptClick
|
||||
end
|
||||
end
|
||||
object tabSSHtunnel: TTabSheet
|
||||
Caption = 'SSH tunnel'
|
||||
|
@ -75,6 +75,7 @@ type
|
||||
lblDownloadPlink: TLabel;
|
||||
comboDatabases: TComboBox;
|
||||
lblDatabase: TLabel;
|
||||
chkLoginPrompt: TCheckBox;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure btnOpenClick(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
@ -107,6 +108,7 @@ type
|
||||
procedure editHostChange(Sender: TObject);
|
||||
procedure lblDownloadPlinkClick(Sender: TObject);
|
||||
procedure comboDatabasesDropDown(Sender: TObject);
|
||||
procedure chkLoginPromptClick(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
FLoaded: Boolean;
|
||||
@ -217,6 +219,7 @@ begin
|
||||
MainReg.WriteString(REGNAME_HOST, editHost.Text);
|
||||
MainReg.WriteString(REGNAME_USER, editUsername.Text);
|
||||
MainReg.WriteString(REGNAME_PASSWORD, encrypt(editPassword.Text));
|
||||
MainReg.WriteBool(REGNAME_LOGINPROMPT, chkLoginPrompt.Checked);
|
||||
MainReg.WriteString(REGNAME_PORT, IntToStr(updownPort.Position));
|
||||
MainReg.WriteInteger(REGNAME_NETTYPE, comboNetType.ItemIndex);
|
||||
MainReg.WriteBool(REGNAME_COMPRESSED, chkCompressed.Checked);
|
||||
@ -339,6 +342,7 @@ begin
|
||||
Result.Hostname := editHost.Text;
|
||||
Result.Username := editUsername.Text;
|
||||
Result.Password := editPassword.Text;
|
||||
Result.LoginPrompt := chkLoginPrompt.Checked;
|
||||
Result.Port := updownPort.Position;
|
||||
Result.AllDatabases := comboDatabases.Text;
|
||||
Result.SSHHost := editSSHHost.Text;
|
||||
@ -434,6 +438,7 @@ begin
|
||||
editHost.Text := FOrgParams.Hostname;
|
||||
editUsername.Text := FOrgParams.Username;
|
||||
editPassword.Text := FOrgParams.Password;
|
||||
chkLoginPrompt.Checked := FOrgParams.LoginPrompt;
|
||||
updownPort.Position := FOrgParams.Port;
|
||||
chkCompressed.Checked := opCompress in FOrgParams.Options;
|
||||
comboDatabases.Text := FOrgParams.AllDatabases;
|
||||
@ -545,6 +550,21 @@ begin
|
||||
Modification(Sender);
|
||||
end;
|
||||
|
||||
|
||||
procedure Tconnform.chkLoginPromptClick(Sender: TObject);
|
||||
var
|
||||
DoEnable: Boolean;
|
||||
begin
|
||||
// Disable password input if user wants to be prompted
|
||||
DoEnable := not TCheckBox(Sender).Checked;
|
||||
lblUsername.Enabled := DoEnable;
|
||||
editUsername.Enabled := DoEnable;
|
||||
lblPassword.Enabled := DoEnable;
|
||||
editPassword.Enabled := DoEnable;
|
||||
Modification(Sender);
|
||||
end;
|
||||
|
||||
|
||||
procedure Tconnform.comboDatabasesDropDown(Sender: TObject);
|
||||
var
|
||||
Connection: TMySQLConnection;
|
||||
@ -575,6 +595,7 @@ begin
|
||||
if FLoaded then begin
|
||||
FSessionModified := (FOrgParams.Hostname <> editHost.Text)
|
||||
or (FOrgParams.Username <> editUsername.Text)
|
||||
or (FOrgParams.LoginPrompt <> chkLoginPrompt.Checked)
|
||||
or (FOrgParams.Port <> updownPort.Position)
|
||||
or ((opCompress in FOrgParams.Options) <> chkCompressed.Checked)
|
||||
or (FOrgParams.NetType <> TNetType(comboNetType.ItemIndex))
|
||||
|
@ -121,6 +121,7 @@ const
|
||||
REGNAME_USER = 'User';
|
||||
DEFAULT_USER = 'root';
|
||||
REGNAME_PASSWORD = 'Password';
|
||||
REGNAME_LOGINPROMPT = 'LoginPrompt';
|
||||
REGNAME_PORT = 'Port';
|
||||
DEFAULT_PORT = 3306;
|
||||
REGNAME_PLINKEXE = 'PlinkExecutable';
|
||||
|
@ -3044,6 +3044,7 @@ begin
|
||||
Result.Hostname := GetRegValue(REGNAME_HOST, '', Session);
|
||||
Result.Username := GetRegValue(REGNAME_USER, '', Session);
|
||||
Result.Password := decrypt(GetRegValue(REGNAME_PASSWORD, '', Session));
|
||||
Result.LoginPrompt := GetRegValue(REGNAME_LOGINPROMPT, False, Session);
|
||||
Result.Port := StrToIntDef(GetRegValue(REGNAME_PORT, '', Session), DEFAULT_PORT);
|
||||
Result.AllDatabases := GetRegValue(REGNAME_DATABASES, '', Session);
|
||||
Result.SSHHost := GetRegValue(REGNAME_SSHHOST, '', Session);
|
||||
|
78
source/loginform.dfm
Normal file
78
source/loginform.dfm
Normal file
@ -0,0 +1,78 @@
|
||||
object frmLogin: TfrmLogin
|
||||
Left = 0
|
||||
Top = 0
|
||||
BorderStyle = bsDialog
|
||||
Caption = 'Login'
|
||||
ClientHeight = 117
|
||||
ClientWidth = 251
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
OldCreateOrder = False
|
||||
Position = poScreenCenter
|
||||
OnCreate = FormCreate
|
||||
OnShow = FormShow
|
||||
DesignSize = (
|
||||
251
|
||||
117)
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object lblPrompt: TLabel
|
||||
Left = 8
|
||||
Top = 8
|
||||
Width = 44
|
||||
Height = 13
|
||||
Caption = 'lblPrompt'
|
||||
end
|
||||
object lblUsername: TLabel
|
||||
Left = 8
|
||||
Top = 33
|
||||
Width = 52
|
||||
Height = 13
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = '&Username:'
|
||||
FocusControl = editUsername
|
||||
end
|
||||
object lblPassword: TLabel
|
||||
Left = 8
|
||||
Top = 60
|
||||
Width = 50
|
||||
Height = 13
|
||||
Anchors = [akLeft, akBottom]
|
||||
Caption = '&Password:'
|
||||
FocusControl = editPassword
|
||||
end
|
||||
object btnOK: TButton
|
||||
Left = 168
|
||||
Top = 84
|
||||
Width = 75
|
||||
Height = 25
|
||||
Anchors = [akRight, akBottom]
|
||||
Caption = 'Login'
|
||||
Default = True
|
||||
ModalResult = 1
|
||||
TabOrder = 2
|
||||
end
|
||||
object editPassword: TEdit
|
||||
Left = 72
|
||||
Top = 57
|
||||
Width = 171
|
||||
Height = 21
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
PasswordChar = '*'
|
||||
TabOrder = 1
|
||||
Text = 'editPassword'
|
||||
end
|
||||
object editUsername: TEdit
|
||||
Left = 72
|
||||
Top = 30
|
||||
Width = 171
|
||||
Height = 21
|
||||
Anchors = [akLeft, akRight, akBottom]
|
||||
TabOrder = 0
|
||||
Text = 'editUsername'
|
||||
end
|
||||
end
|
61
source/loginform.pas
Normal file
61
source/loginform.pas
Normal file
@ -0,0 +1,61 @@
|
||||
unit loginform;
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
||||
Dialogs, StdCtrls;
|
||||
|
||||
type
|
||||
TfrmLogin = class(TForm)
|
||||
btnOK: TButton;
|
||||
editPassword: TEdit;
|
||||
lblPrompt: TLabel;
|
||||
editUsername: TEdit;
|
||||
lblUsername: TLabel;
|
||||
lblPassword: TLabel;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
private
|
||||
{ Private declarations }
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
procedure LoginPrompt(ACaption: String; var AUsername, APassword: String);
|
||||
|
||||
implementation
|
||||
|
||||
uses helpers;
|
||||
|
||||
{$R *.dfm}
|
||||
{$I const.inc}
|
||||
|
||||
procedure LoginPrompt(ACaption: String; var AUsername, APassword: String);
|
||||
var
|
||||
frm: TfrmLogin;
|
||||
begin
|
||||
// Create login box and pass back user + pass
|
||||
frm := TfrmLogin.Create(nil);
|
||||
frm.lblPrompt.Caption := ACaption;
|
||||
frm.editUsername.Text := AUsername;
|
||||
frm.editPassword.Text := APassword;
|
||||
frm.ShowModal;
|
||||
AUsername := frm.editUsername.Text;
|
||||
APassword := frm.editPassword.Text;
|
||||
frm.Free;
|
||||
end;
|
||||
|
||||
|
||||
procedure TfrmLogin.FormCreate(Sender: TObject);
|
||||
begin
|
||||
InheritFont(Font);
|
||||
Caption := APPNAME + ' - Login';
|
||||
end;
|
||||
|
||||
procedure TfrmLogin.FormShow(Sender: TObject);
|
||||
begin
|
||||
editUsername.SetFocus;
|
||||
end;
|
||||
|
||||
end.
|
@ -151,6 +151,7 @@ type
|
||||
FSSHHost, FSSHUser, FSSHPassword, FSSHPlinkExe, FSSHPrivateKey: String;
|
||||
FPort, FSSHPort, FSSHLocalPort: Integer;
|
||||
FOptions: TMySQLClientOptions;
|
||||
FLoginPrompt: Boolean;
|
||||
public
|
||||
constructor Create;
|
||||
published
|
||||
@ -159,6 +160,7 @@ type
|
||||
property Port: Integer read FPort write FPort;
|
||||
property Username: String read FUsername write FUsername;
|
||||
property Password: String read FPassword write FPassword;
|
||||
property LoginPrompt: Boolean read FLoginPrompt write FLoginPrompt;
|
||||
property AllDatabases: String read FAllDatabases write FAllDatabases;
|
||||
property StartupScriptFilename: String read FStartupScriptFilename write FStartupScriptFilename;
|
||||
property Options: TMySQLClientOptions read FOptions write FOptions;
|
||||
@ -369,7 +371,7 @@ type
|
||||
|
||||
implementation
|
||||
|
||||
uses helpers;
|
||||
uses helpers, loginform;
|
||||
|
||||
|
||||
|
||||
@ -426,13 +428,22 @@ procedure TMySQLConnection.SetActive( Value: Boolean );
|
||||
var
|
||||
Connected: PMYSQL;
|
||||
ClientFlags, FinalPort: Integer;
|
||||
Error, tmpdb, FinalHost, FinalSocket, PlinkCmd: String;
|
||||
Error, tmpdb, FinalHost, FinalSocket, PlinkCmd, UsernamePrompt, PasswordPrompt: String;
|
||||
SSLResult: Byte;
|
||||
UsingPass, Protocol, CurCharset: String;
|
||||
StartupInfo: TStartupInfo;
|
||||
ExitCode: LongWord;
|
||||
begin
|
||||
if Value and (FHandle = nil) then begin
|
||||
// Prompt for password
|
||||
if FParameters.LoginPrompt then begin
|
||||
UsernamePrompt := FParameters.Username;
|
||||
PasswordPrompt := FParameters.Password;
|
||||
LoginPrompt('Login to '+FParameters.Hostname+':', UsernamePrompt, PasswordPrompt);
|
||||
FParameters.Username := UsernamePrompt;
|
||||
FParameters.Password := PasswordPrompt;
|
||||
end;
|
||||
|
||||
// Get handle
|
||||
FHandle := mysql_init(nil);
|
||||
|
||||
|
Reference in New Issue
Block a user