Issue #2014: code refactor: move ParseSSLSettings into TUser class

This commit is contained in:
Ansgar Becker
2024-08-30 08:14:55 +02:00
parent 3ae63d113f
commit 57d9df2aed

View File

@ -22,6 +22,7 @@ type
public public
constructor Create; constructor Create;
function HostRequiresNameResolve: Boolean; function HostRequiresNameResolve: Boolean;
procedure ParseSSLSettings(GrantOrCreate: String);
end; end;
PUser = ^TUser; PUser = ^TUser;
TUserList = TObjectList<TUser>; TUserList = TObjectList<TUser>;
@ -167,7 +168,6 @@ type
procedure SetModified(Value: Boolean); procedure SetModified(Value: Boolean);
property Modified: Boolean read FModified write SetModified; property Modified: Boolean read FModified write SetModified;
function GetPrivByNode(Node: PVirtualNode): TPrivObj; function GetPrivByNode(Node: PVirtualNode): TPrivObj;
procedure ParseSSLSettings(GrantOrCreate: String; User: TUser);
public public
{ Public declarations } { Public declarations }
end; end;
@ -680,7 +680,7 @@ begin
end; end;
ParseSSLSettings(rxGrant.Match[11], User^); User.ParseSSLSettings(rxGrant.Match[11]);
// WITH .. GRANT OPTION // WITH .. GRANT OPTION
// MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2 // MAX_QUERIES_PER_HOUR 20 MAX_UPDATES_PER_HOUR 10 MAX_CONNECTIONS_PER_HOUR 5 MAX_USER_CONNECTIONS 2
@ -716,11 +716,17 @@ begin
CreateUser := ''; CreateUser := '';
try try
CreateUser := FConnection.GetVar('SHOW CREATE USER '+UserHost); CreateUser := FConnection.GetVar('SHOW CREATE USER '+UserHost);
ParseSSLSettings(CreateUser, User^); User.ParseSSLSettings(CreateUser);
except except
on E:EDbError do; on E:EDbError do;
end; end;
comboSSL.ItemIndex := User.SSL;
comboSSL.OnChange(comboSSL);
editCipher.Text := User.Cipher;
editIssuer.Text := User.Issuer;
editSubject.Text := User.Subject;
// Generate grant code for column privs by hand // Generate grant code for column privs by hand
for Ptmp in FPrivObjects do begin for Ptmp in FPrivObjects do begin
@ -788,47 +794,6 @@ begin
end; end;
procedure TUserManagerForm.ParseSSLSettings(GrantOrCreate: String; User: TUser);
var
rx: TRegExpr;
RequireClause: String;
begin
// REQUIRE SSL X509 ISSUER '456' SUBJECT '789' CIPHER '123' NONE
rx := TRegExpr.Create;
rx.ModifierI := True;
rx.Expression := '\sREQUIRE\s+(.+)';
if rx.Exec(GrantOrCreate) then begin
RequireClause := rx.Match[1];
User.SSL := 0;
User.Cipher := '';
User.Issuer := '';
User.Subject := '';
rx.Expression := '\bSSL\b';
if rx.Exec(RequireClause) then
User.SSL := 1;
rx.Expression := '\bX509\b';
if rx.Exec(RequireClause) then
User.SSL := 2;
rx.Expression := '\bCIPHER\s+''([^'']+)';
if rx.Exec(RequireClause) then
User.Cipher := rx.Match[1];
rx.Expression := '\bISSUER\s+''([^'']+)';
if rx.Exec(RequireClause) then
User.Issuer := rx.Match[1];
rx.Expression := '\bSUBJECT\s+''([^'']+)';
if rx.Exec(RequireClause) then
User.Subject := rx.Match[1];
if IsNotEmpty(User.Cipher) or IsNotEmpty(User.Issuer) or IsNotEmpty(User.Subject) then
User.SSL := 3;
comboSSL.ItemIndex := User.SSL;
comboSSL.OnChange(comboSSL);
editCipher.Text := User.Cipher;
editIssuer.Text := User.Issuer;
editSubject.Text := User.Subject;
end;
end;
procedure TUserManagerForm.listUsersGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; procedure TUserManagerForm.listUsersGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode;
Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex); Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex);
var var
@ -1571,6 +1536,40 @@ begin
rx.Free; rx.Free;
end; end;
procedure TUser.ParseSSLSettings(GrantOrCreate: String);
var
rx: TRegExpr;
RequireClause: String;
begin
// REQUIRE SSL X509 ISSUER '456' SUBJECT '789' CIPHER '123' NONE
rx := TRegExpr.Create;
rx.ModifierI := True;
rx.Expression := '\sREQUIRE\s+(.+)';
if rx.Exec(GrantOrCreate) then begin
RequireClause := rx.Match[1];
SSL := 0;
Cipher := '';
Issuer := '';
Subject := '';
rx.Expression := '\bSSL\b';
if rx.Exec(RequireClause) then
SSL := 1;
rx.Expression := '\bX509\b';
if rx.Exec(RequireClause) then
SSL := 2;
rx.Expression := '\bCIPHER\s+''([^'']+)';
if rx.Exec(RequireClause) then
Cipher := rx.Match[1];
rx.Expression := '\bISSUER\s+''([^'']+)';
if rx.Exec(RequireClause) then
Issuer := rx.Match[1];
rx.Expression := '\bSUBJECT\s+''([^'']+)';
if rx.Exec(RequireClause) then
Subject := rx.Match[1];
if IsNotEmpty(Cipher) or IsNotEmpty(Issuer) or IsNotEmpty(Subject) then
SSL := 3;
end;
end;