About Module (AboutPage)

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 via resource("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::ScrolledWindow configured for automatic policies and full expansion
  • Gtk::TextView read-only, word-wrapped
  • Gtk::TextBuffer populated by load_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.