Init: Migrate SimpleRemoter (Since v1.3.1) to Gitea
This commit is contained in:
82
server/2015Remote/NotifyManager.h
Normal file
82
server/2015Remote/NotifyManager.h
Normal file
@@ -0,0 +1,82 @@
|
||||
#pragma once
|
||||
|
||||
#include "NotifyConfig.h"
|
||||
#include <functional>
|
||||
#include <mutex>
|
||||
|
||||
// Forward declaration
|
||||
class context;
|
||||
|
||||
class NotifyManager {
|
||||
public:
|
||||
static NotifyManager& Instance();
|
||||
|
||||
// Initialize the manager (call once at startup)
|
||||
void Initialize();
|
||||
|
||||
// Check if PowerShell is available for sending emails
|
||||
bool IsPowerShellAvailable() const { return m_powerShellAvailable; }
|
||||
|
||||
// Get/Set configuration (thread-safe copy)
|
||||
NotifyConfig GetConfig();
|
||||
void SetConfig(const NotifyConfig& config);
|
||||
|
||||
// Load/Save configuration
|
||||
void LoadConfig();
|
||||
void SaveConfig();
|
||||
|
||||
// Check if notification should be sent for this host
|
||||
// If yes, outMatchedKeyword will contain the matched keyword
|
||||
// remark: optional host remark (used for COMPUTER_NAME column if not empty)
|
||||
bool ShouldNotify(context* ctx, std::string& outMatchedKeyword, const CString& remark = _T(""));
|
||||
|
||||
// Send notification email asynchronously
|
||||
// subject and body should be UTF-8 encoded
|
||||
void SendNotifyEmailAsync(const std::string& subject, const std::string& body);
|
||||
|
||||
// Send a test email (synchronous, returns success/error message)
|
||||
std::string SendTestEmail();
|
||||
|
||||
// Build notification email content for host online event
|
||||
void BuildHostOnlineEmail(context* ctx, const std::string& matchedKeyword,
|
||||
std::string& outSubject, std::string& outBody);
|
||||
|
||||
private:
|
||||
NotifyManager();
|
||||
~NotifyManager() = default;
|
||||
NotifyManager(const NotifyManager&) = delete;
|
||||
NotifyManager& operator=(const NotifyManager&) = delete;
|
||||
|
||||
// Detect if PowerShell Send-MailMessage is available
|
||||
bool DetectPowerShellSupport();
|
||||
|
||||
// Get config file path
|
||||
std::string GetConfigPath() const;
|
||||
|
||||
// Simple XOR encryption for password (not secure, just obfuscation)
|
||||
std::string EncryptPassword(const std::string& password);
|
||||
std::string DecryptPassword(const std::string& encrypted);
|
||||
|
||||
// Escape special characters for PowerShell string
|
||||
std::string EscapePowerShell(const std::string& str);
|
||||
|
||||
// Execute PowerShell command and get exit code
|
||||
bool ExecutePowerShell(const std::string& command, DWORD* exitCode = nullptr, bool hidden = true);
|
||||
|
||||
// Split string by delimiter
|
||||
std::vector<std::string> SplitString(const std::string& str, char delimiter);
|
||||
|
||||
// Trim whitespace from string
|
||||
std::string Trim(const std::string& str);
|
||||
|
||||
private:
|
||||
bool m_initialized;
|
||||
bool m_powerShellAvailable;
|
||||
NotifyConfig m_config;
|
||||
mutable std::mutex m_mutex; // Protects m_config access
|
||||
};
|
||||
|
||||
// Convenience function
|
||||
inline NotifyManager& GetNotifyManager() {
|
||||
return NotifyManager::Instance();
|
||||
}
|
||||
Reference in New Issue
Block a user