blob: a28f7a1f196bafe1eb44b966cc71df1d425dceff [file] [log] [blame]
// Copyright 2017 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef AUTHPOLICY_AUTHPOLICY_FLAGS_H_
#define AUTHPOLICY_AUTHPOLICY_FLAGS_H_
#include <string>
#include "bindings/authpolicy_containers.pb.h"
namespace base {
class FilePath;
}
namespace authpolicy {
// Serializes |flags| to a base 64 string.
std::string SerializeFlags(const protos::DebugFlags& flags);
// Deserializes |flags| from a base 64 string |proto_encoded|.
bool DeserializeFlags(const std::string& proto_encoded,
protos::DebugFlags* flags);
// Simple class for managing debug flags. See protos::DebugFlags for a
// description of available flags.
//
// Flags are loaded from a JSON file at /etc/authpolicyd_flags (see
// Path::DEBUG_FLAGS).
//
// Example:
// echo '{"log_commands":true,"log_command_output":true,"net_log_level":"10"}' \
// > /etc/authpolicyd_flags
// turns on verbose logging of net commands.
class AuthPolicyFlags {
public:
// Defines 4 sets of flag levels for SetDefaults().
enum DefaultLevel {
// Note: Numbers referenced in authpolicy_debug command help in crosh!
kQuiet = 0, // All flags off (default).
kTaciturn = 1, // A few logs only with important stats.
kChatty = 2, // More verbose logs, low debug level.
kVerbose = 3, // Highly verbose logs, including seccomp failures, high
// debug level.
kMinLevel = kQuiet,
kMaxLevel = kVerbose
};
// Applies defaults according to |default_level|.
void SetDefaults(DefaultLevel default_level);
// Loads flags from the JSON file at |path|. Returns false if the file does
// not exist. Prints warnings and errors. Misspelled/unknown settings are
// ignored. Malformed files (invalid JSON) are ignored altogether.
bool LoadFromJsonFile(const base::FilePath& path);
// Loads flags from the JSON string |flags_json|. Prints warnings and errors.
// Misspelled/unknown settings are ignored. Malformed strings (invalid JSON)
// are ignored altogether.
void LoadFromJsonString(const std::string& flags_json);
// Prints out all flags.
void Dump() const;
// Gets the underlying protobuf with all flags.
const protos::DebugFlags& Get() const { return flags_; }
private:
protos::DebugFlags flags_;
};
} // namespace authpolicy
#endif // AUTHPOLICY_AUTHPOLICY_FLAGS_H_