Skip to content
API Documentation
BastionGuard™
PhishingCheckCard Class Reference

#include <PhishingCheckCard.hpp>

Inheritance diagram for PhishingCheckCard:

Public Member Functions

 PhishingCheckCard ()
virtual ~PhishingCheckCard ()=default
sigc::signal< void(const Glib::ustring &)> & signal_analyze_requested ()
void set_title (const Glib::ustring &text)
void set_description (const Glib::ustring &text)
void set_placeholder (const Glib::ustring &text)
void set_button_label (const Glib::ustring &text)
void set_feedback (const Glib::ustring &text, bool is_error=false)
void clear_feedback ()
Glib::ustring get_url () const
void set_url (const Glib::ustring &url)

Private Member Functions

void on_analyze_clicked ()
bool is_valid_url (const Glib::ustring &url) const

Private Attributes

Gtk::Box root_box_ {Gtk::Orientation::HORIZONTAL, 16}
Gtk::Box icon_box_ {Gtk::Orientation::VERTICAL, 0}
Gtk::Box content_box_ {Gtk::Orientation::VERTICAL, 8}
Gtk::Box action_row_ {Gtk::Orientation::HORIZONTAL, 12}
Gtk::Image icon_
Gtk::Label lbl_title_
Gtk::Label lbl_description_
Gtk::Entry entry_url_
Gtk::Button btn_analyze_
Gtk::Label lbl_feedback_
sigc::signal< void(const Glib::ustring &)> signal_analyze_requested_

Detailed Description

Definition at line 26 of file PhishingCheckCard.hpp.

Constructor & Destructor Documentation

◆ PhishingCheckCard()

PhishingCheckCard::PhishingCheckCard ( )

Definition at line 26 of file PhishingCheckCard.cpp.

27 : Gtk::Box(Gtk::Orientation::VERTICAL, 8),
28 btn_analyze_(_("Analyze"))
29{
30 add_css_class("phishing-card");
31 set_margin_top(16);
32 set_margin_bottom(16);
33 set_margin_start(16);
34 set_margin_end(16);
35 set_hexpand(true);
36
37 root_box_.set_hexpand(true);
38 root_box_.set_valign(Gtk::Align::CENTER);
39
40 icon_box_.set_valign(Gtk::Align::START);
41 icon_box_.add_css_class("phishing-card-icon-wrap");
42
43 try {
44 icon_.set_from_icon_name("system-search-symbolic");
45 } catch (...) {
46 }
47
48 icon_.set_pixel_size(28);
49 icon_.add_css_class("phishing-card-icon");
50 icon_box_.append(icon_);
51
52 lbl_title_.set_markup("<b>Check a domain phishing</b>");
53 lbl_title_.set_halign(Gtk::Align::START);
54 lbl_title_.set_xalign(0.0f);
55 lbl_title_.add_css_class("phishing-card-title");
56
57 lbl_description_.set_text(
58 _("When a destination is not present in our blocklists, "
59 "BastionGuard applies heuristic page analysis to detect phishing "
60 "patterns, redirect chains, credential-harvesting forms, "
61 "obfuscated scripts, and brand impersonation signals."));
62 lbl_description_.set_wrap(true);
63 lbl_description_.set_wrap_mode(Pango::WrapMode::WORD_CHAR);
64 lbl_description_.set_halign(Gtk::Align::START);
65 lbl_description_.set_xalign(0.0f);
66 lbl_description_.add_css_class("phishing-card-description");
67
68 entry_url_.set_hexpand(true);
69 entry_url_.set_placeholder_text("https://example.com/login");
70 entry_url_.add_css_class("phishing-card-entry");
71 entry_url_.signal_activate().connect(
72 sigc::mem_fun(*this, &PhishingCheckCard::on_analyze_clicked));
73
74 btn_analyze_.add_css_class("suggested-action");
75 btn_analyze_.add_css_class("phishing-card-button");
76 btn_analyze_.signal_clicked().connect(
77 sigc::mem_fun(*this, &PhishingCheckCard::on_analyze_clicked));
78
79 action_row_.set_hexpand(true);
80 action_row_.append(entry_url_);
82
83 lbl_feedback_.set_halign(Gtk::Align::START);
84 lbl_feedback_.set_xalign(0.0f);
85 lbl_feedback_.set_visible(false);
86 lbl_feedback_.add_css_class("phishing-card-feedback");
87
88 content_box_.set_hexpand(true);
93
94 root_box_.append(icon_box_);
95 root_box_.append(content_box_);
96
97 append(root_box_);
98}
#define _(s)

References _, action_row_, btn_analyze_, content_box_, entry_url_, icon_, icon_box_, lbl_description_, lbl_feedback_, lbl_title_, on_analyze_clicked(), and root_box_.

◆ ~PhishingCheckCard()

Member Function Documentation

◆ clear_feedback()

void PhishingCheckCard::clear_feedback ( )

Definition at line 131 of file PhishingCheckCard.cpp.

131 {
132 lbl_feedback_.set_text({});
133 lbl_feedback_.remove_css_class("error");
134 lbl_feedback_.set_visible(false);
135}

References lbl_feedback_.

Referenced by ~PhishingCheckCard().

◆ get_url()

Glib::ustring PhishingCheckCard::get_url ( ) const

Definition at line 137 of file PhishingCheckCard.cpp.

137 {
138 return entry_url_.get_text();
139}

References entry_url_.

Referenced by ~PhishingCheckCard().

◆ is_valid_url()

bool PhishingCheckCard::is_valid_url ( const Glib::ustring & url) const
private

Definition at line 145 of file PhishingCheckCard.cpp.

145 {
146 static const std::regex re(
147 R"(^(https?:\/\/)?(([A-Za-z0-9-]+\.)+[A-Za-z]{2,}|localhost)(:\d+)?(\/[^\s]*)?$)",
148 std::regex::icase);
149 return std::regex_match(url.raw(), re);
150}

Referenced by on_analyze_clicked(), and ~PhishingCheckCard().

◆ on_analyze_clicked()

void PhishingCheckCard::on_analyze_clicked ( )
private

Definition at line 152 of file PhishingCheckCard.cpp.

152 {
153 const auto url = entry_url_.get_text();
154
155 if (url.empty()) {
156 set_feedback(_("Insert a URL or domain to analyze."), true);
157 return;
158 }
159
160 if (!is_valid_url(url)) {
161 set_feedback(_("The URL/domain format is not valid."), true);
162 return;
163 }
164
165 set_feedback(_("Analysis started..."), false);
167}
sigc::signal< void(const Glib::ustring &)> signal_analyze_requested_
bool is_valid_url(const Glib::ustring &url) const
void set_feedback(const Glib::ustring &text, bool is_error=false)

References _, entry_url_, is_valid_url(), set_feedback(), and signal_analyze_requested_.

Referenced by PhishingCheckCard(), and ~PhishingCheckCard().

◆ set_button_label()

void PhishingCheckCard::set_button_label ( const Glib::ustring & text)

Definition at line 116 of file PhishingCheckCard.cpp.

116 {
117 btn_analyze_.set_label(text);
118}

References btn_analyze_.

Referenced by ~PhishingCheckCard().

◆ set_description()

void PhishingCheckCard::set_description ( const Glib::ustring & text)

Definition at line 108 of file PhishingCheckCard.cpp.

108 {
109 lbl_description_.set_text(text);
110}

References lbl_description_.

Referenced by ~PhishingCheckCard().

◆ set_feedback()

void PhishingCheckCard::set_feedback ( const Glib::ustring & text,
bool is_error = false )

Definition at line 120 of file PhishingCheckCard.cpp.

120 {
121 lbl_feedback_.set_text(text);
122
123 if (is_error)
124 lbl_feedback_.add_css_class("error");
125 else
126 lbl_feedback_.remove_css_class("error");
127
128 lbl_feedback_.set_visible(!text.empty());
129}

References lbl_feedback_.

Referenced by on_analyze_clicked(), PhishingPage::on_analyze_requested(), and ~PhishingCheckCard().

◆ set_placeholder()

void PhishingCheckCard::set_placeholder ( const Glib::ustring & text)

Definition at line 112 of file PhishingCheckCard.cpp.

112 {
113 entry_url_.set_placeholder_text(text);
114}

References entry_url_.

Referenced by ~PhishingCheckCard().

◆ set_title()

void PhishingCheckCard::set_title ( const Glib::ustring & text)

Definition at line 104 of file PhishingCheckCard.cpp.

104 {
105 lbl_title_.set_markup("<b>" + Glib::Markup::escape_text(text) + "</b>");
106}

References lbl_title_.

Referenced by ~PhishingCheckCard().

◆ set_url()

void PhishingCheckCard::set_url ( const Glib::ustring & url)

Definition at line 141 of file PhishingCheckCard.cpp.

141 {
142 entry_url_.set_text(url);
143}

References entry_url_.

Referenced by ~PhishingCheckCard().

◆ signal_analyze_requested()

sigc::signal< void(const Glib::ustring &)> & PhishingCheckCard::signal_analyze_requested ( )

Definition at line 100 of file PhishingCheckCard.cpp.

100 {
102}

References signal_analyze_requested_.

Referenced by PhishingPage::PhishingPage(), and ~PhishingCheckCard().

Member Data Documentation

◆ action_row_

Gtk::Box PhishingCheckCard::action_row_ {Gtk::Orientation::HORIZONTAL, 12}
private

Definition at line 50 of file PhishingCheckCard.hpp.

Referenced by PhishingCheckCard().

◆ btn_analyze_

Gtk::Button PhishingCheckCard::btn_analyze_
private

Definition at line 56 of file PhishingCheckCard.hpp.

Referenced by PhishingCheckCard(), and set_button_label().

◆ content_box_

Gtk::Box PhishingCheckCard::content_box_ {Gtk::Orientation::VERTICAL, 8}
private

Definition at line 49 of file PhishingCheckCard.hpp.

Referenced by PhishingCheckCard().

◆ entry_url_

Gtk::Entry PhishingCheckCard::entry_url_
private

◆ icon_

Gtk::Image PhishingCheckCard::icon_
private

Definition at line 52 of file PhishingCheckCard.hpp.

Referenced by PhishingCheckCard().

◆ icon_box_

Gtk::Box PhishingCheckCard::icon_box_ {Gtk::Orientation::VERTICAL, 0}
private

Definition at line 48 of file PhishingCheckCard.hpp.

Referenced by PhishingCheckCard().

◆ lbl_description_

Gtk::Label PhishingCheckCard::lbl_description_
private

Definition at line 54 of file PhishingCheckCard.hpp.

Referenced by PhishingCheckCard(), and set_description().

◆ lbl_feedback_

Gtk::Label PhishingCheckCard::lbl_feedback_
private

Definition at line 57 of file PhishingCheckCard.hpp.

Referenced by clear_feedback(), PhishingCheckCard(), and set_feedback().

◆ lbl_title_

Gtk::Label PhishingCheckCard::lbl_title_
private

Definition at line 53 of file PhishingCheckCard.hpp.

Referenced by PhishingCheckCard(), and set_title().

◆ root_box_

Gtk::Box PhishingCheckCard::root_box_ {Gtk::Orientation::HORIZONTAL, 16}
private

Definition at line 47 of file PhishingCheckCard.hpp.

Referenced by PhishingCheckCard().

◆ signal_analyze_requested_

sigc::signal<void(const Glib::ustring&)> PhishingCheckCard::signal_analyze_requested_
private

Definition at line 59 of file PhishingCheckCard.hpp.

Referenced by on_analyze_clicked(), and signal_analyze_requested().


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