X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fceph%2Fsrc%2Frgw%2Frgw_role.h;fp=src%2Fceph%2Fsrc%2Frgw%2Frgw_role.h;h=bccb576ed2d83c1e023d6687bcd22321e1afa929;hb=812ff6ca9fcd3e629e49d4328905f33eee8ca3f5;hp=0000000000000000000000000000000000000000;hpb=15280273faafb77777eab341909a3f495cf248d9;p=stor4nfv.git diff --git a/src/ceph/src/rgw/rgw_role.h b/src/ceph/src/rgw/rgw_role.h new file mode 100644 index 0000000..bccb576 --- /dev/null +++ b/src/ceph/src/rgw/rgw_role.h @@ -0,0 +1,137 @@ +#ifndef CEPH_RGW_ROLE_H +#define CEPH_RGW_ROLE_H + +class RGWRole +{ + static const string role_name_oid_prefix; + static const string role_oid_prefix; + static const string role_path_oid_prefix; + static const string role_arn_prefix; + static constexpr int MAX_ROLE_NAME_LEN = 64; + static constexpr int MAX_PATH_NAME_LEN = 512; + + CephContext *cct; + RGWRados *store; + string id; + string name; + string path; + string arn; + string creation_date; + string trust_policy; + map perm_policy_map; + string tenant; + + int store_info(bool exclusive); + int store_name(bool exclusive); + int store_path(bool exclusive); + int read_id(const string& role_name, const string& tenant, string& role_id); + int read_name(); + int read_info(); + void set_id(const string& id) { this->id = id; } + bool validate_input(); + void extract_name_tenant(const std::string& str); + +public: + RGWRole(CephContext *cct, + RGWRados *store, + string name, + string path, + string trust_policy, + string tenant) + : cct(cct), + store(store), + name(std::move(name)), + path(std::move(path)), + trust_policy(std::move(trust_policy)), + tenant(std::move(tenant)) { + if (this->path.empty()) + this->path = "/"; + extract_name_tenant(this->name); + } + + RGWRole(CephContext *cct, + RGWRados *store, + string name, + string tenant) + : cct(cct), + store(store), + name(std::move(name)), + tenant(std::move(tenant)) { + extract_name_tenant(this->name); + } + + RGWRole(CephContext *cct, + RGWRados *store, + string id) + : cct(cct), + store(store), + id(std::move(id)) {} + + RGWRole(CephContext *cct, + RGWRados *store) + : cct(cct), + store(store) {} + + RGWRole() {} + + ~RGWRole() = default; + + void encode(bufferlist& bl) const { + ENCODE_START(2, 1, bl); + ::encode(id, bl); + ::encode(name, bl); + ::encode(path, bl); + ::encode(arn, bl); + ::encode(creation_date, bl); + ::encode(trust_policy, bl); + ::encode(perm_policy_map, bl); + ::encode(tenant, bl); + ENCODE_FINISH(bl); + } + + void decode(bufferlist::iterator& bl) { + DECODE_START(2, bl); + ::decode(id, bl); + ::decode(name, bl); + ::decode(path, bl); + ::decode(arn, bl); + ::decode(creation_date, bl); + ::decode(trust_policy, bl); + ::decode(perm_policy_map, bl); + if (struct_v >= 2) { + ::decode(tenant, bl); + } + DECODE_FINISH(bl); + } + + const string& get_id() const { return id; } + const string& get_name() const { return name; } + const string& get_path() const { return path; } + const string& get_create_date() const { return creation_date; } + const string& get_assume_role_policy() const { return trust_policy;} + + int create(bool exclusive); + int delete_obj(); + int get(); + int get_by_id(); + int update(); + void update_trust_policy(string& trust_policy); + void set_perm_policy(const string& policy_name, const string& perm_policy); + vector get_role_policy_names(); + int get_role_policy(const string& policy_name, string& perm_policy); + int delete_policy(const string& policy_name); + void dump(Formatter *f) const; + void decode_json(JSONObj *obj); + + static const string& get_names_oid_prefix(); + static const string& get_info_oid_prefix(); + static const string& get_path_oid_prefix(); + static int get_roles_by_path_prefix(RGWRados *store, + CephContext *cct, + const string& path_prefix, + const string& tenant, + vector& roles); +}; +WRITE_CLASS_ENCODER(RGWRole) +#endif /* CEPH_RGW_ROLE_H */ +