21 const std::string& appPath,
22 const std::vector<std::string>& appArgs,
23 const std::string& destHost,
24 const std::string& destIp,
31 set_title(
"BastionGuard — Connessione rilevata");
35 set_default_size(520, -1);
40 get_style_context()->add_class(
"bsc-alert-dialog");
43 buildUI(appComm, appPath, appArgs, destHost, destIp, destPort);
59 auto header = Gtk::make_managed<Gtk::HeaderBar>();
60 header->set_show_title_buttons(
false);
61 header->set_decoration_layout(
"");
62 header->get_style_context()->add_class(
"custom-headerbar");
65 auto titleLabel = Gtk::make_managed<Gtk::Label>();
66 titleLabel->set_markup(
"<b>" + Glib::ustring(
_(
"Connessione rilevata")) +
"</b>");
67 titleLabel->get_style_context()->add_class(
"headerbar-title");
68 header->set_title_widget(*titleLabel);
71 auto headerRight = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL, 4);
72 headerRight->get_style_context()->add_class(
"header-right");
74 auto closeBtn = Gtk::make_managed<Gtk::Button>();
75 closeBtn->get_style_context()->add_class(
"header-button");
77 auto pix = Gdk::Pixbuf::create_from_file(
resource(
"icon-close.png"), 32, 32,
true);
78 closeBtn->set_child(*Gtk::make_managed<Gtk::Image>(pix));
80 closeBtn->set_label(
"✕");
84 headerRight->append(*closeBtn);
86 header->pack_end(*headerRight);
87 set_titlebar(*header);
95 const std::string& appPath,
96 const std::vector<std::string>& appArgs,
97 const std::string& destHost,
98 const std::string& destIp,
101 m_vbox.set_margin_top(20);
102 m_vbox.set_margin_bottom(20);
103 m_vbox.set_margin_start(20);
104 m_vbox.set_margin_end(20);
107 auto topBox = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::HORIZONTAL, 12);
111 appComm, appPath, appArgs, destIp);
113 appComm, appPath, appArgs, destIp);
115 m_appIcon.set_from_icon_name(icon_name.empty()
116 ?
"application-x-executable"
122 auto nameBox = Gtk::make_managed<Gtk::Box>(Gtk::Orientation::VERTICAL, 4);
124 m_appName.set_markup(
"<b><big>" + Glib::Markup::escape_text(display_name) +
"</big></b>");
127 m_appName.get_style_context()->add_class(
"bsc-alert-app-name");
131 if (!appPath.empty()) {
132 m_appPath.set_markup(
"<small><span foreground='gray'>" +
133 Glib::Markup::escape_text(appPath) +
"</span></small>");
136 m_appPath.set_ellipsize(Pango::EllipsizeMode::MIDDLE);
140 topBox->append(*nameBox);
145 m_infoBox.get_style_context()->add_class(
"card");
146 m_infoBox.get_style_context()->add_class(
"bsc-alert-info");
149 const std::string host_text = destHost.empty()
150 ? (safe_local_connection
151 ? std::string{
_(
"Connessione locale sicura")}
152 : std::string{
_(
"(non risolto)")})
155 Glib::ustring(
_(
"🌐 <b>Sito:</b> ")) + Glib::Markup::escape_text(host_text));
162 Glib::ustring(
_(
"📍 <b>IP:</b> ")) + Glib::Markup::escape_text(destIp));
169 Glib::ustring(
_(
"🔌 <b>Porta:</b> ")) + Glib::Markup::escape_text(std::to_string(destPort)));
175 static_cast<std::uint16_t
>(destPort))) {
176 auto proxyHint = Gtk::make_managed<Gtk::Label>();
177 proxyHint->set_markup(
178 "<span foreground='#2e7d32'>" +
179 Glib::ustring(
_(
"🛡 Connessione verso il tuo proxy configurato")) +
181 proxyHint->set_halign(Gtk::Align::START);
182 proxyHint->set_wrap(
true);
186 if (safe_local_connection) {
187 auto localHint = Gtk::make_managed<Gtk::Label>();
188 localHint->set_markup(
189 "<span foreground='#2e7d32'>" +
190 Glib::ustring(
_(
"✅ Traffico locale/loopback del sistema: non è una connessione Internet esterna")) +
192 localHint->set_halign(Gtk::Align::START);
193 localHint->set_wrap(
true);
210 m_allowOnce.get_style_context()->add_class(
"suggested-action");
211 m_denyAlways.get_style_context()->add_class(
"destructive-action");
AlertDialog(const std::string &appComm, const std::string &appPath, const std::vector< std::string > &appArgs, const std::string &destHost, const std::string &destIp, uint32_t destPort, int timeoutSecs=15)
void buildUI(const std::string &appComm, const std::string &appPath, const std::vector< std::string > &appArgs, const std::string &destHost, const std::string &destIp, uint32_t destPort)
std::string best_connection_icon_name(const std::string &app_comm, const std::string &app_path, const std::vector< std::string > &app_args, const std::string &dst_ip, const std::string &src_ip)
std::string best_connection_display_name(const std::string &app_comm, const std::string &app_path, const std::vector< std::string > &app_args, const std::string &dst_ip, const std::string &src_ip)