blob: 8284f5f4814ed81639400d59bf7657ad81ab797a [file] [log] [blame]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/forensics/feedback/redactor_factory.h"
#include <lib/inspect/cpp/vmo/types.h>
#include <limits>
#include <random>
namespace forensics::feedback {
int DefaultCacheIdFn() {
int seed;
zx_cprng_draw(&seed, sizeof(seed));
std::default_random_engine rng(seed);
std::uniform_int_distribution<int> dist(0, 7500);
return dist(rng);
}
// Returns an IdentityRedactor if |enable_data_redaction| is false in |config|, otherwise returns a
// Redactor.
std::unique_ptr<RedactorBase> RedactorFromConfig(inspect::Node* root_node,
const BuildTypeConfig& config,
::fit::function<int()> seed_cache_id) {
std::unique_ptr<RedactorBase> redactor;
auto redaction_enabled = root_node == nullptr ? inspect::BoolProperty()
: root_node->CreateBool("redaction_enabled", false);
if (config.enable_data_redaction) {
redaction_enabled.Set(true);
auto num_redaction_ids = root_node == nullptr ? inspect::UintProperty()
: root_node->CreateUint("num_redaction_ids", 0u);
redactor = std::unique_ptr<RedactorBase>(
new Redactor(seed_cache_id(), std::move(num_redaction_ids), std::move(redaction_enabled)));
} else {
redaction_enabled.Set(false);
redactor = std::unique_ptr<RedactorBase>(new IdentityRedactor(std::move(redaction_enabled)));
}
return redactor;
}
} // namespace forensics::feedback