blob: 0cb0c9b0fe2ad9bccc7f012e9228ba895376e1e6 [file] [log] [blame]
#include "resource_uri_override.h"
#include <algorithm>
#include <string>
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "authorizer_enums.h"
#include "override.h"
namespace milotic::authz {
// This is applicable if the operation is contained in the operation_map
// and if uri is found in override_targets
bool ResourceUriOverride::IsApplicable(absl::string_view uri,
ecclesia::Operation operation) const {
if (uri.empty() || !operation_map_.contains(operation)) {
return false;
}
// We need to check both uris that end in a / and uris that don't.
// '/redfish/v1' should be treated the same as '/redfish/v1/'
std::string other_uri;
if (uri.back() == '/') {
other_uri = uri.substr(0, uri.size() - 1);
} else {
other_uri = absl::StrCat(uri, "/");
}
// If either uri or other uri is found, return true
return std::find(override_targets_.begin(), override_targets_.end(), uri) !=
override_targets_.end() ||
std::find(override_targets_.begin(), override_targets_.end(),
other_uri) != override_targets_.end();
}
Override::Type ResourceUriOverride::GetOverrideType() const {
return Override::kResourceUriOverride;
}
} // namespace milotic::authz