1. Overview
The About module provides a structured information hub inside BastionGuard, exposing product identity details (name, version, build), licensing information, third-party components, and local database visibility (ClamAV signature sets).
The UI is implemented as a GTKmm (GTK4) page and is organized as a multi-tab interface using a Gtk::Notebook. It is primarily a read-only informational view, designed to support transparency, support requests, compliance/audit needs, and operational troubleshooting.
- Version/Build loader – reads version metadata from a packaged file
- Third-party inventory – provides an at-a-glance list of integrated technologies
- License viewer – loads the GPL license text from well-known locations
- Database viewer – enumerates local ClamAV databases under
/var/lib/clamav
2. User Interface Structure
2.1 Notebook Layout
The page is built around a Gtk::Notebook (notebook_) that hosts four tabs:
- Program – product identity, version/build, and copyright/legal text
- Third Parties – list of major libraries and subsystems used by BastionGuard
- License – full GPL license text rendered inside a scrollable text view
- Database – runtime inspection of signature databases installed on the system
2.2 Program Tab
The Program tab includes:
- Product icon rendered by a
Gtk::Picture, loaded viaresource("logo.png") - Product name and build string in a centered markup label (
Gtk::Label::set_use_markup(true)) - Dynamic copyright showing a computed year range (
2025–current year)
The version and build identifiers are displayed using a formatted markup string:
<b>BastionGuard™</b> <span size='medium'><i>{version} · build {build}</i></span>
2.3 Third Parties Tab
The Third Parties tab is a read-only informational label listing the major external components used by BastionGuard (e.g., GTK4/gtkmm-4, ClamAV engine, YARA, libsecret, Polkit, etc.).
The label is configured with set_wrap(true) to ensure readable multi-line content.
2.4 License Tab
The License tab displays the GPL license text in a scrollable container:
Gtk::ScrolledWindowconfigured for automatic policies and full expansionGtk::TextViewread-only, word-wrappedGtk::TextBufferpopulated byload_license_text()
This design guarantees that large license texts remain accessible without impacting layout.
2.5 Database Tab
The Database tab exposes a runtime view of ClamAV signature databases found under /var/lib/clamav. The UI mirrors the License tab structure:
Gtk::ScrolledWindow+Gtk::TextView(read-only)- Buffer content loaded via
load_database_info()
The database listing uses simple visual markers:
✔for common signature data files (.hdb,.ndb,.ldb,.cdb,.hsb,.fp)🔒for official ClamAV databases (.cld,.cvd)•for other secondary files (still listed for operational transparency)
3. Data Sources and Loading Logic
3.1 Version and Build Metadata
load_version_build() loads version metadata from a packaged file:
- Primary path:
/usr/share/BastionGuard/data/version.bs - Expected key/value format:
version=...build=...
The function applies basic whitespace trimming and uses defensive fallbacks:
- Default version:
?.? - Default build:
?
3.2 License Text Resolution
load_license_text() searches multiple candidate locations to remain compatible across: development builds, packaged installs, and distro conventions.
Candidate paths include:
data/license/COPYING(local build path)/usr/share/BastionGuard/data/license/COPYING(installed data path)COPYING/LICENSE(project root fallbacks)/usr/share/doc/BastionGuard/COPYING(distro package location)/usr/share/common-licenses/GPL-3(Debian/Ubuntu convention)
If none are found, a clear message is displayed to indicate missing packaging artifacts.
3.3 Database Inventory (ClamAV)
load_database_info() inspects /var/lib/clamav using a filesystem iterator. If the directory does not exist, the module reports that the directory is missing rather than failing.
The output begins with a header line indicating the expected location:
📁 Database ClamAV trovati in /var/lib/clamav
4. Runtime and Security Considerations
- Read-only behavior: all UI fields are informational; no modifications are performed from this page.
- Defensive file handling: the module checks file existence and stream availability before reading.
- Packaging resilience: multiple license file search paths reduce deployment friction across distributions.
- Operational transparency: database enumeration helps support and troubleshooting (e.g., verifying signature presence).
- Localization readiness: user-facing strings use gettext (
_()) and integrate with the project translation model.