1231 lines
41 KiB
Plaintext
1231 lines
41 KiB
Plaintext
{*******************************************************}
|
|
{ }
|
|
{ ProcessServerAPI }
|
|
{ }
|
|
{ Copyright (C) 2023 kku }
|
|
{ }
|
|
{*******************************************************}
|
|
|
|
unit ProcessServerAPI;
|
|
|
|
interface
|
|
|
|
uses
|
|
System.SysUtils, System.Classes, Winapi.Windows, IdHTTP;
|
|
|
|
type
|
|
TReqPoKind = (rpkId, rpkAll, rpkMng, rpkSelPo, npkSelPoCate, npkSelPoKey);
|
|
|
|
function ProcessSignal(bFailChangeDestUrl: Boolean = true): Boolean;
|
|
function ProcessRcvPolicy(aKind: TReqPoKind; sPoId: String = ''; sPoAddInfo: String = ''; aHTTP: TIdHTTP = nil): Boolean;
|
|
|
|
|
|
//function CheckAip14Module: Boolean;
|
|
|
|
implementation
|
|
|
|
uses
|
|
ManagerService, superobject, Tocsg.Trace, SecureApp, Tocsg.WinInfo,
|
|
System.DateUtils, ManagerModel, Tocsg.Network, Condition, Tocsg.Convert,
|
|
Tocsg.Path, GlobalDefine, License, CrmUtil, Winapi.Messages, Tocsg.Exception,
|
|
Tocsg.Safe, AbUnzper, AbArcTyp, Tocsg.Strings, System.Zip, Tocsg.Files,
|
|
Tocsg.Process, Define, Tocsg.Registry, DeCrmHeMain, IdExceptionCore,
|
|
Tocsg.Win32, Tocsg.Cert, ProcessUninstall, Tocsg.Shell, System.IniFiles,
|
|
ProcessPrint;
|
|
|
|
const
|
|
MAX_EXP = 12;
|
|
MAX_EXP_D = 13;
|
|
|
|
var
|
|
_dwSpoolDL_Tick: DWORD = 0;
|
|
_dwAip14DL_Tick: DWORD = 0;
|
|
_dwAip17DL_Tick: DWORD = 0;
|
|
_dwKeyviewDL_Tick: DWORD = 0;
|
|
// _sChkVal1: String = ''; // 결재요청 중복 확인을 위함
|
|
// _sChkVal2: String = ''; // 결재결과 중복 확인을 위함
|
|
// _sChkVal3: String = '';
|
|
// _sChkVal4: String = '';
|
|
// _sChkVal5: String = '';
|
|
// _sChkVal6: String = '';
|
|
|
|
_arrUpdReq: array [1..MAX_EXP] of String = (
|
|
'upd_printRequestUrlList', 'upd_usbRequestUrlList', 'upd_brConnRequestUrlList',
|
|
'upd_drmDecRequestUrlList', 'upd_fileExportRequestUrlList', 'upd_mtpRequestUrlList',
|
|
'upd_btRequestUrlList', 'upd_cdDvdRequestUrlList', 'upd_watermarkRequestUrlList',
|
|
'upd_captureAppRequestUrlList', 'upd_preFileExportRequestUrlList', 'upd_printPostRequestUrlList'
|
|
);
|
|
_arrUpdDone: array [1..MAX_EXP_D] of String = (
|
|
'upd_printDoneList', 'upd_usbDoneList', 'upd_brConnDoneList',
|
|
'upd_drmDecDoneList', 'upd_fileExportDoneList', 'upd_mtpDoneList',
|
|
'upd_btDoneList', 'upd_cdDvdDoneList', 'upd_watermarkDoneList',
|
|
'upd_captureAppDoneList', 'upd_preFileExportDoneList', 'upd_printPostDoneList',
|
|
'upd_printPostRequestDoneList'
|
|
);
|
|
_arrChkReqVal: array [1..MAX_EXP] of String;
|
|
_arrChkDoneVal: array [1..MAX_EXP_D] of String;
|
|
_NewAgentInfo: TCheckAgentInfo;
|
|
|
|
function HttpPost(aHTTP: TIdHTTP; sDest, sRqType, sParam: String): String;
|
|
var
|
|
ss: TStringStream;
|
|
begin
|
|
Result := '';
|
|
try
|
|
ss := TStringStream.Create(sParam, TEncoding.UTF8);
|
|
try
|
|
aHTTP.Request.CustomHeaders.Values['requestType'] := sRqType;
|
|
|
|
Result := aHTTP.Post(sDest, ss);
|
|
if (Result = '') and (aHTTP.ResponseCode = 200) then
|
|
Result := 'true';
|
|
finally
|
|
ss.Free;
|
|
end;
|
|
except
|
|
on E: EIdReadTimeout do
|
|
begin
|
|
TTgTrace.T('HttpPost() .. ReadTimeout ..');
|
|
Result := POST_TIMEOUT;
|
|
exit;
|
|
end;
|
|
|
|
on E: Exception do
|
|
begin
|
|
{$IFDEF TRACE1}
|
|
ETgException.TraceException(Self, E, Format('Fail .. HttpPost(), RqType=%s', [sRqType]));
|
|
{$ENDIF}
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function ProcessRcvPolicy(aKind: TReqPoKind; sPoId: String = ''; sPoAddInfo: String = ''; aHTTP: TIdHTTP = nil): Boolean;
|
|
var
|
|
O, OP: ISuperObject;
|
|
sReqCmd, sReqType, sRes: String;
|
|
bCodePo: Boolean;
|
|
begin
|
|
Result := false;
|
|
try
|
|
O := SO;
|
|
|
|
O.S['KEY_AGENTID'] := gMgSvc.AgentId;
|
|
O.S['KEY_EMPNO'] := gMgSvc.EmpNo;
|
|
O.S['KEY_HOSTNAME'] := gMgSvc.UserName;
|
|
if gMgSvc.HandleConfig <> nil then
|
|
begin
|
|
if gMgSvc.HandleConfig.OsMajorVer <> '' then
|
|
O.S['KEY_OSVER'] := Format('%s (%s)', [gMgSvc.HandleConfig.OsVersion, gMgSvc.HandleConfig.OsMajorVer])
|
|
else
|
|
O.S['KEY_OSVER'] := gMgSvc.HandleConfig.OsVersion;
|
|
end else
|
|
O.S['KEY_OSVER'] := 'test';
|
|
|
|
case aKind of
|
|
rpkId : sReqType := '0';
|
|
rpkAll : sReqType := '1';
|
|
rpkMng : sReqType := '2';
|
|
rpkSelPo :
|
|
begin
|
|
sReqType := '3';
|
|
if sPoId = '' then
|
|
begin
|
|
TTgTrace.T('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
|
|
exit;
|
|
end;
|
|
O.S['KEY_POLICYID'] := sPoId;
|
|
end;
|
|
npkSelPoCate :
|
|
begin
|
|
sReqType := '4';
|
|
if sPoId = '' then
|
|
begin
|
|
TTgTrace.T('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
|
|
exit;
|
|
end;
|
|
|
|
if sPoAddInfo = '' then
|
|
begin
|
|
TTgTrace.T('ProcessRcvPolicy() .. npkSelPoCate .. EmptyCate');
|
|
exit;
|
|
end;
|
|
|
|
O.S['KEY_POLICYID'] := sPoId;
|
|
O.S['KEY_CATEGORY'] := sPoAddInfo;
|
|
end;
|
|
npkSelPoKey :
|
|
begin
|
|
sReqType := '5';
|
|
if sPoId = '' then
|
|
begin
|
|
TTgTrace.T('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
|
|
exit;
|
|
end;
|
|
|
|
if sPoAddInfo = '' then
|
|
begin
|
|
TTgTrace.T('ProcessRcvPolicy() .. npkSelPoKey .. EmptyKey');
|
|
exit;
|
|
end;
|
|
|
|
O.S['KEY_POLICYID'] := sPoId;
|
|
O.S['KEY_POLICYKEY'] := sPoAddInfo;
|
|
end;
|
|
end;
|
|
|
|
// {$IFDEF DEBUG} SaveJsonObjToFile(O, 'c:\pa.json'); {$ENDIF}
|
|
|
|
bCodePo := gMgSvc.PrefModel.CodePo and gMgSvc.PrefModel.IsAbleCodePo;
|
|
if bCodePo then
|
|
sReqCmd := 'policyRequest.do?idType=n'
|
|
else
|
|
sReqCmd := 'policyRequest.do';
|
|
|
|
if aHTTP <> nil then
|
|
sRes := HttpPost(aHTTP, gMgSvc.DestIPort + sReqCmd, sReqType, O.AsString)
|
|
else
|
|
sRes := gMgSvc.HttpPost(gMgSvc.DestIPort + sReqCmd, sReqType, O.AsString);
|
|
|
|
if sRes = '' then
|
|
begin
|
|
TTgTrace.T('ProcessRcvPolicy() .. Empty .. Msg="%s", Code=%d', [gMgSvc.HttpErrorMsg, gMgSvc.HttpErrorCode]);
|
|
exit;
|
|
end else
|
|
if sRes = POST_TIMEOUT then
|
|
begin
|
|
TTgTrace.T('ProcessRcvPolicy() .. timeout .. Msg="%s", Code=%d', [gMgSvc.HttpErrorMsg, gMgSvc.HttpErrorCode]);
|
|
exit;
|
|
end;
|
|
|
|
{$IFDEF DEBUG} {$ENDIF}
|
|
SaveJsonObjToFile(SO(sRes), 'c:\pd.json');
|
|
|
|
OP := SO(sRes);
|
|
if OP = nil then
|
|
begin
|
|
TTgTrace.T('ProcessRcvPolicy() .. Invalid policy');
|
|
exit;
|
|
end;
|
|
|
|
case aKind of
|
|
rpkId : ;
|
|
rpkAll :
|
|
begin
|
|
var sGrpName: String := OP.S['GROUP_NAME'];
|
|
if gMgSvc.AgentModel.Location <> sGrpName then
|
|
begin
|
|
gMgSvc.AgentModel.Location := sGrpName;
|
|
gMgSvc.AgentModel.Save;
|
|
end;
|
|
|
|
gMgSvc.PrefModel.PolicyGroup := sGrpName;
|
|
gMgSvc.PrefModel.PolicyId := OP.S['SECUMODE'];
|
|
gMgSvc.SleepPolicy.PolicyGroup := sGrpName;
|
|
gMgSvc.SleepPolicy.PolicyId := OP.S['SLEEPMODE'];
|
|
gMgSvc.VulPolicy.PolicyGroup := sGrpName;
|
|
gMgSvc.VulPolicy.PolicyId := OP.S['VULMODE'];
|
|
gMgSvc.OffPolicy.PolicyGroup := sGrpName;
|
|
gMgSvc.OffPolicy.PolicyId := OP.S['OFFLINEMODE'];
|
|
gMgSvc.ExpPolicy.PolicyGroup := sGrpName;
|
|
gMgSvc.ExpPolicy.PolicyId := OP.S['EXCEPTMODE'];
|
|
|
|
var nOldScreenOld: Integer := gMgSvc.ModePolicy.ScreenLogoAlpha;
|
|
|
|
if OP.O['POL_SET'] <> nil then
|
|
gMgSvc.PrefModel.SetSetPolicy(OP.O['POL_SET'], bCodePo);
|
|
|
|
if OP.O['POL_MNG'] <> nil then
|
|
begin
|
|
gMgSvc.PrefModel.SetMngPolicy(OP.O['POL_MNG'], bCodePo);
|
|
if gMgSvc.PrefModel.HideMainUI and gMain.Showing then
|
|
PostMessage(gMgSvc.RcvHwnd, WM_REFRESH_VIEW, 1, 0);
|
|
end;
|
|
|
|
if (OP.S['SECUMODE'] <> '') and (OP.S['SECUMODE'].ToLower <> 'false') and
|
|
(OP.O['POL_SEC'] <> nil) then
|
|
gMgSvc.PrefModel.SetPolicy(OP.S['SECUMODE'], OP.O['POL_SEC'], bCodePo);
|
|
|
|
if (OP.S['SLEEPMODE'] <> '') and (OP.S['SLEEPMODE'].ToLower <> 'false') and
|
|
(OP.O['POL_SLP'] <> nil) then
|
|
gMgSvc.SleepPolicy.SetPolicy(OP.S['SLEEPMODE'], OP.O['POL_SLP'], bCodePo)
|
|
else
|
|
gMgSvc.SleepPolicy.Clear(true, true);
|
|
|
|
if (OP.S['VULMODE'] <> '') and (OP.S['VULMODE'].ToLower <> 'false') and
|
|
(OP.O['POL_VUL'] <> nil) then
|
|
gMgSvc.VulPolicy.SetPolicy(OP.S['VULMODE'], OP.O['POL_VUL'], bCodePo)
|
|
else
|
|
gMgSvc.VulPolicy.Clear(true, true);
|
|
|
|
if (OP.S['OFFLINEMODE'] <> '') and (OP.S['OFFLINEMODE'].ToLower <> 'false') and
|
|
(OP.O['POL_OFF'] <> nil) then
|
|
gMgSvc.OffPolicy.SetPolicy(OP.S['OFFLINEMODE'], OP.O['POL_OFF'], bCodePo)
|
|
else
|
|
gMgSvc.OffPolicy.Clear(true, true);
|
|
|
|
if (OP.S['EXCEPTMODE'] <> '') and (OP.S['EXCEPTMODE'].ToLower <> 'false') and
|
|
(OP.O['POL_EXC'] <> nil) then
|
|
begin
|
|
gMgSvc.ExpPolicy.SetPolicy(OP.S['EXCEPTMODE'], OP.O['POL_EXC'], bCodePo);
|
|
end else
|
|
if gMgSvc.IsOfflineExp then
|
|
begin
|
|
if (gMgSvc.ExpPolicy.InternalPoId <> 'TEMP') and
|
|
(gMgSvc.ExpPolicy.InternalPoId <> 'false') then // 정책 할당안된 예외모드가 아니라면
|
|
begin
|
|
gMgSvc.ClearExpPolicy;
|
|
gMgSvc.ExpPolicy.Clear(true, true);
|
|
end;
|
|
end else
|
|
gMgSvc.ExpPolicy.Clear(true, true);
|
|
|
|
if nOldScreenOld <> gMgSvc.ModePolicy.ScreenLogoAlpha then
|
|
gMgSvc.UpdateScreenLogo(true);
|
|
end;
|
|
rpkMng : ;
|
|
rpkSelPo : ;
|
|
npkSelPoCate : ;
|
|
npkSelPoKey : ;
|
|
end;
|
|
|
|
gMgSvc.RefreshView;
|
|
|
|
{$IFDEF DEBUG} SaveJsonObjToFile(OP, 'c:\ps.json'); {$ENDIF}
|
|
Result := true;
|
|
except
|
|
on E: Exception do
|
|
ETgException.TraceException(E, 'Fail .. ProcessRcvPolicy()');
|
|
end;
|
|
end;
|
|
|
|
procedure ProcessDownloadModules;
|
|
var
|
|
sCurDir,
|
|
sChkPath: String;
|
|
ms: TMemoryStream;
|
|
|
|
function ExtrZip(sDestDir: String; bIgrErr: Boolean = false): Boolean;
|
|
var
|
|
zip: TAbUnZipper;
|
|
begin
|
|
if ms.Size = 0 then
|
|
exit;
|
|
|
|
Result := bIgrErr;
|
|
if not ForceDirectories(sDestDir) then
|
|
exit;
|
|
|
|
try
|
|
Guard(zip, TAbUnzipper.Create(nil));
|
|
zip.Stream := ms;
|
|
// zip.FileName := sResPath;
|
|
zip.ExtractOptions := [eoCreateDirs, eoRestorePath];
|
|
zip.BaseDirectory := sDestDir;
|
|
// zip.OnArchiveProgress := ;
|
|
// zip.OnNeedPassword := ;
|
|
|
|
zip.ExtractFiles('*.*');
|
|
Result := true;
|
|
except
|
|
on E: Exception do
|
|
ETgException.TraceException(E, Format('Fail .. ExtrZip(), ExtrDir="%s"', [sDestDir]));
|
|
end;
|
|
end;
|
|
|
|
var
|
|
bSuccess: Boolean;
|
|
begin
|
|
try
|
|
{$IFDEF DEBUG}
|
|
exit;
|
|
{$ENDIF}
|
|
if not gMgSvc.Connected then
|
|
exit;
|
|
|
|
Guard(ms, TMemoryStream.Create);
|
|
|
|
sCurDir := GetRunExePathDir;
|
|
if not gMgSvc.IsWin7Ver and IsSupportAIP then
|
|
begin
|
|
try
|
|
// 1.17 버전 다운로드, 확인
|
|
if FileExists(sCurDir + DIR_CONF + EXE_AIP17) and
|
|
not FileExists(sCurDir + DIR_AIP17 + 'Microsoft.InformationProtection.dll') and
|
|
((_dwAip17DL_Tick = 0) or ((GetTickCount - _dwAip17DL_Tick) >= 180000 )) then // 실패 시 3분에 한번 시도
|
|
begin
|
|
TTgTrace.T('ProcessDownloadModules .. AIP17 ..');
|
|
_dwAip17DL_Tick := 0;
|
|
bSuccess := false;
|
|
|
|
ms.Clear;
|
|
try
|
|
gMgSvc.HTTP.Get(gMgSvc.DestIPort + 'aapi/static-comps/hec-aip17', ms);
|
|
except
|
|
_dwAip17DL_Tick := GetTickCount;
|
|
end;
|
|
|
|
if ms.Size > 0 then
|
|
begin
|
|
bSuccess := ExtrZip(sCurDir + DIR_AIP17);
|
|
bSuccess := bSuccess and FileExists(sCurDir + DIR_AIP17 + 'Microsoft.InformationProtection.dll');
|
|
end;
|
|
|
|
if not bSuccess then
|
|
begin
|
|
TTgTrace.T('ProcessDownloadModules .. AIP17 .. Fail');
|
|
end else begin
|
|
TTgTrace.T('ProcessDownloadModules .. AIP17 .. OK');
|
|
_dwAip17DL_Tick := GetTickCount;
|
|
end;
|
|
end;
|
|
|
|
// 1.14 버전 다운로드, 확인
|
|
if not FileExists(sCurDir + DIR_AIP17 + 'Microsoft.InformationProtection.dll') and
|
|
not FileExists(sCurDir + DIR_AIP14 + 'Microsoft.InformationProtection.dll') and
|
|
FileExists(sCurDir + DIR_CONF + EXE_AIP14) and
|
|
((_dwAip14DL_Tick = 0) or ((GetTickCount - _dwAip14DL_Tick) >= 180000 )) then // 실패 시 3분에 한번 시도
|
|
begin
|
|
TTgTrace.T('ProcessDownloadModules .. AIP14 ..');
|
|
_dwAip14DL_Tick := 0;
|
|
bSuccess := false;
|
|
|
|
ms.Clear;
|
|
try
|
|
gMgSvc.HTTP.Get(gMgSvc.DestIPort + 'agentDownloadReq/' + DOWNLOAD_TYPE_AIP14, ms);
|
|
except
|
|
_dwAip14DL_Tick := GetTickCount;
|
|
end;
|
|
|
|
if ms.Size > 0 then
|
|
begin
|
|
bSuccess := ExtrZip(sCurDir + DIR_AIP14);
|
|
bSuccess := bSuccess and FileExists(sCurDir + DIR_AIP14 + 'Microsoft.InformationProtection.dll');
|
|
end;
|
|
|
|
if not bSuccess then
|
|
begin
|
|
// _dwAip14DL_Tick := GetTickCount;
|
|
TTgTrace.T('ProcessDownloadModules .. AIP14 .. Fail');
|
|
end else begin
|
|
TTgTrace.T('ProcessDownloadModules .. AIP14 .. OK');
|
|
_dwAip14DL_Tick := GetTickCount;
|
|
end;
|
|
end;
|
|
except
|
|
on E: Exception do
|
|
begin
|
|
ETgException.TraceException(E, 'Fail .. ProcessDownloadModules() - AIP');
|
|
_dwAip14DL_Tick := GetTickCount;
|
|
_dwAip17DL_Tick := _dwAip14DL_Tick;
|
|
end;
|
|
end;
|
|
|
|
if FileExists(sCurDir + DIR_AIP17 + 'Microsoft.InformationProtection.dll') then
|
|
begin
|
|
if FileExists(sCurDir + DAT_AIPUP17) then
|
|
begin
|
|
if not FileExists(sCurDir + DIR_AIP17 + EXE_AIP) then
|
|
DeleteFile(PChar(sCurDir + DAT_AIPUP17));
|
|
end else begin
|
|
TerminateProcessByName(EXE_AIP);
|
|
// Sleep(1000);
|
|
|
|
if DeleteFile_wait(sCurDir + DIR_AIP17 + EXE_AIP) and
|
|
FileExists(sCurDir + DIR_CONF + EXE_AIP17) and
|
|
CopyFile(PChar(sCurDir + DIR_CONF + EXE_AIP17), PChar(sCurDir + DIR_AIP17 + EXE_AIP), false) then
|
|
begin
|
|
WriteLnFileEndUTF8(sCurDir + DAT_AIPUP17, DateTimeToStr(Now));
|
|
// DeleteFile(PChar(sCurDir + DIR_CONF + EXE_AIP14));
|
|
end;
|
|
|
|
// 이게 왜 사라지는지 모르겠지만... 보완 처리 23_1204 09:55:26 kku
|
|
if not FileExists(sCurDir + DIR_AIP17 + 'Newtonsoft.Json.dll') then
|
|
CopyFile(PChar(sCurDir + DIR_CONF + 'Newtonsoft.Json.dll'), PChar(sCurDir + DIR_AIP17 + 'Newtonsoft.Json.dll'), false);
|
|
|
|
Sleep(1000);
|
|
if not FileExists(sCurDir + DIR_AIP17 + EXE_AIP) or
|
|
(GetFileSize_path(sCurDir + DIR_AIP17 + EXE_AIP) = 0) then
|
|
begin
|
|
// 파일 구성이 잘못되었다면 다시 처리할 수 있도록 지움 24_0221 15:09:34 kku
|
|
DeleteFile(PChar(sCurDir + DAT_AIPUP17));
|
|
DeleteDir(sCurDir + DIR_AIP17);
|
|
end else begin
|
|
DeleteFile(PChar(sCurDir + DAT_AIPUP));
|
|
DeleteDir(sCurDir + DIR_AIP14);
|
|
end;
|
|
end;
|
|
end else
|
|
if FileExists(sCurDir + DIR_AIP14 + 'Microsoft.InformationProtection.dll') then
|
|
begin
|
|
if FileExists(sCurDir + DAT_AIPUP) then
|
|
begin
|
|
if not FileExists(sCurDir + DIR_AIP14 + EXE_AIP) then
|
|
DeleteFile(PChar(sCurDir + DAT_AIPUP));
|
|
end else begin
|
|
TerminateProcessByName(EXE_AIP);
|
|
// Sleep(1000);
|
|
|
|
if DeleteFile_wait(sCurDir + DIR_AIP14 + EXE_AIP) and
|
|
FileExists(sCurDir + DIR_CONF + EXE_AIP14) and
|
|
CopyFile(PChar(sCurDir + DIR_CONF + EXE_AIP14), PChar(sCurDir + DIR_AIP14 + EXE_AIP), false) then
|
|
begin
|
|
WriteLnFileEndUTF8(sCurDir + DAT_AIPUP, DateTimeToStr(Now));
|
|
// DeleteFile(PChar(sCurDir + DIR_CONF + EXE_AIP14));
|
|
end;
|
|
|
|
// 이게 왜 사라지는지 모르겠지만... 보완 처리 23_1204 09:55:26 kku
|
|
if not FileExists(sCurDir + DIR_AIP14 + 'Newtonsoft.Json.dll') then
|
|
CopyFile(PChar(sCurDir + DIR_CONF + 'Newtonsoft.Json.dll'), PChar(sCurDir + DIR_AIP14 + 'Newtonsoft.Json.dll'), false);
|
|
|
|
Sleep(1000);
|
|
if not FileExists(sCurDir + DIR_AIP14 + EXE_AIP) or
|
|
(GetFileSize_path(sCurDir + DIR_AIP14 + EXE_AIP) = 0) then
|
|
begin
|
|
// 파일 구성이 잘못되었다면 다시 처리할 수 있도록 지움 24_0221 15:09:34 kku
|
|
DeleteFile(PChar(sCurDir + DAT_AIPUP));
|
|
DeleteDir(sCurDir + DIR_AIP14);
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// if not IsPrintWaterHook and
|
|
if (not FileExists(sCurDir + DIR_CONF + EXE_SPL) or not FileExists(sCurDir + DIR_CONF + 'spl2pdf_lib\xps.dll')) and
|
|
((_dwSpoolDL_Tick = 0) or ((GetTickCount - _dwSpoolDL_Tick) >= 180000 )) then // 실패 시 3분에 한번 시도
|
|
begin
|
|
try
|
|
TTgTrace.T('ProcessDownloadModules .. SPOOL ..');
|
|
_dwSpoolDL_Tick := 0;
|
|
bSuccess := false;
|
|
|
|
ms.Clear;
|
|
try
|
|
gMgSvc.HTTP.Get(gMgSvc.DestIPort + 'agentDownloadReq/' + DOWNLOAD_TYPE_SPOOL, ms);
|
|
except
|
|
_dwSpoolDL_Tick := GetTickCount;
|
|
end;
|
|
|
|
if ms.Size > 0 then
|
|
begin
|
|
bSuccess := ExtrZip(sCurDir + DIR_CONF);
|
|
bSuccess := bSuccess and FileExists(sCurDir + DIR_CONF + 'spl2pdf_lib\xps.dll');
|
|
end;
|
|
|
|
if not bSuccess then
|
|
begin
|
|
// _dwSpoolDL_Tick := GetTickCount;
|
|
TTgTrace.T('ProcessDownloadModules .. SPOOL .. Fail');
|
|
end else begin
|
|
TTgTrace.T('ProcessDownloadModules .. SPOOL .. OK');
|
|
_dwSpoolDL_Tick := GetTickCount;
|
|
end;
|
|
except
|
|
on E: Exception do
|
|
begin
|
|
ETgException.TraceException(E, 'Fail .. ProcessDownloadModules() - SPOOL');
|
|
_dwSpoolDL_Tick := GetTickCount;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
if not FileExists(sCurDir + 'bin\' + EXE_KV) and
|
|
((_dwKeyviewDL_Tick = 0) or ((GetTickCount - _dwKeyviewDL_Tick) >= 180000 )) then // 실패 시 3분에 한번 시도
|
|
begin
|
|
try
|
|
TTgTrace.T('ProcessDownloadModules .. KV ..');
|
|
_dwKeyviewDL_Tick := 0;
|
|
bSuccess := false;
|
|
|
|
ms.Clear;
|
|
try
|
|
gMgSvc.HTTP.Get(gMgSvc.DestIPort + 'agentDownloadReq/' + DOWNLOAD_TYPE_KEYVIEW, ms);
|
|
except
|
|
_dwKeyviewDL_Tick := GetTickCount;
|
|
end;
|
|
|
|
if ms.Size > 0 then
|
|
begin
|
|
bSuccess := ExtrZip(sCurDir + 'bin\');
|
|
bSuccess := bSuccess and FileExists(sCurDir + 'bin\' + EXE_KV);
|
|
end;
|
|
|
|
if not bSuccess then
|
|
begin
|
|
// _dwKeyviewDL_Tick := GetTickCount;
|
|
TTgTrace.T('ProcessDownloadModules .. KV .. Fail');
|
|
end else begin
|
|
TTgTrace.T('ProcessDownloadModules .. KV .. OK');
|
|
_dwKeyviewDL_Tick := GetTickCount;
|
|
end;
|
|
except
|
|
on E: Exception do
|
|
begin
|
|
ETgException.TraceException(E, 'Fail .. ProcessDownloadModules() - CTT');
|
|
_dwKeyviewDL_Tick := GetTickCount;
|
|
end;
|
|
end;
|
|
end;
|
|
except
|
|
on E: Exception do
|
|
begin
|
|
ETgException.TraceException(E, 'Fail .. ProcessDownloadModules()');
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function ProcessSignal(bFailChangeDestUrl: Boolean = true): Boolean;
|
|
|
|
function CheckUpdateAble: Boolean;
|
|
var
|
|
sNewVer,
|
|
sCurVer: String;
|
|
NewVers,
|
|
CurVers: TStringList;
|
|
ullNew, ullCur: ULONGLONG;
|
|
i: Integer;
|
|
begin
|
|
Result := false;
|
|
try
|
|
if not gMgSvc.PrefModel.IsAgentUpdateExist then
|
|
exit;
|
|
|
|
if gMgSvc.UpdateTick <> 0 then
|
|
exit;
|
|
|
|
sNewVer := gMgSvc.PrefModel.AgentPatchVersion;
|
|
if sNewVer = '' then
|
|
exit;
|
|
|
|
sCurVer := SdkVersion;
|
|
if sNewVer = sCurVer then
|
|
exit;
|
|
|
|
if gMgSvc.PrefModel.IsFixedVerUpdate then
|
|
begin
|
|
// 서버에 있는 에이전트로 강제 업데이트 추가 24_0123 09:13:15 kku
|
|
Result := true;
|
|
end else begin
|
|
Guard(NewVers, TStringList.Create);
|
|
Guard(CurVers, TStringList.Create);
|
|
if SplitString(sNewVer, '.', NewVers) = 0 then
|
|
exit;
|
|
|
|
if SplitString(sCurVer, '.', CurVers) = 0 then
|
|
begin
|
|
Result := StrToIntDef(NewVers[0], 0) > StrToIntDef(sCurVer, 0);
|
|
exit;
|
|
end;
|
|
|
|
for i := 0 to NewVers.Count - 1 do
|
|
begin
|
|
if i >= CurVers.Count then
|
|
begin
|
|
Result := true;
|
|
exit;
|
|
end;
|
|
|
|
if StrToIntDef(NewVers[i], 0) < StrToIntDef(CurVers[i], 0) then
|
|
exit;
|
|
|
|
if StrToIntDef(NewVers[i], 0) > StrToIntDef(CurVers[i], 0) then
|
|
begin
|
|
Result := true;
|
|
exit;
|
|
end;
|
|
end;
|
|
end;
|
|
except
|
|
on E: Exception do
|
|
ETgException.TraceException(E, 'Fail .. CheckUpdateAble()');
|
|
end;
|
|
end;
|
|
|
|
procedure ProcessUpdate;
|
|
var
|
|
sUrl,
|
|
sNewVer,
|
|
sPtPath: String;
|
|
fs: TFileStream;
|
|
nOldTO: Integer;
|
|
begin
|
|
try
|
|
sNewVer := gMgSvc.PrefModel.AgentPatchVersion;
|
|
sUrl := gMgSvc.DestIPort + 'agentDownReq/' + DOWNLOAD_TYPE_PATCH;
|
|
|
|
nOldTO := gMgSvc.HTTP.ReadTimeout;
|
|
gMgSvc.HTTP.ReadTimeout := 120000;
|
|
sPtPath := GetProgramFilesDir + DIR_TG;
|
|
fs := TFileStream.Create(sPtPath + ZIP_PT, fmCreate);
|
|
try
|
|
gMgSvc.HTTP.Get(sUrl, fs);
|
|
Sleep(500);
|
|
if FileExists(sPtPath + ZIP_PT) then
|
|
begin
|
|
FreeAndNil(fs);
|
|
if GetFileSize_path(sPtPath + ZIP_PT) = 0 then
|
|
begin
|
|
DeleteFile(PChar(sPtPath + ZIP_PT));
|
|
exit;
|
|
end;
|
|
|
|
TZipFile.ExtractZipFile(sPtPath + ZIP_PT, sPtPath);
|
|
DeleteFile(PChar(sPtPath + ZIP_PT));
|
|
|
|
if FileExists(sPtPath + EXE_PT) then
|
|
begin
|
|
DelRegValue(HKEY_LOCAL_MACHINE, REG_HE, 'LP');
|
|
gMgSvc.SendEventLog(URI_USERUPDATE, SYSEVT_AGENT_PATCH, 'Patch Downloaded : ' + sNewVer);
|
|
gMgSvc.UpdateTick := GetTickCount;
|
|
|
|
if not IsFileSigned(sPtPath + EXE_PT) then
|
|
begin
|
|
// 다음 정책 받을때까지 업데이트 시도 되지 않도록 조치 25_0414 10:23:33 kku
|
|
gMgSvc.PrefModel.AgentPatchVersion := '';
|
|
DeleteFile(PChar(sPtPath + EXE_PT));
|
|
TTgTrace.T('Fail .. ProcessUpdate() .. Unsigned installation file. FName=%s', [EXE_PT]);
|
|
gMgSvc.SendEventLogEx(AUDIT_AGENT_PATCH_FAIL, Format('Patch Fail : %s, Unsigned installation file.', [sNewVer]));
|
|
end else
|
|
ExecuteApp(sPtPath + EXE_PT, '', SW_HIDE);
|
|
end;
|
|
end;
|
|
finally
|
|
if fs <> nil then
|
|
FreeAndNil(fs);
|
|
gMgSvc.HTTP.ReadTimeout := nOldTO;
|
|
end;
|
|
except
|
|
on E: Exception do
|
|
ETgException.TraceException(E, 'Fail .. ProcessUpdate()');
|
|
end;
|
|
end;
|
|
|
|
var
|
|
sReqType,
|
|
sEulaCon, sHostName,
|
|
sAvInfo, sAsInfo, sFwInfo, sRes: String;
|
|
O: ISuperObject;
|
|
bChangedPolicy: Boolean;
|
|
// NewAgentInfo: TCheckAgentInfo;
|
|
bChangeAgentInfo: Boolean;
|
|
|
|
function IsChangeAgentInfo: Boolean;
|
|
begin
|
|
Result := true;
|
|
|
|
with gMgSvc.AgentInfo do
|
|
begin
|
|
if sAgentId <> _NewAgentInfo.sAgentId then exit;
|
|
if sIp <> _NewAgentInfo.sIp then exit;
|
|
if sIps <> _NewAgentInfo.sIps then exit;
|
|
if sMAC <> _NewAgentInfo.sMAC then exit;
|
|
if sAccount <> _NewAgentInfo.sAccount then exit;
|
|
if sHostName <> _NewAgentInfo.sHostName then exit;
|
|
if sEulaCon <> _NewAgentInfo.sEulaCon then exit;
|
|
if sLocation <> _NewAgentInfo.sLocation then exit;
|
|
if sPwSet <> _NewAgentInfo.sPwSet then exit;
|
|
if sPwSetTermOk <> _NewAgentInfo.sPwSetTermOk then exit;
|
|
if sScrnLock <> _NewAgentInfo.sScrnLock then exit;
|
|
if sOsVer <> _NewAgentInfo.sOsVer then exit;
|
|
if sAvInfo <> _NewAgentInfo.sAvInfo then exit;
|
|
if sFwInfo <> _NewAgentInfo.sFwInfo then exit;
|
|
if sOsSafe <> _NewAgentInfo.sOsSafe then exit;
|
|
if sPatchExist <> _NewAgentInfo.sPatchExist then exit;
|
|
if sAvSafe <> _NewAgentInfo.sAvSafe then exit;
|
|
if sAvUptodate <> _NewAgentInfo.sAvUptodate then exit;
|
|
if sFwSafe <> _NewAgentInfo.sFwSafe then exit;
|
|
if sPiSafe <> _NewAgentInfo.sPiSafe then exit;
|
|
if sEmpNo <> _NewAgentInfo.sEmpNo then exit;
|
|
// if bSafePcSHCD <> _NewAgentInfo.bSafePcSHCD then exit;
|
|
if bJoinAD <> _NewAgentInfo.bJoinAD then exit;
|
|
if sModeName <> _NewAgentInfo.sModeName then exit;
|
|
end;
|
|
|
|
Result := false;
|
|
end;
|
|
var
|
|
bUpdate,
|
|
bConnected,
|
|
bPrevConnected: Boolean;
|
|
SecuApp: TSecureApp;
|
|
wURole: WORD;
|
|
|
|
i: Integer;
|
|
sKName: String;
|
|
Label
|
|
LB_SignalComplete;
|
|
begin
|
|
Result := false;
|
|
try
|
|
if gMgSvc.EmpNo = '' then
|
|
begin
|
|
TTgTrace.T('ProcessSignal() .. Init .. Empty EmpNo ..');
|
|
Sleep(3000);
|
|
exit;
|
|
end;
|
|
|
|
// TTgTrace.T('ProcessSignal() .. exit');
|
|
// exit;
|
|
|
|
sHostName := gMgSvc.UserName;
|
|
if sHostName = '' then
|
|
begin
|
|
TTgTrace.T('ProcessSignal() .. Init .. Empty HostName?? .. GetComAct=%s', [GetComName + '\' + GetAccount]);
|
|
Sleep(5000);
|
|
exit;
|
|
end;
|
|
|
|
if gMgSvc.IsOfflineMode then
|
|
goto LB_SignalComplete;
|
|
|
|
if gMgSvc.HandleSecurity <> nil then
|
|
begin
|
|
SecuApp := gMgSvc.HandleSecurity.GetMainAv;
|
|
if (SecuApp <> nil) and (SecuApp.Name <> '') then
|
|
begin
|
|
sAvInfo := SecuApp.Name + MODEL_SEPARATOR + // MODEL_SEPARATOR +
|
|
SecuApp.Path + MODEL_SEPARATOR + SecuApp.Timestamp;
|
|
end else
|
|
sAvInfo := 'null';
|
|
|
|
SecuApp := gMgSvc.HandleSecurity.GetMainAs;
|
|
if (SecuApp <> nil) and (SecuApp.Name <> '') then
|
|
begin
|
|
sAsInfo := SecuApp.Name + MODEL_SEPARATOR +
|
|
SecuApp.Path + MODEL_SEPARATOR + SecuApp.Timestamp;
|
|
end else
|
|
sAsInfo := 'null';
|
|
|
|
SecuApp := gMgSvc.HandleSecurity.GetMainFw;
|
|
if (SecuApp <> nil) and (SecuApp.Name <> '') then
|
|
begin
|
|
sFwInfo := SecuApp.Name + MODEL_SEPARATOR +
|
|
SecuApp.Path + MODEL_SEPARATOR + SecuApp.Timestamp;
|
|
end else
|
|
sFwInfo := 'null';
|
|
end else begin
|
|
sAvInfo := 'null';
|
|
sAsInfo := 'null';
|
|
sFwInfo := 'null';
|
|
end;
|
|
|
|
sEulaCon := 'disagree';
|
|
|
|
if gMgSvc.AgentModel.EulaDT <> 0 then
|
|
sEulaCon := FormatDateTime('yyyy-mm-dd hh:nn:ss', gMgSvc.AgentModel.EulaDT);
|
|
|
|
_NewAgentInfo.sAgentId := gMgSvc.AgentId;
|
|
if gMgSvc.NicService <> nil then
|
|
begin
|
|
_NewAgentInfo.sIp := gMgSvc.NicService.GetIP;
|
|
_NewAgentInfo.sIps := gMgSvc.NicService.IpAll;
|
|
_NewAgentInfo.sMAC := gMgSvc.NicService.GetMAC;
|
|
end else begin
|
|
_NewAgentInfo.sIp := 'ip';
|
|
_NewAgentInfo.sIps := 'ips';
|
|
_NewAgentInfo.sMAC := 'mac';
|
|
end;
|
|
_NewAgentInfo.sAccount := gMgSvc.Account;
|
|
if IsUseHostNameOnly then
|
|
_NewAgentInfo.sHostName := gMgSvc.ComName
|
|
else
|
|
_NewAgentInfo.sHostName := sHostName;
|
|
_NewAgentInfo.sEulaCon := sEulaCon;
|
|
if gMgSvc.PrefModel.PolicyGroup <> '' then
|
|
_NewAgentInfo.sLocation := gMgSvc.PrefModel.PolicyGroup
|
|
else
|
|
_NewAgentInfo.sLocation := gMgSvc.PrefModel.PolicyName;
|
|
if gMgSvc.VulService <> nil then
|
|
begin
|
|
_NewAgentInfo.sPwSet := BooleanToStr(gMgSvc.VulService.IsPasswordSet, 'true', 'false');
|
|
_NewAgentInfo.sPwSetTermOk := BooleanToStr(gMgSvc.VulService.IsPasswordSetTermOk, 'true', 'false');
|
|
_NewAgentInfo.sScrnLock := BooleanToStr(gMgSvc.VulService.IsScreenSaverSet, 'true', 'false');
|
|
end else begin
|
|
_NewAgentInfo.sPwSet := 'true';
|
|
_NewAgentInfo.sPwSetTermOk := 'true';
|
|
_NewAgentInfo.sScrnLock := 'true';
|
|
end;
|
|
if gMgSvc.HandleConfig <> nil then
|
|
begin
|
|
if gMgSvc.HandleConfig.OsMajorVer <> '' then
|
|
_NewAgentInfo.sOsVer := Format('%s (%s)', [gMgSvc.HandleConfig.OsVersion, gMgSvc.HandleConfig.OsMajorVer]) // gMgSvc.VulService.OsVersion;
|
|
else
|
|
_NewAgentInfo.sOsVer := gMgSvc.HandleConfig.OsVersion;
|
|
end else
|
|
_NewAgentInfo.sOsVer := 'test2';
|
|
_NewAgentInfo.sAvInfo := sAvInfo;
|
|
_NewAgentInfo.sFwInfo := sFwInfo;
|
|
if gMgSvc.VulService <> nil then
|
|
begin
|
|
_NewAgentInfo.sOsSafe := BooleanToStr(gMgSvc.VulService.IsOsSafe, 'true', 'false');
|
|
_NewAgentInfo.sPatchExist := BooleanToStr(gMgSvc.VulService.IsOsPatchUptoDate, 'true', 'false');
|
|
_NewAgentInfo.sAvUptodate := BooleanToStr(gMgSvc.VulService.IsAntiVirusUpToDate, 'true', 'false');
|
|
_NewAgentInfo.sAvSafe := BooleanToStr(gMgSvc.VulService.IsAvOn, 'true', 'false');
|
|
_NewAgentInfo.sFwSafe := BooleanToStr(gMgSvc.VulService.IsFirewallOn, 'true', 'false');
|
|
end else begin
|
|
_NewAgentInfo.sOsSafe := 'true';
|
|
_NewAgentInfo.sPatchExist := 'true';
|
|
_NewAgentInfo.sAvUptodate := 'true';
|
|
_NewAgentInfo.sAvSafe := 'true';
|
|
_NewAgentInfo.sFwSafe := 'true';
|
|
end;
|
|
_NewAgentInfo.sPiSafe := BooleanToStr(gMgSvc.IsSchRstVul, 'false', 'true');
|
|
case gMgSvc.HeModeKind of
|
|
hmkSleep : _NewAgentInfo.sModeName := 'Sleep';
|
|
hmkSecurity : _NewAgentInfo.sModeName := 'Secu';
|
|
hmkVulnerability : _NewAgentInfo.sModeName := 'Vul';
|
|
hmkOffline : _NewAgentInfo.sModeName := 'Offline';
|
|
hmkException : _NewAgentInfo.sModeName := 'Exption';
|
|
end;
|
|
_NewAgentInfo.sEmpNo := gMgSvc.EmpNo;
|
|
// _NewAgentInfo.bSafePcSHCD := (CUSTOMER_TYPE = CUSTOMER_SHCD) and FileExists(GetRunExePathDir + EXE_SafePCUninst);
|
|
_NewAgentInfo.bJoinAD := IsJoinAD;
|
|
|
|
O := SO;
|
|
bPrevConnected := gMgSvc.Connected;
|
|
bChangeAgentInfo := IsChangeAgentInfo;
|
|
|
|
// 공통
|
|
O.S['KEY_AGENTID'] := _NewAgentInfo.sAgentId;
|
|
O.S['KEY_EMPNO'] := _NewAgentInfo.sEmpNo;
|
|
O.S['KEY_HOSTNAME'] := _NewAgentInfo.sHostName;
|
|
O.S['KEY_MODE'] := _NewAgentInfo.sModeName;
|
|
O.S['VUL_OSVER'] := _NewAgentInfo.sOsVer; // 시그널 패킷에도 OS정보 추가 23_1214 15:48:03 kku
|
|
O.S['KEY_LASTPOLICY'] := gMgSvc.LastPolicy; // 빈값을 넣으면 응답도 빈값으로 온다... 23_0802 11:06:47 kku
|
|
// O.S['KEY_LASTPUSH'] := ''; //'2024-10-10 11:11:11';//gMgSvc.LastPolicy; // 빈값을 넣으면 응답도 빈값으로 온다... 23_0802 11:06:47 kku
|
|
if CUSTOMER_TYPE = CUSTOMER_KIMCHANG then
|
|
O.S['key_xPrintVer'] := gMgSvc.xPrintVer;
|
|
|
|
sReqType := '0';
|
|
if not bPrevConnected or bChangeAgentInfo then
|
|
begin
|
|
sReqType := '1';
|
|
O.S['KEY_IP'] := _NewAgentInfo.sIp;
|
|
O.S['KEY_IPS'] := _NewAgentInfo.sIps;
|
|
O.S['KEY_MAC'] := _NewAgentInfo.sMAC;
|
|
O.S['KEY_ACCOUNT'] := _NewAgentInfo.sAccount;
|
|
O.S['KEY_GROUPNAME'] := _NewAgentInfo.sLocation;
|
|
O.S['KEY_AGENTTYPE'] := BooleanToStr(IsVDI, 'VDI', 'PC');
|
|
O.S['KEY_COLLASTCONN'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
|
|
O.S['KEY_COLVERSION'] := SdkVersion;
|
|
O.S['VUL_PWDSET'] := _NewAgentInfo.sPwSet;
|
|
if _NewAgentInfo.sPwSetTermOk <> 'true' then
|
|
begin
|
|
var nOver: Integer := DaysBetween(Now, gMgSvc.LastChangePwDT);
|
|
if (nOver > 0) and (nOver > gMgSvc.PrefModel.PwChkTermDay) then
|
|
begin
|
|
O.S['VUL_PWDEXPIRED'] := 'true';
|
|
O.S['VUL_PWDLASTDAYS'] := IntToStr(nOver - gMgSvc.PrefModel.PwChkTermDay);
|
|
end else
|
|
O.S['VUL_PWDEXPIRED'] := 'false';
|
|
end else
|
|
O.S['VUL_PWDEXPIRED'] := 'false';
|
|
O.S['VUL_SCRNLOCK'] := _NewAgentInfo.sScrnLock;
|
|
O.S['VUL_OSSAFEPATCH'] := _NewAgentInfo.sOsSafe;
|
|
O.S['VUL_AV'] := _NewAgentInfo.sAvInfo;
|
|
O.S['VUL_AVENABLE'] := _NewAgentInfo.sAvSafe;
|
|
O.S['VUL_AVSAFEPATCH'] := _NewAgentInfo.sAvUptodate;
|
|
O.S['VUL_FW'] := _NewAgentInfo.sFwInfo;
|
|
O.S['VUL_FWENABLE'] := _NewAgentInfo.sFwSafe;
|
|
O.S['VUL_PI'] := _NewAgentInfo.sPiSafe;
|
|
O.S['VUL_AD'] := BooleanToStr(_NewAgentInfo.bJoinAD, 'true', 'false');
|
|
end;
|
|
|
|
// {$IFDEF DEBUG} SaveJsonObjToFile(O, 'c:\pa.json'); {$ENDIF}
|
|
|
|
sRes := gMgSvc.HttpPost(gMgSvc.DestIPort + 'statusRequest.do', sReqType, O.AsString);
|
|
|
|
// 접속 상태 처리를 TimerCheckConnect()에서 여기로 옮김 23_0324 12:04:45 kku
|
|
try
|
|
if sRes = 'true' then
|
|
TTgTrace.T('Status Response .. Empty');
|
|
|
|
bConnected := (sRes = POST_TIMEOUT) or
|
|
( (sRes <> '') and (sRes <> '404') and (sRes <> 'true') and sRes.Contains('SERVERTIME') );
|
|
if not bConnected then
|
|
begin
|
|
if not bPrevConnected then
|
|
begin
|
|
if bFailChangeDestUrl then
|
|
gMgSvc.ChangeDestinationUrl;
|
|
end else
|
|
gMgSvc.SetConnected(false, false);
|
|
end else
|
|
if not bPrevConnected then
|
|
begin
|
|
if sRes = POST_TIMEOUT then
|
|
begin
|
|
bConnected := false;
|
|
if bFailChangeDestUrl then
|
|
gMgSvc.ChangeDestinationUrl; // 음... 타임아웃 되도 이전 접속이 false라면 접속 정보 변경 시도해준다 23_0608 13:49:09 kku
|
|
end else begin
|
|
gMgSvc.SetConnected(true, true);
|
|
|
|
// 접속 시 CJ 사번 인증 24_1218 14:45:10 kku
|
|
// 나중에 부하 발생 시 문제가 생길거 같아서 봉인...
|
|
// if CUSTOMER_TYPE = CUSTOMER_CJOV_GLOBAL then
|
|
// gMgSvc.DoEmpNoCheck := IsCheckEmpNo and gMgSvc.PrefModel.IsEmpVerify;
|
|
end;
|
|
end;
|
|
|
|
if bConnected then
|
|
begin
|
|
// if CUSTOMER_TYPE = CUSTOMER_CJOV_GLOBAL then // 일단 봉인 24_1218 14:49:38 kku
|
|
// begin
|
|
// // CJ 사번 미인증 체크 24_1218 14:40:44 kku
|
|
// if gMgSvc.DoEmpNoCheck then
|
|
// begin
|
|
// gMgSvc.IsEmpNoOk := VerifyEmpNo(gMgSvc.DestServerUrl, gMgSvc.HTTP, gMgSvc.EmpNo);
|
|
// gMgSvc.DoEmpNoCheck := false;
|
|
// end;
|
|
// end else
|
|
if (gMgSvc.HeModeKind = hmkSecurity) and gMgSvc.DoEmpNoCheck then
|
|
begin
|
|
// 사번검증을 통해 미검증 시 보안모드 진입을 막을 예정이었으나...
|
|
// 일단 그렇게까지 동작하지 않도록 함 22_0531 16:04:58 kku
|
|
gMgSvc.IsEmpNoOk := VerifyEmpNo(gMgSvc.DestServerUrl, gMgSvc.HTTP, gMgSvc.EmpNo);
|
|
gMgSvc.DoEmpNoCheck := false;
|
|
|
|
if not gMgSvc.IsEmpNoOk then
|
|
begin
|
|
gMgSvc.PopupMessage(TYPE_MSG_VUL_EMPNO);
|
|
|
|
if CUSTOMER_TYPE = CUSTOMER_KFTC then
|
|
begin
|
|
// 금융결제원의 경우 사번이 유효하지 않은 경우 (인사연동 안된 사번)
|
|
// 보안모드 차단 되도록 기능 추가 23_0425 12:52:05 kku
|
|
if gMgSvc.VulService <> nil then
|
|
gMgSvc.VulService.SetDisconnect(true);
|
|
end;
|
|
end;
|
|
end else
|
|
gMgSvc.IsEmpNoOk := true;
|
|
end;
|
|
except
|
|
TTgTrace.T('ProcessSignal() .. Fail .. ConnectionCheck');
|
|
end;
|
|
|
|
if not bConnected or (sRes = POST_TIMEOUT) then
|
|
goto LB_SignalComplete;
|
|
// 접속 상태 처리 끝 ---------------------------------------------------------
|
|
|
|
try
|
|
O := SO(sRes);
|
|
if O = nil then
|
|
begin
|
|
// SaveStrToFile('c:\ttttt.txt', sRes, TEncoding.UTF8);
|
|
TTgTrace.T('ProcessSignal() .. Invalid Response ... 2');
|
|
exit;
|
|
end;
|
|
except
|
|
TTgTrace.T('ProcessSignal() .. Invalid Response ... 1');
|
|
exit;
|
|
end;
|
|
|
|
// {$IFDEF DEBUG} SaveJsonObjToFile(O, 'c:\ss.json'); {$ENDIF}
|
|
|
|
// if ((O.S['UPD_TYPE'] <> '') and (O.S['UPD_TYPE'].ToLower <> 'false')) or
|
|
// ((O.S['UPD_MODE'] <> '') and (O.S['UPD_MODE'].ToLower <> 'false')) or
|
|
// ((O.S['UPD_CAMPAIGN'] <> '') and (O.S['UPD_CAMPAIGN'].ToLower <> 'false')) or
|
|
// ((O.S['UPD_RULE'] <> '') and (O.S['UPD_RULE'].ToLower <> 'false')) then
|
|
// begin
|
|
// O.S['1'] := '';
|
|
// end;
|
|
|
|
if CUSTOMER_TYPE = CUSTOMER_KIMCHANG then
|
|
begin
|
|
|
|
end;
|
|
|
|
bUpdate := false;
|
|
if O.S['KEY_DEPT'] <> gMgSvc.DeptName then
|
|
begin
|
|
gMgSvc.AgentModel.DeptName := O.S['KEY_DEPT'];
|
|
bUpdate := true;
|
|
end;
|
|
|
|
if O.S['KEY_USERNAME'] <> gMgSvc.UName then
|
|
begin
|
|
gMgSvc.AgentModel.UName := O.S['KEY_USERNAME'];
|
|
bUpdate := true;
|
|
end;
|
|
|
|
if O.S['KEY_USEREMAIL'] <> gMgSvc.Email then
|
|
begin
|
|
gMgSvc.AgentModel.Email := O.S['KEY_USEREMAIL'];
|
|
bUpdate := true;
|
|
end;
|
|
|
|
if (O.S['changedEmpId'] <> '') and (O.S['changedEmpId'] <> gMgSvc.EmpNo) then
|
|
begin
|
|
TTgTrace.T('[09] 사번 변경, %s > %s', [gMgSvc.AgentModel.EmpNo, O.S['changedEmpId']]);
|
|
gMgSvc.SendEventLogEx(LOG_CHANGE_EMPNO, Format('[Server] EmpId Changed. (%s > %s)', [gMgSvc.AgentModel.EmpNo, O.S['changedEmpId']]), false);
|
|
gMgSvc.AgentModel.EmpNo := O.S['changedEmpId'];
|
|
bUpdate := true;
|
|
end;
|
|
|
|
// {$IFNDEF DEBUG}
|
|
// TTgTrace.T('key_approval = %s', [O.S['key_approval']], 9);
|
|
if gMgSvc.UseApproval <> (O.S['key_approval'] = 'true') then
|
|
begin
|
|
gMgSvc.UseApproval := not gMgSvc.UseApproval;
|
|
bUpdate := true;
|
|
end;
|
|
// {$ENDIF}
|
|
|
|
// TTgTrace.T('KEY_USERNAME : %s, KEY_USEREMAIL : %s', [O.S['KEY_USERNAME'], O.S['KEY_USEREMAIL']], 2);
|
|
|
|
wURole := StrToIntDef(O.S['KEY_ROLE'], 0);
|
|
if wURole <> gMgSvc.UserRole then
|
|
begin
|
|
gMgSvc.UserRole := wURole;
|
|
bUpdate := true;
|
|
end;
|
|
|
|
{$IFNDEF DEBUG}
|
|
if not gMgSvc.RcvRemoveAgent and (Trim(O.S['KEY_FORCEUNINSTALL']).ToLower = 'true') then
|
|
begin
|
|
TTgTrace.T('Req .. AgentUninstall ..');
|
|
gMgSvc.RcvRemoveAgent := true;
|
|
|
|
gMgSvc.DirectSendEventLog(URI_USER_ACTION, SYSEVT_REQ_AGENT_UNINSTALL, '[Req] Uninstall Agent');
|
|
|
|
if gMgSvc.RcvHwnd <> 0 then
|
|
PostMessage(gMgSvc.RcvHwnd, WM_REQ_AGENT_UNINSTALL, 0, 0);
|
|
end;
|
|
{$ENDIF}
|
|
|
|
if bUpdate then
|
|
begin
|
|
gMgSvc.AgentModel.Save;
|
|
gMgSvc.UpdateAgentInfo;
|
|
end;
|
|
|
|
if CUSTOMER_TYPE = CUSTOMER_LOTTEMART then
|
|
begin
|
|
case CUSTOMER_SUB_TYPE of
|
|
1, 2 :
|
|
if gMgSvc.AgentModel.UName = '' then
|
|
begin
|
|
// 이름이 없으면 인사 정보가 없는걸로 판단 25_0402 14:00:42 kku
|
|
if not MutexExists('Global\EPI_250412') then
|
|
gMgSvc.PopupMessage(TYPE_EMPTY_PERSONAL_INFO);
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// 결재 처리 시작 --------------------------------------------------------------
|
|
// 결재요청 알림
|
|
for i := Low(_arrUpdReq) to High(_arrUpdReq) do
|
|
begin
|
|
sKName := _arrUpdReq[i];
|
|
if (O.O[sKName] <> nil) and
|
|
(O.O[sKName].DataType = stArray) and (O.A[sKName].Length > 0) then
|
|
begin
|
|
var sData: String := O.O[sKName].AsJSon;
|
|
if _arrChkReqVal[i] <> sData then
|
|
begin
|
|
_arrChkReqVal[i] := sData;
|
|
if CUSTOMER_TYPE = CUSTOMER_DEV then
|
|
TTgTrace.T('%s = %s', [sKName, O.O[sKName].AsJSon]);
|
|
|
|
// {$IFDEF DEBUG} SaveJsonObjToFile(O, 'c:\ss1.json'); {$ENDIF}
|
|
|
|
var q: Integer := 0;
|
|
for q := 0 to O.A[sKName].Length - 1 do
|
|
SendMessage(gMgSvc.RcvHwnd, WM_REQUEST_APPROVAL, i, NativeInt(O.A[sKName].S[q]));
|
|
|
|
bUpdate := true;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
// 결재완료 알림
|
|
for i := Low(_arrUpdDone) to High(_arrUpdDone) do
|
|
begin
|
|
sKName := _arrUpdDone[i];
|
|
if (O.O[sKName] <> nil) and
|
|
(O.O[sKName].DataType = stArray) and (O.A[sKName].Length > 0) then
|
|
begin
|
|
var sData: String := O.O[sKName].AsJSon;
|
|
if _arrChkDoneVal[i] <> sData then
|
|
begin
|
|
_arrChkDoneVal[i] := sData;
|
|
if CUSTOMER_TYPE = CUSTOMER_DEV then
|
|
TTgTrace.T('%s = %s', [sKName, O.O[sKName].AsJSon]);
|
|
|
|
// {$IFDEF DEBUG} SaveJsonObjToFile(O, 'c:\ss2.json'); {$ENDIF}
|
|
|
|
var q: Integer := 0;
|
|
for q := 0 to O.A[sKName].Length - 1 do
|
|
SendMessage(gMgSvc.RcvHwnd, WM_DONE_APPROVAL, i, NativeInt(O.A[sKName].O[q].AsJSon));
|
|
|
|
bUpdate := true;
|
|
end;
|
|
end;
|
|
end;
|
|
// 결재 처리 끝 ==--------------------------------------------------------------
|
|
|
|
if (O.S['UPD_RULE'] <> '') and (O.S['UPD_RULE'].ToLower <> 'false') then
|
|
begin
|
|
gMgSvc.MgRule.UpdateRuleEnts(O.O['UPD_RULE']);
|
|
bUpdate := true;
|
|
end;
|
|
|
|
if // not bPrevConnected or
|
|
((O.S['UPD_TYPE'] <> '') and (O.S['UPD_TYPE'].ToLower <> 'false')) or
|
|
(O.S['KEY_GROUPNAME'] <> gMgSvc.PrefModel.PolicyGroup) then
|
|
begin
|
|
ProcessRcvPolicy(rpkAll);
|
|
// TTgTrace.T('정책 업데이트됨', 1);
|
|
// gMgSvc.RefreshView;
|
|
bUpdate := true;
|
|
end;
|
|
|
|
if bChangeAgentInfo then
|
|
gMgSvc.AgentInfo := _NewAgentInfo;
|
|
|
|
if (O.S['UPD_CAMPAIGN'] <> '') and (O.S['UPD_CAMPAIGN'].ToLower <> 'false') then
|
|
begin
|
|
gMgSvc.MgCampn.UpdateCampnEnts(O.O['UPD_CAMPAIGN']);
|
|
bUpdate := true;
|
|
end;
|
|
|
|
if bUpdate then
|
|
begin
|
|
// {$IFDEF DEBUG} SaveJsonObjToFile(O, 'c:\uss.json'); {$ENDIF}
|
|
gMgSvc.LastPolicy := O.S['SERVERTIME']; // FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
|
|
end;
|
|
|
|
if gMgSvc.UpdateTick <> 0 then
|
|
begin
|
|
// 10분간 업데이트 시도가 끝나지 않으면
|
|
// 다시 시도 하기 위해 초기화 해준다 23_0830 13:41:36 kku
|
|
if (GetTickCount - gMgSvc.UpdateTick) >= 600000 then
|
|
gMgSvc.UpdateTick := 0;
|
|
end;
|
|
|
|
if CheckUpdateAble then
|
|
ProcessUpdate;
|
|
|
|
if CUSTOMER_TYPE = CUSTOMER_KIMCHANG then
|
|
CheckAndUpdate_xPrint;
|
|
|
|
ProcessDownloadModules;
|
|
|
|
LB_SignalComplete :
|
|
gMgSvc.UpdateInternalInfo;
|
|
Result := true;
|
|
except
|
|
on E: Exception do
|
|
ETgException.TraceException(E, 'Fail .. ProcessSignal()');
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
ZeroMemory(@_NewAgentInfo, SizeOf(_NewAgentInfo));
|
|
|
|
finalization
|
|
Finalize(_NewAgentInfo);
|
|
|
|
end.
|