blob: 915bc14633dbee71045ef2f1be0866b5c35c8f8b [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "dlp/dlp_requests_cache.h"
namespace dlp {
DlpRequestsCache::DlpRequestsCache() {}
DlpRequestsCache::~DlpRequestsCache() = default;
void DlpRequestsCache::CacheResult(IsFilesTransferRestrictedRequest request,
IsFilesTransferRestrictedResponse response) {
for (const auto& file : *response.mutable_files_restrictions()) {
CacheFileRequest(
{file.file_metadata().inode(), file.file_metadata().crtime()},
file.file_metadata().path(), request.destination_url(),
request.destination_component(), file.restriction_level());
}
}
RestrictionLevel DlpRequestsCache::Get(
FileId id,
const std::string& path,
const std::string& destination_url,
DlpComponent destination_component) const {
CachedRequest cached_file(id, path, destination_url, destination_component);
auto it = cached_requests_.find(cached_file);
if (it == cached_requests_.end()) {
return LEVEL_UNSPECIFIED;
}
return it->second;
}
void DlpRequestsCache::ResetCache() {
cached_requests_.clear();
}
DlpRequestsCache::CachedRequest::CachedRequest(
FileId id,
const std::string& path,
const std::string& destination_url,
DlpComponent destination_component)
: id(id),
path(path),
destination_url(destination_url),
destination_component(destination_component) {}
bool DlpRequestsCache::CachedRequest::operator<(const CachedRequest& o) const {
if (id != o.id) {
return id < o.id;
}
if (path != o.path) {
return path < o.path;
}
if (destination_url != o.destination_url) {
return destination_url < o.destination_url;
}
return destination_component < o.destination_component;
}
void DlpRequestsCache::CacheFileRequest(FileId id,
const std::string& path,
const std::string& destination_url,
DlpComponent destination_component,
RestrictionLevel restriction_level) {
CachedRequest cached_file_request(id, path, destination_url,
destination_component);
cached_requests_.insert_or_assign(cached_file_request, restriction_level);
}
}; // namespace dlp