spiegel-keyman/common/windows/delphi/general/GlobalProxySettings.pas

149 lines
3.5 KiB
ObjectPascal

(*
Name: ProxySettings
Copyright: Copyright (C) SIL International.
Documentation:
Description:
Create Date: 4 Jan 2007
Modified Date: 3 May 2011
Authors: mcdurdin
Related Files:
Dependencies:
Bugs:
Todo:
Notes:
History: 04 Jan 2007 - mcdurdin - Initial version
20 Jul 2008 - mcdurdin - I1556 - Initial version
05 Aug 2008 - mcdurdin - Add Refresh function to proxy settings
03 May 2011 - mcdurdin - I2890 - Record diagnostic data when encountering registry errors
*)
unit GlobalProxySettings;
interface
type
TProxySettings = class
private
FPort: Integer;
FServer: string;
FPassword: string;
FUsername: string;
public
constructor Create;
procedure Refresh;
procedure Save(const Server: string; Port: Integer; const Username, Password: string);
property Server: string read FServer;
property Port: Integer read FPort;
property Username: string read FUsername;
property Password: string read FPassword;
end;
function GetProxySettings: TProxySettings;
const
ProxySettingsStandinPassword = '##PASSWORD##';
implementation
uses
System.SysUtils,
DCPcrypt2,
DCPrc4,
ErrorControlledRegistry,
RegistryKeys;
var
FProxySettings: TProxySettings = nil;
function GetProxySettings: TProxySettings;
begin
if not Assigned(FProxySettings) then
FProxySettings := TProxySettings.Create;
Result := FProxySettings;
end;
{ TProxySettings }
const
LoginManagerKey = '\uFCEf+$HP/s=QEj/a~\/o9Uy-4+e=CJ-Tac%irowehbcT>j##rb+%e34X+rWYV-';
constructor TProxySettings.Create;
begin
inherited Create;
Refresh;
end;
procedure TProxySettings.Refresh;
var
FOnlineLogin: string;
n: Integer;
begin
FServer := '';
FPort := 0;
FUsername := '';
FPassword := '';
inherited Create;
with TRegistryErrorControlled.Create do // I2890
try
if OpenKeyReadOnly(SRegKey_KeymanEngine_CU) then
begin
if ValueExists(SRegValue_ProxyServer) then FServer := ReadString(SRegValue_ProxyServer);
if ValueExists(SRegValue_ProxyPort) then FPort := ReadInteger(SRegValue_ProxyPort);
if ValueExists(SRegValue_ProxyLogin) then
begin
with TDCP_rc4.Create(nil) do
try
Init(LoginManagerKey, Length(LoginManagerKey), nil);
FOnlineLogin := DecryptString(ReadString(SRegValue_ProxyLogin));
n := Pos(#13, FOnlineLogin);
if n > 0 then
begin
FUsername := Copy(FOnlineLogin, 1, n-1);
FPassword := Copy(FOnlineLogin, n+1, Length(FOnlineLogin));
end;
Burn;
finally
Free;
end;
end;
end;
finally
Free;
end;
end;
procedure TProxySettings.Save(const Server: string; Port: Integer;
const Username, Password: string);
begin
FServer := Server;
FPort := Port;
FUsername := Username;
FPassword := Password;
with TRegistryErrorControlled.Create do // I2890
try
if OpenKey(SRegKey_KeymanEngine_CU, True) then
begin
WriteString(SRegValue_ProxyServer, FServer);
WriteInteger(SRegValue_ProxyPort, FPort);
with TDCP_rc4.Create(nil) do
try
Init(LoginManagerKey, Length(LoginManagerKey), nil);
WriteString(SRegValue_ProxyLogin, EncryptString(FUsername + #13 + FPassword));
Burn;
finally
Free;
end;
end;
finally
Free;
end;
end;
initialization
finalization
FreeAndNil(FProxySettings);
end.