Skip to content
API Documentation
BastionGuard™
SimpleHandler Class Reference
Inheritance diagram for SimpleHandler:

Public Member Functions

CefRefPtr< CefLifeSpanHandler > GetLifeSpanHandler () override
CefRefPtr< CefDisplayHandler > GetDisplayHandler () override
CefRefPtr< CefRequestHandler > GetRequestHandler () override
void OnAfterCreated (CefRefPtr< CefBrowser > browser) override
void OnTitleChange (CefRefPtr< CefBrowser > browser, const CefString &) override
void OnBeforeClose (CefRefPtr< CefBrowser > browser) override
bool OnBeforeBrowse (CefRefPtr< CefBrowser > browser, CefRefPtr< CefFrame > frame, CefRefPtr< CefRequest > request, bool, bool) override
bool OnCertificateError (CefRefPtr< CefBrowser > browser, cef_errorcode_t cert_error, const CefString &request_url, CefRefPtr< CefSSLInfo >, CefRefPtr< CefCallback > callback) override

Private Member Functions

void inject_watermark (CefRefPtr< CefBrowser > browser)
 IMPLEMENT_REFCOUNTING (SimpleHandler)

Static Private Member Functions

static void load_block_page_inline (CefRefPtr< CefBrowser > browser, const std::string &host)

Private Attributes

std::vector< CefRefPtr< CefBrowser > > browsers_

Detailed Description

Definition at line 264 of file SecureBrowser.cpp.

Member Function Documentation

◆ GetDisplayHandler()

CefRefPtr< CefDisplayHandler > SimpleHandler::GetDisplayHandler ( )
inlineoverride

Definition at line 270 of file SecureBrowser.cpp.

270{ return this; }

◆ GetLifeSpanHandler()

CefRefPtr< CefLifeSpanHandler > SimpleHandler::GetLifeSpanHandler ( )
inlineoverride

Definition at line 269 of file SecureBrowser.cpp.

269{ return this; }

◆ GetRequestHandler()

CefRefPtr< CefRequestHandler > SimpleHandler::GetRequestHandler ( )
inlineoverride

Definition at line 271 of file SecureBrowser.cpp.

271{ return this; }

◆ IMPLEMENT_REFCOUNTING()

SimpleHandler::IMPLEMENT_REFCOUNTING ( SimpleHandler )
private

◆ inject_watermark()

void SimpleHandler::inject_watermark ( CefRefPtr< CefBrowser > browser)
inlineprivate

Definition at line 416 of file SecureBrowser.cpp.

416 {
417 static const char kJS[] = R"JS(
418 (function(){
419 if (document.getElementById('BastionGuard_wm')) return;
420 const wm = document.createElement('div');
421 wm.id = 'BastionGuard_wm';
422 wm.textContent = '🟢 BastionGuard Secure Browser';

Referenced by OnTitleChange().

◆ load_block_page_inline()

void SimpleHandler::load_block_page_inline ( CefRefPtr< CefBrowser > browser,
const std::string & host )
inlinestaticprivate

Definition at line 365 of file SecureBrowser.cpp.

366 {
367 std::string safe_host;
368 for (char c : host) {
369 if (c == '<') safe_host += "&lt;";
370 else if (c == '>') safe_host += "&gt;";
371 else if (c == '&') safe_host += "&amp;";
372 else if (c == '"') safe_host += "&quot;";
373 else safe_host += c;
374 }
375
376 const std::string html =
377 "<!DOCTYPE html><html><head><meta charset='UTF-8'>"
378 "<style>"
379 "body{margin:0;height:100vh;display:flex;align-items:center;"
380 "justify-content:center;background:#1a1a2e;font-family:system-ui,sans-serif;}"
381 ".card{background:#16213e;border:1px solid #0f3460;border-radius:12px;"
382 "padding:40px 36px;max-width:460px;text-align:center;color:#e0e0e0;}"
383 "h1{color:#e94560;font-size:1.3rem;margin:0 0 16px;}"
384 "p{color:#a0a0b0;font-size:.9rem;line-height:1.6;margin:0 0 24px;}"
385 ".domain{font-family:monospace;color:#4fc3f7;background:#0d1b2a;"
386 "padding:4px 10px;border-radius:4px;}"
387 "button{background:#0f3460;color:#fff;border:none;border-radius:8px;"
388 "padding:10px 24px;font-size:.9rem;cursor:pointer;}"
389 "button:hover{background:#1a4a80;}"
390 "</style></head><body>"
391 "<div class='card'>"
392 "<h1>🛡️ BastionGuard — Navigazione bloccata</h1>"
393 "<p>Il dominio <span class='domain'>" + safe_host + "</span> "
394 "non è accessibile dalla sessione sicura.<br><br>"
395 "Chiudi questa finestra e aprilo nel tuo browser normale.</p>"
396 "<button onclick='window.close()'>Chiudi</button>"
397 "</div></body></html>";
398
399 std::string encoded;
400 for (unsigned char c : html) {
401 if (std::isalnum(c) || c == '-' || c == '_' || c == '.' ||
402 c == '!' || c == '~' || c == '*' || c == '\'' ||
403 c == '(' || c == ')') {
404 encoded += static_cast<char>(c);
405 } else {
406 char buf[4];
407 std::snprintf(buf, sizeof(buf), "%%%02X", c);
408 encoded += buf;
409 }
410 }
411
412 if (browser && browser->GetMainFrame())
413 browser->GetMainFrame()->LoadURL("data:text/html," + encoded);
414 }

Referenced by OnBeforeBrowse(), and OnCertificateError().

◆ OnAfterCreated()

void SimpleHandler::OnAfterCreated ( CefRefPtr< CefBrowser > browser)
inlineoverride

Definition at line 273 of file SecureBrowser.cpp.

273 {
274 CEF_REQUIRE_UI_THREAD();
275 browsers_.push_back(browser);
276 std::cout << _("[SecureBrowser] 🌐 Browser creato.\n");
277 }
#define _(s)
std::vector< CefRefPtr< CefBrowser > > browsers_

References _, and browsers_.

◆ OnBeforeBrowse()

bool SimpleHandler::OnBeforeBrowse ( CefRefPtr< CefBrowser > browser,
CefRefPtr< CefFrame > frame,
CefRefPtr< CefRequest > request,
bool ,
bool  )
inlineoverride

Definition at line 301 of file SecureBrowser.cpp.

305 {
306 CEF_REQUIRE_UI_THREAD();
307
308 const std::string url = request->GetURL();
309 const std::string host = host_from_url(url);
310
311 std::cout << _("[SecureBrowser] 🌍 URL richiesto: ") << url << "\n";
312 std::cout << _("[SecureBrowser] 🧩 Host estratto: ") << host << "\n";
313
314 if (host == "127.0.0.2" || host == "127.0.0.1" || host == "localhost") {
315 std::cout << _("[SecureBrowser] ✅ Dominio locale consentito.\n");
316 return false;
317 }
318
319 const bool is_main_frame = frame && frame->IsMain();
320
321 const bool bank_ok = is_trusted_domain(host);
322 const bool pay_ok = is_payment_domain(host);
323 const bool https_url = url.rfind("https://", 0) == 0;
324
325 // A previously authorized page never grants permission to
326 // navigate the main frame to a different, untrusted origin.
327 if (is_main_frame) {
328 if (https_url && (bank_ok || pay_ok)) {
329 std::cout << _("[SecureBrowser] 🟢 Navigazione attendibile: ") << host << "\n";
330 return false;
331 }
332 } else if (https_url) {
333 // Third-party HTTPS subframes are needed by some bank
334 // sign-in/payment flows; main-frame trust is independent.
335 return false;
336 }
337
338 std::cout << _("[SecureBrowser] 🚫 Navigazione bloccata verso dominio non trusted: ") << host << "\n";
339 load_block_page_inline(browser, host);
340 return true;
341 }
static bool is_trusted_domain(const std::string &host)
static std::string host_from_url(const std::string &url)
static bool is_payment_domain(const std::string &host)
static void load_block_page_inline(CefRefPtr< CefBrowser > browser, const std::string &host)

References _, host_from_url(), is_payment_domain(), is_trusted_domain(), and load_block_page_inline().

◆ OnBeforeClose()

void SimpleHandler::OnBeforeClose ( CefRefPtr< CefBrowser > browser)
inlineoverride

Definition at line 284 of file SecureBrowser.cpp.

284 {
285 CEF_REQUIRE_UI_THREAD();
286 browsers_.erase(
287 std::remove_if(
288 browsers_.begin(),
289 browsers_.end(),
290 [&](auto& b){ return b->IsSame(browser); }
291 ),
292 browsers_.end()
293 );
294
295 if (browsers_.empty()) {
296 std::cout << _("[SecureBrowser] 🔒 Tutte le finestre chiuse — uscita loop.\n");
297 CefQuitMessageLoop();
298 }
299 }

References _, and browsers_.

◆ OnCertificateError()

bool SimpleHandler::OnCertificateError ( CefRefPtr< CefBrowser > browser,
cef_errorcode_t cert_error,
const CefString & request_url,
CefRefPtr< CefSSLInfo > ,
CefRefPtr< CefCallback > callback )
inlineoverride

Definition at line 343 of file SecureBrowser.cpp.

347 {
348 CEF_REQUIRE_UI_THREAD();
349
350 const std::string url = request_url;
351 const std::string host = host_from_url(url);
352
353 std::cout << _("[SecureBrowser] ⛔ Cert error (") << cert_error
354 << _(") per dominio: ") << host << "\n";
355
356 // A trusted-domain allowlist must never override TLS
357 // certificate validation. Fail closed for every host.
358 if (browser && browser->GetMainFrame())
359 load_block_page_inline(browser, host);
360 if (callback) callback->Cancel();
361 return true;
362 }

References _, host_from_url(), and load_block_page_inline().

◆ OnTitleChange()

void SimpleHandler::OnTitleChange ( CefRefPtr< CefBrowser > browser,
const CefString &  )
inlineoverride

Definition at line 279 of file SecureBrowser.cpp.

279 {
280 CEF_REQUIRE_UI_THREAD();
281 inject_watermark(browser);
282 }
void inject_watermark(CefRefPtr< CefBrowser > browser)

References inject_watermark().

Member Data Documentation

◆ browsers_

std::vector<CefRefPtr<CefBrowser> > SimpleHandler::browsers_
private

Definition at line 424 of file SecureBrowser.cpp.

Referenced by OnAfterCreated(), and OnBeforeClose().


The documentation for this class was generated from the following file: