| // Copyright 2022 The ChromiumOS Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SECAGENTD_DAEMON_H_ |
| #define SECAGENTD_DAEMON_H_ |
| |
| #include <cstdint> |
| #include <memory> |
| |
| #include "brillo/daemons/dbus_daemon.h" |
| #include "secagentd/policies_features_broker.h" |
| #include "secagentd/secagent.h" |
| |
| namespace secagentd { |
| |
| // The secagentd main daemon. |
| // On startup the device policy is fetched. Based on the security collection |
| // policies certain BPFs will be loaded and attached. |
| // These BPFs will produce security events that are collected by this daemon, |
| // which are packaged into protobuffs and sent to missived for delivery |
| // to an off-machine service. |
| |
| class Daemon : public brillo::DBusDaemon { |
| public: |
| static constexpr uint32_t kDefaultHeartbeatPeriodS = 300; |
| static constexpr uint32_t kDefaultPluginBatchIntervalS = 2 * 60; |
| |
| Daemon() = delete; |
| /* dependency injection for unit tests */ |
| explicit Daemon(struct Inject); |
| Daemon(bool bypass_policy_for_testing, |
| bool bypass_enq_ok_wait_for_testing, |
| bool stop_reporting_for_unaffiliated_users, |
| uint32_t heartbeat_period_s, |
| uint32_t plugin_batch_interval_s, |
| uint32_t policy_polling_interval_s); |
| ~Daemon() override = default; |
| |
| protected: |
| void QuitDaemon(int); |
| int OnInit() override; |
| int OnEventLoopStarted() override; |
| void OnShutdown(int*) override; |
| |
| private: |
| std::unique_ptr<SecAgent> secagent_; |
| bool bypass_policy_for_testing_ = false; |
| bool bypass_enq_ok_wait_for_testing_ = false; |
| bool stop_reporting_for_unaffiliated_users_ = false; |
| uint32_t heartbeat_period_s_ = kDefaultHeartbeatPeriodS; |
| uint32_t plugin_batch_interval_s_ = kDefaultPluginBatchIntervalS; |
| uint32_t feature_polling_interval_s_ = |
| PoliciesFeaturesBroker::kDefaultPollDurationS; |
| base::WeakPtrFactory<Daemon> weak_ptr_factory_; |
| }; |
| }; // namespace secagentd |
| |
| #endif // SECAGENTD_DAEMON_H_ |