summaryrefslogtreecommitdiffstats
path: root/src/rgw/rgw_policy_s3.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/rgw/rgw_policy_s3.h')
-rw-r--r--src/rgw/rgw_policy_s3.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/rgw/rgw_policy_s3.h b/src/rgw/rgw_policy_s3.h
new file mode 100644
index 000000000..2a8a7ab09
--- /dev/null
+++ b/src/rgw/rgw_policy_s3.h
@@ -0,0 +1,57 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab ft=cpp
+
+#pragma once
+
+#include <limits.h>
+
+#include <map>
+#include <list>
+#include <string>
+
+#include "include/utime.h"
+
+#include "rgw_string.h"
+
+
+class RGWPolicyEnv {
+ std::map<std::string, std::string, ltstr_nocase> vars;
+
+public:
+ void add_var(const std::string& name, const std::string& value);
+ bool get_var(const std::string& name, std::string& val);
+ bool get_value(const std::string& s, std::string& val, std::map<std::string, bool, ltstr_nocase>& checked_vars);
+ bool match_policy_vars(std::map<std::string, bool, ltstr_nocase>& policy_vars, std::string& err_msg);
+};
+
+class RGWPolicyCondition;
+
+
+class RGWPolicy {
+ uint64_t expires;
+ std::string expiration_str;
+ std::list<RGWPolicyCondition *> conditions;
+ std::list<std::pair<std::string, std::string> > var_checks;
+ std::map<std::string, bool, ltstr_nocase> checked_vars;
+
+public:
+ off_t min_length;
+ off_t max_length;
+
+ RGWPolicy() : expires(0), min_length(0), max_length(LLONG_MAX) {}
+ ~RGWPolicy();
+
+ int set_expires(const std::string& e);
+
+ void set_var_checked(const std::string& var) {
+ checked_vars[var] = true;
+ }
+
+ int add_condition(const std::string& op, const std::string& first, const std::string& second, std::string& err_msg);
+ void add_simple_check(const std::string& var, const std::string& value) {
+ var_checks.emplace_back(var, value);
+ }
+
+ int check(RGWPolicyEnv *env, std::string& err_msg);
+ int from_json(bufferlist& bl, std::string& err_msg);
+};