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',
|
mysql_connection in '..\..\source\mysql_connection.pas',
|
||||||
trigger_editor in '..\..\source\trigger_editor.pas' {frmTriggerEditor: TFrame},
|
trigger_editor in '..\..\source\trigger_editor.pas' {frmTriggerEditor: TFrame},
|
||||||
searchreplace in '..\..\source\searchreplace.pas' {frmSearchReplace},
|
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\icon.RES}
|
||||||
{$R ..\..\res\version.RES}
|
{$R ..\..\res\version.RES}
|
||||||
|
@ -203,6 +203,9 @@
|
|||||||
<Form>frmEventEditor</Form>
|
<Form>frmEventEditor</Form>
|
||||||
<DesignClass>TFrame</DesignClass>
|
<DesignClass>TFrame</DesignClass>
|
||||||
</DCCReference>
|
</DCCReference>
|
||||||
|
<DCCReference Include="..\..\source\loginform.pas">
|
||||||
|
<Form>frmLogin</Form>
|
||||||
|
</DCCReference>
|
||||||
<RcCompile Include="..\..\res\updater.rc">
|
<RcCompile Include="..\..\res\updater.rc">
|
||||||
<Form>updater.res</Form>
|
<Form>updater.res</Form>
|
||||||
</RcCompile>
|
</RcCompile>
|
||||||
|
@ -260,7 +260,7 @@ object connform: Tconnform
|
|||||||
object editPassword: TEdit
|
object editPassword: TEdit
|
||||||
Left = 101
|
Left = 101
|
||||||
Top = 92
|
Top = 92
|
||||||
Width = 197
|
Width = 126
|
||||||
Height = 21
|
Height = 21
|
||||||
Anchors = [akLeft, akTop, akRight]
|
Anchors = [akLeft, akTop, akRight]
|
||||||
PasswordChar = '*'
|
PasswordChar = '*'
|
||||||
@ -312,6 +312,16 @@ object connform: Tconnform
|
|||||||
OnChange = Modification
|
OnChange = Modification
|
||||||
OnDropDown = comboDatabasesDropDown
|
OnDropDown = comboDatabasesDropDown
|
||||||
end
|
end
|
||||||
|
object chkLoginPrompt: TCheckBox
|
||||||
|
Left = 233
|
||||||
|
Top = 94
|
||||||
|
Width = 65
|
||||||
|
Height = 17
|
||||||
|
Anchors = [akTop, akRight]
|
||||||
|
Caption = 'Prompt'
|
||||||
|
TabOrder = 9
|
||||||
|
OnClick = chkLoginPromptClick
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object tabSSHtunnel: TTabSheet
|
object tabSSHtunnel: TTabSheet
|
||||||
Caption = 'SSH tunnel'
|
Caption = 'SSH tunnel'
|
||||||
|
@ -75,6 +75,7 @@ type
|
|||||||
lblDownloadPlink: TLabel;
|
lblDownloadPlink: TLabel;
|
||||||
comboDatabases: TComboBox;
|
comboDatabases: TComboBox;
|
||||||
lblDatabase: TLabel;
|
lblDatabase: TLabel;
|
||||||
|
chkLoginPrompt: TCheckBox;
|
||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
procedure btnOpenClick(Sender: TObject);
|
procedure btnOpenClick(Sender: TObject);
|
||||||
procedure FormShow(Sender: TObject);
|
procedure FormShow(Sender: TObject);
|
||||||
@ -107,6 +108,7 @@ type
|
|||||||
procedure editHostChange(Sender: TObject);
|
procedure editHostChange(Sender: TObject);
|
||||||
procedure lblDownloadPlinkClick(Sender: TObject);
|
procedure lblDownloadPlinkClick(Sender: TObject);
|
||||||
procedure comboDatabasesDropDown(Sender: TObject);
|
procedure comboDatabasesDropDown(Sender: TObject);
|
||||||
|
procedure chkLoginPromptClick(Sender: TObject);
|
||||||
private
|
private
|
||||||
{ Private declarations }
|
{ Private declarations }
|
||||||
FLoaded: Boolean;
|
FLoaded: Boolean;
|
||||||
@ -217,6 +219,7 @@ begin
|
|||||||
MainReg.WriteString(REGNAME_HOST, editHost.Text);
|
MainReg.WriteString(REGNAME_HOST, editHost.Text);
|
||||||
MainReg.WriteString(REGNAME_USER, editUsername.Text);
|
MainReg.WriteString(REGNAME_USER, editUsername.Text);
|
||||||
MainReg.WriteString(REGNAME_PASSWORD, encrypt(editPassword.Text));
|
MainReg.WriteString(REGNAME_PASSWORD, encrypt(editPassword.Text));
|
||||||
|
MainReg.WriteBool(REGNAME_LOGINPROMPT, chkLoginPrompt.Checked);
|
||||||
MainReg.WriteString(REGNAME_PORT, IntToStr(updownPort.Position));
|
MainReg.WriteString(REGNAME_PORT, IntToStr(updownPort.Position));
|
||||||
MainReg.WriteInteger(REGNAME_NETTYPE, comboNetType.ItemIndex);
|
MainReg.WriteInteger(REGNAME_NETTYPE, comboNetType.ItemIndex);
|
||||||
MainReg.WriteBool(REGNAME_COMPRESSED, chkCompressed.Checked);
|
MainReg.WriteBool(REGNAME_COMPRESSED, chkCompressed.Checked);
|
||||||
@ -339,6 +342,7 @@ begin
|
|||||||
Result.Hostname := editHost.Text;
|
Result.Hostname := editHost.Text;
|
||||||
Result.Username := editUsername.Text;
|
Result.Username := editUsername.Text;
|
||||||
Result.Password := editPassword.Text;
|
Result.Password := editPassword.Text;
|
||||||
|
Result.LoginPrompt := chkLoginPrompt.Checked;
|
||||||
Result.Port := updownPort.Position;
|
Result.Port := updownPort.Position;
|
||||||
Result.AllDatabases := comboDatabases.Text;
|
Result.AllDatabases := comboDatabases.Text;
|
||||||
Result.SSHHost := editSSHHost.Text;
|
Result.SSHHost := editSSHHost.Text;
|
||||||
@ -434,6 +438,7 @@ begin
|
|||||||
editHost.Text := FOrgParams.Hostname;
|
editHost.Text := FOrgParams.Hostname;
|
||||||
editUsername.Text := FOrgParams.Username;
|
editUsername.Text := FOrgParams.Username;
|
||||||
editPassword.Text := FOrgParams.Password;
|
editPassword.Text := FOrgParams.Password;
|
||||||
|
chkLoginPrompt.Checked := FOrgParams.LoginPrompt;
|
||||||
updownPort.Position := FOrgParams.Port;
|
updownPort.Position := FOrgParams.Port;
|
||||||
chkCompressed.Checked := opCompress in FOrgParams.Options;
|
chkCompressed.Checked := opCompress in FOrgParams.Options;
|
||||||
comboDatabases.Text := FOrgParams.AllDatabases;
|
comboDatabases.Text := FOrgParams.AllDatabases;
|
||||||
@ -545,6 +550,21 @@ begin
|
|||||||
Modification(Sender);
|
Modification(Sender);
|
||||||
end;
|
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);
|
procedure Tconnform.comboDatabasesDropDown(Sender: TObject);
|
||||||
var
|
var
|
||||||
Connection: TMySQLConnection;
|
Connection: TMySQLConnection;
|
||||||
@ -575,6 +595,7 @@ begin
|
|||||||
if FLoaded then begin
|
if FLoaded then begin
|
||||||
FSessionModified := (FOrgParams.Hostname <> editHost.Text)
|
FSessionModified := (FOrgParams.Hostname <> editHost.Text)
|
||||||
or (FOrgParams.Username <> editUsername.Text)
|
or (FOrgParams.Username <> editUsername.Text)
|
||||||
|
or (FOrgParams.LoginPrompt <> chkLoginPrompt.Checked)
|
||||||
or (FOrgParams.Port <> updownPort.Position)
|
or (FOrgParams.Port <> updownPort.Position)
|
||||||
or ((opCompress in FOrgParams.Options) <> chkCompressed.Checked)
|
or ((opCompress in FOrgParams.Options) <> chkCompressed.Checked)
|
||||||
or (FOrgParams.NetType <> TNetType(comboNetType.ItemIndex))
|
or (FOrgParams.NetType <> TNetType(comboNetType.ItemIndex))
|
||||||
|
@ -121,6 +121,7 @@ const
|
|||||||
REGNAME_USER = 'User';
|
REGNAME_USER = 'User';
|
||||||
DEFAULT_USER = 'root';
|
DEFAULT_USER = 'root';
|
||||||
REGNAME_PASSWORD = 'Password';
|
REGNAME_PASSWORD = 'Password';
|
||||||
|
REGNAME_LOGINPROMPT = 'LoginPrompt';
|
||||||
REGNAME_PORT = 'Port';
|
REGNAME_PORT = 'Port';
|
||||||
DEFAULT_PORT = 3306;
|
DEFAULT_PORT = 3306;
|
||||||
REGNAME_PLINKEXE = 'PlinkExecutable';
|
REGNAME_PLINKEXE = 'PlinkExecutable';
|
||||||
|
@ -3044,6 +3044,7 @@ begin
|
|||||||
Result.Hostname := GetRegValue(REGNAME_HOST, '', Session);
|
Result.Hostname := GetRegValue(REGNAME_HOST, '', Session);
|
||||||
Result.Username := GetRegValue(REGNAME_USER, '', Session);
|
Result.Username := GetRegValue(REGNAME_USER, '', Session);
|
||||||
Result.Password := decrypt(GetRegValue(REGNAME_PASSWORD, '', 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.Port := StrToIntDef(GetRegValue(REGNAME_PORT, '', Session), DEFAULT_PORT);
|
||||||
Result.AllDatabases := GetRegValue(REGNAME_DATABASES, '', Session);
|
Result.AllDatabases := GetRegValue(REGNAME_DATABASES, '', Session);
|
||||||
Result.SSHHost := GetRegValue(REGNAME_SSHHOST, '', 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;
|
FSSHHost, FSSHUser, FSSHPassword, FSSHPlinkExe, FSSHPrivateKey: String;
|
||||||
FPort, FSSHPort, FSSHLocalPort: Integer;
|
FPort, FSSHPort, FSSHLocalPort: Integer;
|
||||||
FOptions: TMySQLClientOptions;
|
FOptions: TMySQLClientOptions;
|
||||||
|
FLoginPrompt: Boolean;
|
||||||
public
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
published
|
published
|
||||||
@ -159,6 +160,7 @@ type
|
|||||||
property Port: Integer read FPort write FPort;
|
property Port: Integer read FPort write FPort;
|
||||||
property Username: String read FUsername write FUsername;
|
property Username: String read FUsername write FUsername;
|
||||||
property Password: String read FPassword write FPassword;
|
property Password: String read FPassword write FPassword;
|
||||||
|
property LoginPrompt: Boolean read FLoginPrompt write FLoginPrompt;
|
||||||
property AllDatabases: String read FAllDatabases write FAllDatabases;
|
property AllDatabases: String read FAllDatabases write FAllDatabases;
|
||||||
property StartupScriptFilename: String read FStartupScriptFilename write FStartupScriptFilename;
|
property StartupScriptFilename: String read FStartupScriptFilename write FStartupScriptFilename;
|
||||||
property Options: TMySQLClientOptions read FOptions write FOptions;
|
property Options: TMySQLClientOptions read FOptions write FOptions;
|
||||||
@ -369,7 +371,7 @@ type
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
uses helpers;
|
uses helpers, loginform;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -426,13 +428,22 @@ procedure TMySQLConnection.SetActive( Value: Boolean );
|
|||||||
var
|
var
|
||||||
Connected: PMYSQL;
|
Connected: PMYSQL;
|
||||||
ClientFlags, FinalPort: Integer;
|
ClientFlags, FinalPort: Integer;
|
||||||
Error, tmpdb, FinalHost, FinalSocket, PlinkCmd: String;
|
Error, tmpdb, FinalHost, FinalSocket, PlinkCmd, UsernamePrompt, PasswordPrompt: String;
|
||||||
SSLResult: Byte;
|
SSLResult: Byte;
|
||||||
UsingPass, Protocol, CurCharset: String;
|
UsingPass, Protocol, CurCharset: String;
|
||||||
StartupInfo: TStartupInfo;
|
StartupInfo: TStartupInfo;
|
||||||
ExitCode: LongWord;
|
ExitCode: LongWord;
|
||||||
begin
|
begin
|
||||||
if Value and (FHandle = nil) then 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
|
// Get handle
|
||||||
FHandle := mysql_init(nil);
|
FHandle := mysql_init(nil);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user