Skip to content
API Documentation
BastionGuard™
RootGuardClient.hpp
Go to the documentation of this file.
1/*
2 * BastionGuard™ RootGuard GTK integration
3 * Copyright (C) 2025–2026 Calogero Scarnà
4 * SPDX-License-Identifier: GPL-3.0-or-later
5 */
6#pragma once
7
8#include "RootGuardEvent.hpp"
9
10#include <glibmm/dispatcher.h>
11#include <sigc++/sigc++.h>
12
13#include <condition_variable>
14#include <cstddef>
15#include <deque>
16#include <mutex>
17#include <optional>
18#include <string>
19#include <thread>
20#include <vector>
21
23
25 bool active{};
29 std::string init_system{"unknown"};
30 std::string state{"unknown"};
31 std::string mode{"unknown"};
32 std::string metadata_action{"unknown"};
33 std::string global_metadata_action{"unknown"};
34 std::string pid;
35};
36
38 std::vector<std::string> trustedApplications;
39 std::vector<std::string> trustedExecutables;
40 std::vector<std::string> deniedExecutables;
41};
42
50
51class Client {
52public:
53 Client();
54 ~Client();
55
56 Client(const Client&) = delete;
57 Client& operator=(const Client&) = delete;
58
59 sigc::signal<void(const Snapshot&)>& signal_updated() noexcept;
60
61 void refresh();
62 void start_service();
63 void stop_service();
64 void reload_policy();
65 void restart_service();
66 void set_immediate_protection(bool enabled);
67 void restore_event(const Event& event);
68 void remove_event(const Event& event);
70
71private:
72 enum class Action {
73 Refresh,
74 Start,
75 Stop,
76 Reload,
77 Restart,
78 SetProtection,
79 Restore,
80 Remove,
81 SaveApplicationRules,
82 Quit,
83 };
84
91
92 void enqueue(Request request);
93 void worker_loop();
94 void on_dispatch();
95 Snapshot collect_snapshot(const std::string& operation_message,
96 bool operation_success) const;
97 bool run_request(const Request& request, std::string& message) const;
98
99 Glib::Dispatcher dispatcher_;
100 sigc::signal<void(const Snapshot&)> signal_updated_;
101
102 mutable std::mutex mutex_;
103 std::condition_variable condition_;
104 std::deque<Request> requests_;
107 bool stopping_{};
108 std::thread worker_;
109};
110
111} // namespace BastionGuard::RootGuard
sigc::signal< void(const Snapshot &)> & signal_updated() noexcept
Snapshot collect_snapshot(const std::string &operation_message, bool operation_success) const
Client & operator=(const Client &)=delete
sigc::signal< void(const Snapshot &)> signal_updated_
bool run_request(const Request &request, std::string &message) const
void save_application_rules(ApplicationRules rules)
void remove_event(const Event &event)
Client(const Client &)=delete
void restore_event(const Event &event)
std::condition_variable condition_
void set_immediate_protection(bool enabled)
std::vector< std::string > deniedExecutables
std::vector< std::string > trustedExecutables
std::vector< std::string > trustedApplications