Files
Work/watchdog/Evaluator.cpp
2024-08-07 09:16:27 -04:00

114 lines
2.9 KiB
C++

#include <WatchDog/Evaluator.hpp>
void Evaluator::evaluate(void)
{
Block<String> appKeys;
Block<String> notifyKeys;
if(!getAppKeys(appKeys))return;
evaluateAppKeys(appKeys);
if(!getNotifyKeys(notifyKeys))return;
evaluateNotifyKeys(notifyKeys);
}
bool Evaluator::getAppKeys(Block<String> &keys)
{
RegKey regKey(RegKey::LocalMachine);
DWORD index=0;
String key;
String value;
keys.remove();
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Apps"))return false;
while(true)
{
if(!regKey.enumKey(index++,key))break;
keys.insert(&key);
}
return keys.size()?true:false;
}
bool Evaluator::getNotifyKeys(Block<String> &keys)
{
RegKey regKey(RegKey::LocalMachine);
DWORD index=0;
String key;
String value;
keys.remove();
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Notify"))return false;
while(true)
{
if(!regKey.enumKey(index++,key))break;
keys.insert(&key);
}
return keys.size()?true:false;
}
void Evaluator::evaluateAppKeys(Block<String> &keys)
{
String strAppPath;
String strRun;
String strStartIn;
String strArgs;
String strPause;
for(int index=0;index<keys.size();index++)
{
RegKey regKey(RegKey::LocalMachine);
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Apps\\"+keys[index]))continue;
regKey.queryValue("Run",strRun);
if(!(strRun=="true"))continue;
regKey.queryValue("AppPath",strAppPath);
regKey.queryValue("StartIn",strStartIn);
regKey.queryValue("Args",strArgs);
regKey.queryValue("Pause",strPause);
Process process;
process.createProcess(strAppPath,false,strStartIn,strArgs);
if(!strPause.isNull())::Sleep(strPause.toInt());
}
}
void Evaluator::evaluateNotifyKeys(Block<String> &keys)
{
String strEmail;
String strHost;
String strDomainSender;
String strSender;
Block<String> mailData;
RegKey regKey(RegKey::LocalMachine);
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Notify"))return;
if(!regKey.queryValue("Host",strHost))return;
if(!regKey.queryValue("Sender",strSender))return;
if(!regKey.queryValue("DomainSender",strDomainSender))return;
for(int index=0;index<keys.size();index++)
{
RegKey regKey(RegKey::LocalMachine);
if(!regKey.openKey("Software\\Diversified\\WatchDog\\Notify\\"+keys[index]))continue;
regKey.queryValue("EMAIL",strEmail);
SMTPClient smtp;
if(!smtp.open(strHost))continue;
if(!smtp.helo(strDomainSender))
{
smtp.quit();
continue;
}
if(!smtp.mail(strSender))
{
smtp.quit();
continue;
}
smtp.rcpt(strEmail);
mailData.insert(&String(String("To: ")+strEmail));
mailData.insert(&String(String("Reply-To: ")+strSender));
mailData.insert(&String(String("From: ")+strSender));
mailData.insert(&String(String("Subject: WatchDog")));
mailData.insert(&String("\n"));
mailData.insert(&String("\n"));
mailData.insert(&String("WatchDog startup process"));
smtp.data(mailData);
smtp.quit();
smtp.close();
}
}