BSOne.SFC/eCrmHE/Utils/EXE_BS1Agents/ThdBS1Agent.pas

839 lines
25 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{*******************************************************}
{ }
{ ThdBS1Agent }
{ }
{ Copyright (C) 2023 kku }
{ }
{*******************************************************}
unit ThdBS1Agent;
interface
uses
Tocsg.Thread, System.SysUtils, Winapi.Windows, Winapi.Messages,
System.Classes, IdHTTP, IdSSLOpenSSL, ThdEvent;
const
// VER_AGENT = '1.5.6.91';
VER_AGENT = '1.5.8.153';
WM_UPDATE_AGENT = WM_USER + 4902;
type
TCheckAgentInfo = record
sAgentId,
sIp, sIps, sMAC,
sHostName, // sStatusType,
sEulaCon, sLocation, sPwSet, sPwSetTermOk,
sScrnLock, sOsVer, sAvInfo,
// sAsInfo,
sFwInfo, sOsSafe, sPatchExist,
sAvSafe, sFwSafe,
sAvUptodate,
sPiSafe, // sSafeBlock,
sModeName,
sEmpNo: String;
bSafePcSHCD: Boolean; // ³ªÁß¿¡ »èÁ¦ ¿¹Á¤ 23_0313 16:19:12 kku
end;
TReqPoKind = (rpkId, rpkAll, rpkMng, rpkSelPo, npkSelPoCate, npkSelPoKey);
TAgentState = (asInit, asConnected, asDisconnected);
TBS1ModeKind = (hmkSleep, hmkSecurity, hmkVulnerability, hmkOffline, hmkException);
TThdBS1Agent = class(TTgThread)
private
HTTP_: TIdHTTP;
SSL_: TIdSSLIOHandlerSocketOpenSSL;
hRcvWnd_: HWND;
pNode_: Pointer;
sAccount_,
sLastPolModeDT_,
sIp_, sMac_,
sHead_, sEmpNo_,
sDept_, sUName_, sEMail_,
sHostName_, sAgentId_,
sSvrAddr_, sPolicyGroup_: String;
AgentInfo_: TCheckAgentInfo;
dwInterval_: DWORD;
Mode_: TBS1ModeKind;
State_: TAgentState;
dtLastPolMod_,
dtLastRcvPol_: TDateTime;
bAbleUpdateInfo_: Boolean;
ThdEvent_: TThdEvent;
protected
function GetState: TAgentState;
procedure SetState(aState: TAgentState);
function GetMode: TBS1ModeKind;
procedure SetMode(aMode: TBS1ModeKind);
procedure Execute; override;
public
Constructor Create(hRcvWnd: HWND; pNode: Pointer; sEmpNo, sHostName: String; dwInterval: DWORD = 0);
Destructor Destroy; override;
function ProcessRcvPolicy(aKind: TReqPoKind; sPoId: String = ''; sPoAddInfo: String = ''): Boolean;
procedure SendEventLog(sUri, sCode, sMsg: String);
procedure UpdateAgentInfo;
procedure SetUpdateAgentInfo(bVal: Boolean);
property AgentState: TAgentState read GetState;
property AgentMode: TBS1ModeKind read GetMode write SetMode;
property PolicyGroup: String read sPolicyGroup_;
property EmpNo: String read sEmpNo_;
property LastRcvPolDT: TDateTime read dtLastRcvPol_;
property LastPolModDT: TDateTime read dtLastPolMod_;
property SvrAddr: String read sSvrAddr_;
end;
implementation
uses
HttpUtil, Tocsg.Exception, ManagerSetting, superobject, Tocsg.Network,
Condition, CrmUtil, GlobalDefine, Tocsg.Convert, Tocsg.WinInfo;
{ TThdBS1Agent }
Constructor TThdBS1Agent.Create(hRcvWnd: HWND; pNode: Pointer; sEmpNo, sHostName: String; dwInterval: DWORD = 0);
begin
Inherited Create;
hRcvWnd_ := hRcvWnd;
pNode_ := pNode;
sIp_ := GetHostIP;
sMac_ := GetMACAddrUsing;
sHead_ := gSet.EmpNoHead;
State_ := asInit;
sEmpNo_ := sEmpNo;
sAgentId_ := sEmpNo_;
sHostName_ := sHostName;
sSvrAddr_ := gSet.SvrAddr;
if (Length(sSvrAddr_) > 0) and (sSvrAddr_[Length(sSvrAddr_)] <> '/') then
sSvrAddr_ := sSvrAddr_ + '/';
sAccount_ := GetAccount;
sPolicyGroup_ := 'Default';
sLastPolModeDT_ := '1999-01-01 01:01:01';
sDept_ := '';
sUName_ := '';
sEMail_ := '';
ZeroMemory(@AgentInfo_, SizeOf(AgentInfo_));
dtLastPolMod_ := 0;
dtLastRcvPol_ := 0;
dwInterval_ := dwInterval;
if dwInterval_ = 0 then
dwInterval_ := 4000;
HTTP_ := nil;
SSL_ := nil;
bAbleUpdateInfo_ := false;
ASSERT(CreateHttpSSL(HTTP_, SSL_, gSet.ReadTimeout, gSet.ConnectTimeout));
Mode_ := hmkSleep;
ThdEvent_ := TThdEvent.Create(sSvrAddr_);
ThdEvent_.StartThread;
// FreeOnTerminate := true;
end;
Destructor TThdBS1Agent.Destroy;
begin
FreeAndNil(ThdEvent_);
Inherited;
FreeAndNil(HTTP_);
FreeAndNil(SSL_);
end;
procedure TThdBS1Agent.SendEventLog(sUri, sCode, sMsg: String);
var
O: ISuperObject;
begin
try
O := SO;
// if bPrevent then
// O.S['TYP_MSG'] := '@(!)_IC_P'
// else
O.S['TYP_MSG'] := '@(!)_IC_M';
O.S['KEY_AGENTID'] := sAgentId_;
O.S['KEY_EMPNO'] := sEmpNo_;
O.S['KEY_ACCOUNT'] := sAccount_;
O.S['KEY_HOSTNAME'] := sHostName_;
O.S['KEY_SUBMITTIME'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
O.S['KEY_LOGCODE'] := sCode;
O.S['DETECTION_DATE'] := O.S['KEY_SUBMITTIME']; // À̺¥Æ® ¹ß»ý ½Ã°¢. REQUESTÀÇ °æ¿ì, ¿¹¿Ü ½ÅûÇÒ À̺¥Æ®ÀÇ ¹ß»ý ½Ã°¢
O.S['KEY_SUMMARY'] := sMsg;
// O.S['PARENT_LA_ID'] // »óÀ§ À̺¥Æ®
O.S['POLICY_ID'] := 'Unknown';
// 2.6
// O.S['MODEL_ID'] := sAgentId_;
// O.S['TOCSG_LA_IFNAME'] := sUri;
// O.S['TOCSG_LA_ID'] := sAgentId_;
// O.S['TOCSG_LA_EMPID'] := sEmpNo_;
// O.S['TOCSG_LA_CODE'] := sCode;
// O.S['TOCSG_LA_DATA'] := Format('[%s] ', [sHead_]) + sMsg;
// O.S['TOCSG_LA_HOSTNAME'] := sHostName_;
// O.S['TOCSG_LA_LASTCONNDATE'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
// O.S['TOCSG_LA_MACADDR'] := sIp_;
// O.S['TOCSG_LA_REMOTEIP'] := sMac_;
ThdEvent_.Push(O.AsString);
except
on E: Exception do
ETgException.TraceException(Self, E, 'Fail .. SendEventLog()');
end;
end;
function TThdBS1Agent.GetState: TAgentState;
begin
Lock;
try
Result := State_;
finally
Unlock;
end;
end;
procedure TThdBS1Agent.SetState(aState: TAgentState);
begin
Lock;
try
State_ := aState;
finally
Unlock;
end;
end;
function TThdBS1Agent.GetMode: TBS1ModeKind;
begin
Lock;
try
Result := Mode_;
finally
Unlock;
end;
end;
procedure TThdBS1Agent.SetMode(aMode: TBS1ModeKind);
begin
Lock;
try
Mode_ := aMode;
finally
Unlock;
end;
end;
procedure TThdBS1Agent.UpdateAgentInfo;
begin
if bAbleUpdateInfo_ and (hRcvWnd_ <> 0) then
SendMessage(hRcvWnd_, WM_UPDATE_AGENT, 0, NativeInt(pNode_));
end;
procedure TThdBS1Agent.SetUpdateAgentInfo(bVal: Boolean);
begin
bAbleUpdateInfo_ := bVal;
end;
function TThdBS1Agent.ProcessRcvPolicy(aKind: TReqPoKind; sPoId: String = ''; sPoAddInfo: String = ''): Boolean;
var
O, OP: ISuperObject;
sReqType, sRes: String;
begin
try
O := SO;
O.S['KEY_AGENTID'] := sAgentId_;
O.S['KEY_EMPNO'] := sEmpNo_;
O.S['KEY_HOSTNAME'] := sHostName_;
O.S['KEY_OSVER'] := '?';
case aKind of
rpkId : sReqType := '0';
rpkAll : sReqType := '1';
rpkMng : sReqType := '2';
rpkSelPo :
begin
sReqType := '3';
if sPoId = '' then
begin
_Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
exit;
end;
O.S['KEY_POLICYID'] := sPoId;
end;
npkSelPoCate :
begin
sReqType := '4';
if sPoId = '' then
begin
_Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
exit;
end;
if sPoAddInfo = '' then
begin
_Trace('ProcessRcvPolicy() .. npkSelPoCate .. EmptyCate');
exit;
end;
O.S['KEY_POLICYID'] := sPoId;
O.S['KEY_CATEGORY'] := sPoAddInfo;
end;
npkSelPoKey :
begin
sReqType := '5';
if sPoId = '' then
begin
_Trace('ProcessRcvPolicy() .. rpkSelPo .. EmptyID');
exit;
end;
if sPoAddInfo = '' then
begin
_Trace('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}
sRes := HttpPost(HTTP_, sSvrAddr_ + 'policyRequest.do', sReqType, O.AsString);
if sRes = '' then
begin
// _Trace('ProcessRcvPolicy() .. Empty .. Msg="%s", Code=%d', [gMgSvc.HttpErrorMsg, gMgSvc.HttpErrorCode]);
exit;
end else
if sRes = POST_TIMEOUT then
begin
// _Trace('ProcessRcvPolicy() .. timeout .. Msg="%s", Code=%d', [gMgSvc.HttpErrorMsg, gMgSvc.HttpErrorCode]);
exit;
end;
OP := SO(sRes);
if OP = nil then
begin
_Trace('ProcessRcvPolicy() .. Invalid policy');
exit;
end;
dtLastRcvPol_ := Now;
case aKind of
rpkId : ;
rpkAll :
begin
var sGrpName: String := OP.S['GROUP_NAME'];
if sPolicyGroup_ <> sGrpName then
begin
sPolicyGroup_ := sGrpName;
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']);
//
// if OP.O['POL_MNG'] <> nil then
// begin
// gMgSvc.PrefModel.SetMngPolicy(OP.O['POL_MNG']);
// 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']);
//
// 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'])
// 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'])
// 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'])
// else
// gMgSvc.OffPolicy.Clear(true, true);
//
// if (OP.S['EXCEPTMODE'] <> '') and (OP.S['EXCEPTMODE'].ToLower <> 'false') and
// (OP.O['POL_EXC'] <> nil) then
// gMgSvc.ExpPolicy.SetPolicy(OP.S['EXCEPTMODE'], OP.O['POL_EXC'])
// 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}
except
on E: Exception do
ETgException.TraceException(E, 'Fail .. ProcessRcvPolicy()');
end;
end;
procedure TThdBS1Agent.Execute;
var
bInit: Boolean;
sRes, sTemp,
sReqType,
sLastPolicy: String;
O: ISuperObject;
bConnected,
bPrevConnected: Boolean;
NewAgentInfo: TCheckAgentInfo;
bUpdate,
bChangeAgentInfo: Boolean;
function IsChangeAgentInfo: Boolean;
begin
Result := true;
with 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 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 sModeName <> NewAgentInfo.sModeName then exit;
end;
Result := false;
end;
Label
LB_SignalComplete;
begin
bInit := false;
sLastPolicy := '';
while not Terminated and not GetWorkStop do
begin
try
if not bInit then
begin
sPolicyGroup_ := '';
sRes := GetEmpNoInfo(sSvrAddr_, HTTP_, sEmpNo_);
if sRes = '' then
begin
Sleep(500);
continue;
end;
try
O := SO(sRes);
except
Sleep(500);
continue;
end;
if (O.S['result'] = 'false') or (O.S['deleteyn'] = 'true') then
begin
// ¿¡ÀÌÀüÆ® »ç¹ø Á¤º¸°¡ ¾ø°Å³ª »èÁ¦ »óŶó¸é ¼³Ä¡ ·Î±×¸¦ º¸³»ÁØ´Ù 23_0403 09:43:04 kku
SendEventLog(URI_CONNECT, SYSEVT_AGENT_INSTALL, 'Agent first connected');
end;
bInit := true;
// ¼­¹ö¿¡¼­ ¸¶Áö¸· ¸ðµå ·Î±×·Î ÇöÀç ¿¡ÀÌÀüÆ® ¸ðµå¸¦ ÆÇº°ÇÏ°Ô µÇ´Âµ¥ ÃÖÃÊ Á¤º¸°¡ ¾øÀ¸¸é ¿¡ÀÌÀüÆ® ¸ñ·Ï¿¡ º¸ÀÌÁö ¾Ê°Ô µÈ´Ù. 23_0403 13:22:43 kku
SendEventLog(URI_USER_ACTION, MODE_SECURITY_END, 'Sleep mode');
SetMode(hmkSleep);
SetState(asDisconnected);
UpdateAgentInfo;
end;
NewAgentInfo.sAgentId := sAgentId_;
NewAgentInfo.sIp := sIp_;
NewAgentInfo.sIps := sIp_;
NewAgentInfo.sMAC := sMac_;
NewAgentInfo.sHostName := sHostName_;
NewAgentInfo.sEulaCon := 'disagree';
NewAgentInfo.sLocation := 'Default';
NewAgentInfo.sPwSet := 'true';
NewAgentInfo.sPwSetTermOk := 'true';
NewAgentInfo.sScrnLock := 'true';
NewAgentInfo.sOsVer := '?';
NewAgentInfo.sAvInfo := 'Windows Defender';
NewAgentInfo.sFwInfo := 'Windows Firewall';
NewAgentInfo.sOsSafe := 'true';
NewAgentInfo.sPatchExist := 'true';
NewAgentInfo.sAvUptodate := 'true';
NewAgentInfo.sAvSafe := 'true';
NewAgentInfo.sFwSafe := 'true';
NewAgentInfo.sPiSafe := 'true';
case GetMode of
hmkSleep : NewAgentInfo.sModeName := 'Sleep';
hmkSecurity : NewAgentInfo.sModeName := 'Secu';
hmkVulnerability : NewAgentInfo.sModeName := 'Vul';
hmkOffline : NewAgentInfo.sModeName := 'Offline';
hmkException : NewAgentInfo.sModeName := 'Exption';
end;
NewAgentInfo.sEmpNo := sEmpNo_;
O := SO;
bPrevConnected := GetState = asConnected;
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'] := sLastPolModeDT_; // ºó°ªÀ» ³ÖÀ¸¸é ÀÀ´äµµ ºó°ªÀ¸·Î ¿Â´Ù... 23_0802 11:06:47 kku
bChangeAgentInfo := IsChangeAgentInfo;
if bChangeAgentInfo then
AgentInfo_ := NewAgentInfo;
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_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'] := VER_AGENT;
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;
end;
// SaveJsonObjToFile(O, 'c:\a.json');
// sRes := HttpPost(HTTP_, sSvrAddr_, '123120', O.AsString, true);
sRes := HttpPost(HTTP_, sSvrAddr_ + 'statusRequest.do', sReqType, O.AsString);
// Á¢¼Ó »óŠ󸮸¦ TimerCheckConnect()¿¡¼­ ¿©±â·Î ¿Å±è 23_0324 12:04:45 kku
try
if sRes = 'true' then
_Trace('Status Response .. Empty');
bConnected := (sRes = POST_TIMEOUT) or
( (sRes <> '') and (sRes <> '404') and (sRes <> 'true') and sRes.Contains('SERVERTIME') );
if not bConnected then
begin
SetState(asDisconnected);
end else
if not bPrevConnected then
begin
if sRes = POST_TIMEOUT then
bConnected := false
else
SetState(asConnected);
end;
if bConnected then
begin
// ¿¬°á ó¸®
end;
except
_Trace('Fail .. ConnectionCheck');
end;
if not bConnected or (sRes = POST_TIMEOUT) then
goto LB_SignalComplete;
// Á¢¼Ó »óÅ ó¸® ³¡ ---------------------------------------------------------
try
O := SO(sRes);
if O = nil then
begin
_Trace('Invalid PolicyData ... 2');
exit;
end;
except
_Trace('Invalid PolicyData ... 1');
exit;
end;
bUpdate := false;
if O.S['KEY_DEPT'] <> sDept_ then
begin
sDept_ := O.S['KEY_DEPT'];
bUpdate := true;
end;
if O.S['KEY_USERNAME'] <> sUName_ then
begin
sUName_ := O.S['KEY_USERNAME'];
bUpdate := true;
end;
if O.S['KEY_USEREMAIL'] <> sEMail_ then
begin
sEMail_ := O.S['KEY_USEREMAIL'];
bUpdate := true;
end;
if bUpdate then
begin
// gMgSvc.AgentModel.Save;
// gMgSvc.UpdateAgentInfo;
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'] <> sPolicyGroup_) then
begin
sPolicyGroup_ := O.S['KEY_GROUPNAME'];
ProcessRcvPolicy(rpkAll);
// _Trace('Á¤Ã¥ ¾÷µ¥ÀÌÆ®µÊ', 1);
// gMgSvc.RefreshView;
bUpdate := true;
end;
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
sLastPolModeDT_ := O.S['SERVERTIME']; // FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
dtLastPolMod_ := StrToDateTime(sLastPolModeDT_);
UpdateAgentInfo;
end;
LB_SignalComplete :
Sleep(dwInterval_);
except
on E: Exception do
ETgException.TraceException(Self, E, 'Fail .. Execute()');
end;
end;
end;
//procedure TThdBS1Agent.Execute;
//var
// bInit: Boolean;
// sRes, sTemp,
// sStatusType,
// sLastPolicy: String;
// O: ISuperObject;
// bConnected,
// bPrevConnected: Boolean;
//Label
// LB_ProcessPolicy;
//begin
// bInit := false;
// sLastPolicy := '';
// while not Terminated and not GetWorkStop do
// begin
// try
// if not bInit then
// begin
// sRes := GetEmpNoInfo(sSvrAddr_, HTTP_, sEmpNo_);
// if sRes = '' then
// begin
// Sleep(500);
// continue;
// end;
//
// try
// O := SO(sRes);
// except
// Sleep(500);
// continue;
// end;
//
// if (O.S['result'] = 'false') or (O.S['deleteyn'] = 'true') then
// begin
// // ¿¡ÀÌÀüÆ® »ç¹ø Á¤º¸°¡ ¾ø°Å³ª »èÁ¦ »óŶó¸é ¼³Ä¡ ·Î±×¸¦ º¸³»ÁØ´Ù 23_0403 09:43:04 kku
// SendEventLog(URI_CONNECT, SYSEVT_AGENT_INSTALL, 'Agent first connected');
// end;
//
// bInit := true;
//
// // ¼­¹ö¿¡¼­ ¸¶Áö¸· ¸ðµå ·Î±×·Î ÇöÀç ¿¡ÀÌÀüÆ® ¸ðµå¸¦ ÆÇº°ÇÏ°Ô µÇ´Âµ¥ ÃÖÃÊ Á¤º¸°¡ ¾øÀ¸¸é ¿¡ÀÌÀüÆ® ¸ñ·Ï¿¡ º¸ÀÌÁö ¾Ê°Ô µÈ´Ù. 23_0403 13:22:43 kku
// SendEventLog(URI_USER_ACTION, MODE_SECURITY_END, 'Sleep mode');
// SetMode(hmkSleep);
// SetState(asDisconnected);
// UpdateAgentInfo;
// end;
//
// if GetMode = hmkSecurity then
// sStatusType := 'Connected'
// else
// sStatusType := 'Disconnected';
//
// O := SO;
// bPrevConnected := GetState = asConnected;
// if not bPrevConnected then
// begin
// O.S['MODEL_ID'] := sAgentId_;
// O.S['mwAKey_IP'] := sIp_;
// O.S['mwAKey_IPS'] := sIp_;
// O.S['mwAKey_MAC'] := sMac_;
// O.S['mwAKey_HOSTNAME'] := sHostName_;
// O.S['mwAKey_STATUS'] := sStatusType;
// O.S['mwAKey_COLLASTCONN'] := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
// O.S['mwAKey_COLVERSION'] := VER_AGENT;
// O.S['mwAKey_AGENTID'] := sAgentId_;
// O.S['mwAKey_EULACONFIRMED'] := 'disagree';
// O.S['mwAKey_LOCATION'] := sPolicyGroup_;
// O.S['mwAKey_PWDSET'] := 'true';
// O.S['mwAKey_SCRNLOCK'] := 'true';
// O.S['mwAKey_OSVER'] := '11(Test)';
// O.S['mwAKey_PATCHES'] := 'null';
// O.S['mwAKey_AVINFORM'] := 'Windows Defender';
// O.S['mwAKey_ASINFORM'] := 'Windows Defender';
// O.S['mwAKey_FIREWALLINFO'] := 'Windows Firewall';
// O.S['mwAKey_SOFTWAREINFO'] := 'null';
// O.S['mwAKey_ADDEULACONFIRM'] := 'false';
// O.S['mwAKey_OSSAFE'] := 'true';
// O.S['mwAKey_PATCHEXIST'] := 'true';
// O.S['mwAKey_AVSAFE'] := 'true';
// O.S['mwAKey_ASSAFE'] := 'true';
// O.S['mwAKey_FWSAFE'] := 'true';
// O.S['mwAKey_PISAFE'] := 'true';
// O.S['mwAKey_SAFEBLOCKSETTING'] := BooleanToStr(sStatusType = 'Connected', 'true', 'false');
// O.S['mwAKey_VPNINFO'] := sEmpNo_;
// O.S['mwAKey_EMPNO'] := sEmpNo_;
//// if NewAgentInfo.bSafePcSHCD then O.S['mwAKey_SAFEPC'] := 'true';
// end else begin
// O.S['mwAKey_LOCATION'] := sPolicyGroup_;
// O.S['mwAKey_EMPNO'] := sEmpNo_;
// O.S['mwAKey_IP'] := sIp_;
// O.S['mwAKey_HOSTNAME'] := sHostName_;
// O.S['mwAKey_MAC'] := sMac_;
// O.S['KEY_LASTPOLICY'] := sLastPolicy;
// end;
//
// // SaveJsonObjToFile(O, 'c:\a.json');
// sRes := HttpPost(HTTP_, sSvrAddr_, '123120', O.AsString, true);
//
// // Á¢¼Ó »óŠ󸮸¦ TimerCheckConnect()¿¡¼­ ¿©±â·Î ¿Å±è 23_0324 12:04:45 kku
// try
// bConnected := sRes <> '';
// if not bConnected then
// begin
// SetState(asDisconnected);
// end else
// if not bPrevConnected then
// begin
// if sRes = POST_TIMEOUT then
// bConnected := false
// else
// SetState(asConnected);
// end;
//
// if bConnected then
// begin
// // ¿¬°á ó¸®
// end;
// except
// _Trace('Fail .. ConnectionCheck');
// end;
//
// if not bConnected or (sRes = POST_TIMEOUT) then
// goto LB_ProcessPolicy;
// // Á¢¼Ó »óÅ ó¸® ³¡ ---------------------------------------------------------
//
// try
// O := SO(sRes);
// if O = nil then
// begin
// _Trace('Invalid PolicyData ... 2');
// exit;
// end;
// except
// _Trace('Invalid PolicyData ... 1');
// exit;
// end;
//
// sTemp := O.S['mwPKey_LOCNAME'];
// if sTemp = '' then
// goto LB_ProcessPolicy;
//
// if sPolicyGroup_ <> sTemp then
// sPolicyGroup_ := sTemp;
//
// sTemp := O.S['KEY_LASTPOLICY'];
// if (sTemp <> '') and (sLastPolicy <> sTemp) then
// begin
// sLastPolicy := O.S['KEY_LASTPOLICY'];
// dtLastRcvPol_ := StrToDateTime(sLastPolicy);
// end;
// UpdateAgentInfo;
//
// LB_ProcessPolicy :
// Sleep(4000);
// except
// on E: Exception do
// ETgException.TraceException(Self, E, 'Fail .. Execute()');
// end;
// end;
//end;
end.