32: Gtk::Box(Gtk::Orientation::VERTICAL, 12),
35 add_css_class(
"content");
37 auto title_box = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL);
38 title_box->add_css_class(
"secure-headerbar");
39 title_box->set_margin_bottom(12);
41 auto spacer_left = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL);
42 spacer_left->set_hexpand(
true);
44 auto title_label = Gtk::make_managed<Gtk::Label>(
_(
"🛡️ Controllo violazioni identità"));
45 title_label->set_margin(8);
46 title_label->set_halign(Gtk::Align::CENTER);
47 title_label->add_css_class(
"secure-header-title");
49 auto spacer_right = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL);
50 spacer_right->set_hexpand(
true);
52 title_box->append(*spacer_left);
53 title_box->append(*title_label);
54 title_box->append(*spacer_right);
58 auto emailBox = Gtk::make_managed<Gtk::Box>(
59 Gtk::Orientation::HORIZONTAL, 6);
61 emailEntry.set_placeholder_text(
_(
"Inserisci email da monitorare"));
64 auto privacyBtn = Gtk::make_managed<Gtk::Button>(
_(
"ℹ️ Privacy"));
65 privacyBtn->add_css_class(
"btn-secondary");
67 privacyBtn->signal_clicked().connect(
72 emailBox->append(*privacyBtn);
76 auto hibpBox = Gtk::make_managed<Gtk::Box>(
77 Gtk::Orientation::HORIZONTAL, 6);
101 auto leakCheckBox = Gtk::make_managed<Gtk::Box>(
102 Gtk::Orientation::HORIZONTAL, 6);
113 auto leakCheckInfoBtn =
114 Gtk::make_managed<Gtk::Button>(
_(
"⚠️ Info"));
115 leakCheckInfoBtn->add_css_class(
"btn-secondary");
117 leakCheckInfoBtn->signal_clicked().connect(
132 leakCheckBox->append(*leakCheckInfoBtn);
133 append(*leakCheckBox);
135 auto pwdBox = Gtk::make_managed<Gtk::Box>(
136 Gtk::Orientation::HORIZONTAL, 6);
138 passwordEntry.set_placeholder_text(
_(
"Verifica password compromessa"));
167 .connect(sigc::mem_fun(*
this,
174 logView.add_css_class(
"log-card");
178 Gtk::PolicyType::AUTOMATIC,
179 Gtk::PolicyType::AUTOMATIC);
394 auto *dialog =
new Gtk::Window();
395 dialog->set_title(
"");
396 dialog->set_default_size(520, 260);
397 dialog->set_resizable(
false);
398 dialog->set_modal(
false);
399 dialog->add_css_class(
"app-dialog");
400 dialog->add_css_class(
"main-window");
401 dialog->add_css_class(
"app-window");
403 auto *header = Gtk::make_managed<Gtk::HeaderBar>();
404 header->set_show_title_buttons(
false);
405 header->set_decoration_layout(
"");
406 header->add_css_class(
"custom-headerbar");
408 auto *close_box = Gtk::make_managed<Gtk::Box>(
409 Gtk::Orientation::HORIZONTAL);
410 close_box->set_margin_end(6);
413 auto icon = Gdk::Pixbuf::create_from_file(
414 resource(
"icon-close.png"), 28, 28,
true);
415 auto *btn = Gtk::make_managed<Gtk::Button>();
417 *Gtk::make_managed<Gtk::Image>(icon));
418 btn->add_css_class(
"header-button");
419 btn->signal_clicked().connect(
420 [dialog]() { dialog->close();
delete dialog; });
421 close_box->append(*btn);
424 header->pack_end(*close_box);
427 Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL);
428 header_wrap->append(*header);
429 dialog->set_titlebar(*header_wrap);
431 auto *vbox = Gtk::make_managed<Gtk::Box>(
432 Gtk::Orientation::VERTICAL, 14);
433 vbox->set_margin(24);
435 auto title = Gtk::make_managed<Gtk::Label>(
436 _(
"🔐 Tutela della privacy"));
437 title->add_css_class(
"title");
438 title->set_halign(Gtk::Align::CENTER);
440 auto msg = Gtk::make_managed<Gtk::Label>(
_(
441 "Nessun dato personale viene inviato o memorizzato "
442 "da BastionGuard.\n\n"
443 "• Le email vengono verificate tramite API ufficiali\n"
444 "• Le password NON vengono mai trasmesse\n"
445 "• Il controllo password usa solo hash parziali (HIBP Range)\n"
446 "• Nessuna informazione viene salvata su server esterni\n\n"
447 "Il controllo avviene nel rispetto totale della privacy."));
449 msg->set_justify(Gtk::Justification::CENTER);
450 msg->set_halign(Gtk::Align::CENTER);
452 auto closeBtn = Gtk::make_managed<Gtk::Button>(
_(
"Ho capito"));
453 closeBtn->add_css_class(
"btn-success");
454 closeBtn->set_halign(Gtk::Align::CENTER);
455 closeBtn->signal_clicked().connect(
456 [dialog]() { dialog->close();
delete dialog; });
458 vbox->append(*title);
460 vbox->append(*closeBtn);
462 dialog->set_child(*vbox);
468 auto *dialog =
new Gtk::Window();
469 dialog->set_title(
"");
470 dialog->set_default_size(540, 280);
471 dialog->set_resizable(
false);
472 dialog->set_modal(
false);
473 dialog->add_css_class(
"app-dialog");
474 dialog->add_css_class(
"main-window");
475 dialog->add_css_class(
"app-window");
477 auto *header = Gtk::make_managed<Gtk::HeaderBar>();
478 header->set_show_title_buttons(
false);
479 header->set_decoration_layout(
"");
480 header->add_css_class(
"custom-headerbar");
482 auto *close_box = Gtk::make_managed<Gtk::Box>(
483 Gtk::Orientation::HORIZONTAL);
484 close_box->set_margin_end(6);
487 auto icon = Gdk::Pixbuf::create_from_file(
488 resource(
"icon-close.png"), 28, 28,
true);
489 auto *btn = Gtk::make_managed<Gtk::Button>();
491 *Gtk::make_managed<Gtk::Image>(icon));
492 btn->add_css_class(
"header-button");
493 btn->signal_clicked().connect(
494 [dialog]() { dialog->close();
delete dialog; });
495 close_box->append(*btn);
498 header->pack_end(*close_box);
501 Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL);
502 wrap->append(*header);
503 dialog->set_titlebar(*wrap);
505 auto *vbox = Gtk::make_managed<Gtk::Box>(
506 Gtk::Orientation::VERTICAL, 14);
507 vbox->set_margin(24);
509 auto title = Gtk::make_managed<Gtk::Label>(
510 _(
"⚠️ Avviso su LeakCheck"));
511 title->add_css_class(
"title");
512 title->set_halign(Gtk::Align::CENTER);
514 auto msg = Gtk::make_managed<Gtk::Label>(
_(
515 "Le API utilizzate da BastionGuard per LeakCheck "
516 "NON sono le stesse impiegate dal sito web ufficiale.\n\n"
517 "• BastionGuard non è affiliato a LeakCheck\n"
518 "• Non esiste alcuna partnership o approvazione implicita\n"
519 "• I risultati possono differire da quelli mostrati sul sito\n\n"
520 "L’utente è responsabile dell’utilizzo delle API."));
522 msg->set_justify(Gtk::Justification::CENTER);
523 msg->set_halign(Gtk::Align::CENTER);
526 Gtk::make_managed<Gtk::Button>(
_(
"Ho capito"));
527 closeBtn->add_css_class(
"btn-success");
528 closeBtn->set_halign(Gtk::Align::CENTER);
529 closeBtn->signal_clicked().connect(
530 [dialog]() { dialog->close();
delete dialog; });
532 vbox->append(*title);
534 vbox->append(*closeBtn);
536 dialog->set_child(*vbox);
Gtk::CheckButton monitorToggle
~IdentityLeakPage() override
IdentityLeakPage(Gtk::Window &parent)
Gtk::Window & parentWindow
Gtk::Button leakCheckToggleButton
Glib::RefPtr< Gtk::TextBuffer > logBuffer
Gtk::Button apiToggleButton
void startMonitor(const std::string &email)
void onToggleLeakCheckApiVisibility()
Gtk::Button checkPasswordButton
Gtk::Entry leakCheckApiEntry
void onToggleApiVisibility()
void showLeakCheckDisclaimer()
void appendLog(const Glib::ustring &text)
std::atomic< bool > running
std::unique_ptr< LeakMonitor > monitor
void onCheckPasswordClicked()
Gtk::Button saveLeakCheckButton
std::atomic< bool > monitorActive
Gtk::Button saveHibpButton
void onSaveLeakCheckApi()
BastionGuard::AliveFlag alive_
Gtk::ScrolledWindow logScroller