Skip to content
API Documentation
BastionGuard™
Backend.hpp
Go to the documentation of this file.
1/*
2 * BastionGuard™
3 * Copyright (C) 2025–2026 Calogero Scarnà
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 3.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <https://www.gnu.org/licenses/>.
16 *
17 * BastionGuard™ is a trademark of Calogero Scarnà.
18 * The BastionGuard™ name and branding are not licensed under the GPL.
19 */
20
21#pragma once
22#include <string>
23#include <vector>
24#include <memory>
25#include <filesystem>
26#include <functional>
27#include <map>
28#include <atomic>
29#include <libsmbclient.h>
30#include <sigc++/signal.h>
32#include "AntiRansomEngine.hpp"
33#include "phishing/WebProbe.hpp"
34#include "Utils.hpp"
35
36class Backend {
37public:
38 static Backend& instance();
40 static std::string getAppVersion();
41 static int getAppBuild();
42 static bool enableClamonacc();
43 static bool disableClamonacc();
44 static bool isClamonaccActive();
45 static std::string getClamonaccStatus();
46
47 static void setQuarantinePath(const std::string& path);
48 static std::string getQuarantinePath();
49 void setupAlertListener();
50 void moveToQuarantine(const std::string&);
51 static std::vector<std::string> getClamonaccLogs();
52 static std::string getLastUpdateDate();
53 static std::string getDbVersion();
54
55 static std::vector<std::string> getOnAccessPaths();
56 static std::vector<std::string> getOnAccessEvents();
57
58 void sendRansomwareAlert(const std::string& path, const std::string& family);
59 static bool installClamdIfMissing();
60 bool isSambaScanRunning();
61
62 void start_antiransom();
63 void stop_antiransom();
64 sigc::signal<void(const std::string&)>& signal_antiransom_event();
65 bool updateYaraRules(std::function<void(int, int, const std::string&)> progressCallback = nullptr);
66 static bool isAntiransomActive();
67
68 bool reload_dnsmasq();
69 bool updatePhishLists();
71 bool enablePhishAutoUpdate(bool enable);
72
73 std::vector<std::string> getWhitelist() const;
74 void addToWhitelist(const std::string& domain);
75 void removeFromWhitelist(const std::string& domain);
76 void saveWhitelist() const;
77 void loadWhitelist();
79 bool isBankDomain(const std::string& host) const;
80 std::function<void(const std::string&)> onBankListReload;
81 bool updateBankListFromURL(const std::string& source_url);
82
83 std::string checkUrl(const std::string& url);
84
85 bool isGoogleSafeEnabled() const { return googleSafeEnabled_; }
86 void setGoogleSafeEnabled(bool enabled) { googleSafeEnabled_ = enabled; }
87 void setGoogleSafeApiKey(const std::string& key) { googleSafeApiKey_ = key; }
88 std::string getGoogleSafeApiKey() const { return googleSafeApiKey_; }
90 bool testGoogleSafeKey();
91
92 void start_antiphish();
93 void stop_antiphish();
94 bool isAntiphishActive();
95 sigc::signal<void(const std::string&)>& signal_antiphish_event();
96 bool updateSanesecurityDB(std::function<void(int,int,const std::string&)> progressCallback = nullptr);
97 void scanSambaDir(const std::string& dir);
99 void setPhishingPort(int port);
100 int getPhishingPort() const;
101
102 std::string getSambaConfigPath() const;
103 std::vector<std::string> getSambaDirs();
104 void saveSambaConfig(bool enabled, const std::vector<std::string>& dirs);
105 bool addSambaDir(const std::string& dir);
106 bool removeSambaDir(const std::string& dir);
107 bool isSambaEnabled();
108 void setSambaEnabled(bool enabled);
109 void scanAllSambaDirs();
110 void resetSambaStop();
112
113 std::atomic<bool> samba_stop_requested { false };
114
115 static void smb_auth_fn(SMBCCTX* context,
116 const char* srv, const char* shr,
117 char* wg, int wglen,
118 char* un, int unlen,
119 char* pw, int pwlen);
120
121 static bool isValidSMB(const std::string& url);
122
123 std::map<std::string, std::pair<std::string,std::string>> smb_credentials;
124
125 void saveSMBCredentials(const std::string& url,
126 const std::string& user,
127 const std::string& pass);
128
129 std::pair<std::string,std::string> getCreds(const std::string& url);
130
131 SMBCCTX* createThreadSmbContext();
132
133 // Raccolta ricorsiva file SMB
134 void smb_collect_files(SMBCCTX* ctx,
135 const std::string& url,
136 std::vector<std::string>& out);
137
138
139 void smb_collect_files_impl(SMBCCTX* ctx,
140 const std::string& url,
141 std::vector<std::string>& out);
142
143 bool smb_read_file_with_ctx(SMBCCTX* ctx,
144 const std::string& smbPath,
145 std::function<bool(const char*, size_t)>);
146
147 bool smb_copy_file(const std::string& smbPath,
148 const std::filesystem::path& dest);
149
150 std::function<void(const std::string&, float)> samba_progress_callback = nullptr;
151
152
154 {
155 bool scan_active = false;
156 float progress = 0.0f;
157 std::string current_scanning;
158 std::string temp_dir;
159 std::vector<std::string> files;
160 size_t infected = 0;
161 };
162
164
166 bool scan_active = false;
167 std::string current_file;
168 std::vector<std::string> log;
169 size_t infected = 0;
170 };
171
173
175
176 static std::string resolveSambaDir(const std::string& path);
177
178
179
181 const std::vector<std::string>& blacklistLines
182 );
185
186 void setFirewallEnabled(bool enabled);
187 bool isFirewallEnabled() const;
188
189 void loadFirewallConfig();
190 void saveFirewallConfig() const;
192 void scheduleFirewallApply(const std::string& inputPath);
193private:
194 Backend();
195 Backend(const Backend&) = delete;
196 Backend& operator=(const Backend&) = delete;
197
199 sigc::signal<void(const std::string&)> antiransom_signal_;
200 std::function<void(int, int, const std::string&)> progressCallback_;
201 std::mutex smb_mutex;
202 std::unique_ptr<WebProbe> webprobe_;
203 std::vector<std::string> whitelist_;
204
205 bool googleSafeEnabled_ = false;
206 std::string googleSafeApiKey_;
207 bool firewallEnabled_ = false;
209 SMBCCTX* smb_context = nullptr;
210 void initSambaClient();
211 std::string getSambaCredsPath() const;
212 void loadSMBCredentials();
215};
static void ensureQuarantinePath()
Definition Backend.cpp:399
FirewallType
std::function< void(const std::string &, float)> samba_progress_callback
Definition Backend.hpp:150
static std::string resolveSambaDir(const std::string &path)
Definition Backend.cpp:2065
AntiRansomEngine antiransom_
Definition Backend.hpp:198
bool isFirewallEnabled() const
Definition Backend.cpp:3131
std::vector< std::string > whitelist_
Definition Backend.hpp:203
SMBCCTX * smb_context
Definition Backend.hpp:209
void setGoogleSafeEnabled(bool enabled)
Definition Backend.hpp:86
bool isSambaScanRunning()
Definition Backend.cpp:241
void initSambaClient()
Definition Backend.cpp:2273
bool isBankDomain(const std::string &host) const
Definition Backend.cpp:2962
bool removeSambaDir(const std::string &dir)
Definition Backend.cpp:2577
static std::vector< std::string > getOnAccessEvents()
Definition Backend.cpp:620
bool testGoogleSafeKey()
Definition Backend.cpp:1680
static std::vector< std::string > getOnAccessPaths()
Definition Backend.cpp:603
bool updatePhishLists()
Definition Backend.cpp:1086
void scanAllSambaDirs()
Definition Backend.cpp:2773
static std::vector< std::string > getClamonaccLogs()
Definition Backend.cpp:505
std::string samba_last_temp_dir
Definition Backend.hpp:213
bool smb_copy_file(const std::string &smbPath, const std::filesystem::path &dest)
Definition Backend.cpp:2200
void stop_antiphish()
Definition Backend.cpp:1530
void addToWhitelist(const std::string &domain)
Definition Backend.cpp:2913
void loadSMBCredentials()
Definition Backend.cpp:1993
void requestStopSambaScan()
Definition Backend.cpp:2572
bool enablePhishAutoUpdate(bool enable)
Definition Backend.cpp:1732
std::atomic< bool > samba_stop_requested
Definition Backend.hpp:113
static bool isAntiransomActive()
Definition Backend.cpp:1613
static int getAppBuild()
Definition Backend.cpp:78
void stop_antiransom()
Definition Backend.cpp:847
void scheduleFirewallApply(const std::string &inputPath)
Definition Backend.cpp:3207
void start_antiransom()
Definition Backend.cpp:837
std::string getSambaCredsPath() const
Definition Backend.cpp:248
static std::string getAppVersion()
Definition Backend.cpp:70
void saveSambaConfig(bool enabled, const std::vector< std::string > &dirs)
Definition Backend.cpp:2608
void setFirewallEnabled(bool enabled)
Definition Backend.cpp:3126
float samba_last_progress
Definition Backend.hpp:214
sigc::signal< void(const std::string &)> antiransom_signal_
Definition Backend.hpp:199
void setSambaEnabled(bool enabled)
Definition Backend.cpp:272
static std::string getQuarantinePath()
Definition Backend.cpp:496
std::string checkUrl(const std::string &url)
Definition Backend.cpp:1629
static void smb_auth_fn(SMBCCTX *context, const char *srv, const char *shr, char *wg, int wglen, char *un, int unlen, char *pw, int pwlen)
Definition Backend.cpp:1891
void smb_collect_files(SMBCCTX *ctx, const std::string &url, std::vector< std::string > &out)
Definition Backend.cpp:2076
static void setQuarantinePath(const std::string &path)
Definition Backend.cpp:490
std::function< void(int, int, const std::string &)> progressCallback_
Definition Backend.hpp:200
bool updateYaraRules(std::function< void(int, int, const std::string &)> progressCallback=nullptr)
Definition Backend.cpp:857
static Backend & instance()
Definition Backend.cpp:830
bool addSambaDir(const std::string &dir)
int getPhishingPort() const
Definition Backend.cpp:2981
bool isSambaEnabled()
Definition Backend.cpp:260
bool updateBankListFromURL(const std::string &source_url)
Definition Backend.cpp:2805
void loadFirewallConfig()
Definition Backend.cpp:3135
std::unique_ptr< WebProbe > webprobe_
Definition Backend.hpp:202
void setupAlertListener()
Definition Backend.cpp:2620
static bool isValidSMB(const std::string &url)
Definition Backend.cpp:1919
sigc::signal< void(const std::string &)> & signal_antiphish_event()
Definition Backend.cpp:1641
void removeFromWhitelist(const std::string &domain)
Definition Backend.cpp:2922
std::string googleSafeApiKey_
Definition Backend.hpp:206
void setPhishingPort(int port)
Definition Backend.cpp:2977
void resetSambaStop()
Definition Backend.cpp:2568
std::pair< std::string, std::string > getCreds(const std::string &url)
Definition Backend.cpp:2028
std::mutex smb_mutex
Definition Backend.hpp:201
ScanStatus get_current_scan_files()
Definition Backend.cpp:2985
void sendRansomwareAlert(const std::string &path, const std::string &family)
Definition Backend.cpp:2658
Backend & operator=(const Backend &)=delete
void loadWhitelist()
Definition Backend.cpp:2943
SMBCCTX * createThreadSmbContext()
Definition Backend.cpp:1871
bool firewallEnabled_
Definition Backend.hpp:207
void applyFirewallFromBlacklist(const std::vector< std::string > &blacklistLines)
Definition Backend.cpp:3092
static std::string getClamonaccStatus()
Definition Backend.cpp:484
static std::string getLastUpdateDate()
Definition Backend.cpp:522
FirewallType getFirewallType() const
Definition Backend.cpp:3122
std::function< void(const std::string &)> onBankListReload
Definition Backend.hpp:80
bool isGoogleSafeEnabled() const
Definition Backend.hpp:85
SambaScanState get_current_scan_files() const
Definition Backend.hpp:174
void moveToQuarantine(const std::string &)
Definition Backend.cpp:2722
bool updateSanesecurityDB(std::function< void(int, int, const std::string &)> progressCallback=nullptr)
Definition Backend.cpp:1542
void start_antiphish()
Definition Backend.cpp:1520
void mergeWhitelistSources()
Definition Backend.cpp:1039
std::vector< std::string > getSambaDirs()
Definition Backend.cpp:1764
std::string getSambaConfigPath() const
Definition Backend.cpp:1754
void setFirewallType(FirewallType fw)
Definition Backend.cpp:3112
void saveSMBCredentials(const std::string &url, const std::string &user, const std::string &pass)
Definition Backend.cpp:1930
static bool isClamonaccActive()
Definition Backend.cpp:467
bool isAntiphishActive()
Definition Backend.cpp:1618
std::map< std::string, std::pair< std::string, std::string > > smb_credentials
Definition Backend.hpp:123
bool reload_dnsmasq()
Definition Backend.cpp:2966
static bool disableClamonacc()
Definition Backend.cpp:461
void scanSambaDir(const std::string &dir)
Definition Backend.cpp:2280
void saveWhitelist() const
Definition Backend.cpp:2930
void saveFirewallConfig() const
Definition Backend.cpp:3155
Backend(const Backend &)=delete
std::string getGoogleSafeApiKey() const
Definition Backend.hpp:88
void setGoogleSafeApiKey(const std::string &key)
Definition Backend.hpp:87
FirewallType firewallType_
Definition Backend.hpp:208
sigc::signal< void(const std::string &)> & signal_antiransom_event()
Definition Backend.cpp:1623
bool isPhishAutoUpdateEnabled()
Definition Backend.cpp:1727
void applyFirewallFromPhishingBlacklist()
Definition Backend.cpp:3174
void saveGoogleSafeConfig()
Definition Backend.cpp:1648
bool smb_read_file_with_ctx(SMBCCTX *ctx, const std::string &smbPath, std::function< bool(const char *, size_t)>)
Definition Backend.cpp:2153
SambaScanState samba_scan_state
Definition Backend.hpp:172
void smb_collect_files_impl(SMBCCTX *ctx, const std::string &url, std::vector< std::string > &out)
Definition Backend.cpp:2091
std::vector< std::string > getWhitelist() const
Definition Backend.cpp:2909
static bool enableClamonacc()
Definition Backend.cpp:455
bool googleSafeEnabled_
Definition Backend.hpp:205
static bool installClamdIfMissing()
Definition Backend.cpp:664
static std::string getDbVersion()
Definition Backend.cpp:556
std::string current_file
Definition Backend.hpp:167
std::vector< std::string > log
Definition Backend.hpp:168
std::vector< std::string > files
Definition Backend.hpp:159
std::string temp_dir
Definition Backend.hpp:158
std::string current_scanning
Definition Backend.hpp:157