mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-07 09:25:33 +00:00
149 lines
3.5 KiB
ObjectPascal
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.
|