int gen_access_key = 0;
int gen_secret_key = 0;
bool set_perm = false;
+ bool set_temp_url_key = false;
+ string temp_url_key;
string bucket_id;
Formatter *formatter = NULL;
int purge_data = false;
access = val;
perm_mask = rgw_str_to_perm(access.c_str());
set_perm = true;
+ } else if (ceph_argparse_witharg(args, i, &val, "--temp-url-key", (char*)NULL)) {
+ temp_url_key = val;
+ set_temp_url_key = true;
} else if (ceph_argparse_witharg(args, i, &val, "--bucket-id", (char*)NULL)) {
bucket_id = val;
if (bucket_id.empty()) {
if (set_perm)
user_op.set_perm(perm_mask);
+ if (set_temp_url_key)
+ user_op.set_temp_url_key(temp_url_key);
+
if (!op_mask_str.empty()) {
uint32_t op_mask;
int ret = rgw_parse_op_type_list(op_mask_str, &op_mask);
string default_placement;
list<string> placement_tags;
RGWQuotaInfo bucket_quota;
+ string temp_url_key;
RGWUserInfo() : auid(0), suspended(0), max_buckets(RGW_DEFAULT_MAX_BUCKETS), op_mask(RGW_OP_TYPE_ALL), system(0) {}
void encode(bufferlist& bl) const {
- ENCODE_START(14, 9, bl);
+ ENCODE_START(15, 9, bl);
::encode(auid, bl);
string access_key;
string secret_key;
::encode(default_placement, bl);
::encode(placement_tags, bl);
::encode(bucket_quota, bl);
+ ::encode(temp_url_key, bl);
ENCODE_FINISH(bl);
}
void decode(bufferlist::iterator& bl) {
if (struct_v >= 14) {
::decode(bucket_quota, bl);
}
+ if (struct_v >= 15) {
+ ::decode(temp_url_key, bl);
+ }
DECODE_FINISH(bl);
}
void dump(Formatter *f) const;
encode_json("default_placement", default_placement, f);
encode_json("placement_tags", placement_tags, f);
encode_json("bucket_quota", bucket_quota, f);
+ encode_json("temp_url_key", temp_url_key, f);
}
JSONDecoder::decode_json("default_placement", default_placement, obj);
JSONDecoder::decode_json("placement_tags", placement_tags, obj);
JSONDecoder::decode_json("bucket_quota", bucket_quota, obj);
+ JSONDecoder::decode_json("temp_url_key", temp_url_key, obj);
}
void RGWQuotaInfo::dump(Formatter *f) const
}
}
+int RGWSetTempUrl::verify_permission()
+{
+ if (s->perm_mask != RGW_PERM_FULL_CONTROL)
+ return -EACCES;
+
+ return 0;
+}
+
+void RGWSetTempUrl::execute()
+{
+}
+
+
int RGWDeleteObj::verify_permission()
{
if (!verify_bucket_permission(s, RGW_PERM_WRITE))
virtual uint32_t op_mask() { return RGW_OP_TYPE_WRITE; }
};
+class RGWSetTempUrl : public RGWOp {
+protected:
+ int ret;
+ string temp_url_key;
+public:
+ RGWSetTempUrl() : ret(0) {}
+
+ int verify_permission();
+ void execute();
+
+ virtual int get_params() = 0;
+ virtual void send_response() = 0;
+ virtual const string name() { return "set_temp_url"; }
+};
+
class RGWDeleteObj : public RGWOp {
protected:
int ret;
~RGWPutMetadata_ObjStore() {}
};
+class RGWSetTempUrl_ObjStore : public RGWSetTempUrl {
+public:
+ RGWSetTempUrl_ObjStore() {}
+ ~RGWSetTempUrl_ObjStore() {}
+};
+
class RGWDeleteObj_ObjStore : public RGWDeleteObj {
public:
RGWDeleteObj_ObjStore() {}
rgw_flush_formatter_and_reset(s, s->formatter);
}
+int RGWSetTempUrl_ObjStore_SWIFT::get_params()
+{
+ const char *temp_url = s->info.env->get("HTTP_X_ACCOUNT_META_TEMP_URL");
+ if (temp_url)
+ return -EINVAL;
+
+ temp_url_key = temp_url;
+
+ return 0;
+}
+
+void RGWSetTempUrl_ObjStore_SWIFT::send_response()
+{
+ int r = ret;
+ if (!r)
+ r = STATUS_NO_CONTENT;
+
+ set_req_state_err(s, r);
+ dump_errno(s);
+ end_header(s, this);
+ rgw_flush_formatter_and_reset(s, s->formatter);
+}
+
void RGWDeleteObj_ObjStore_SWIFT::send_response()
{
int r = ret;
return new RGWStatAccount_ObjStore_SWIFT;
}
+RGWOp *RGWHandler_ObjStore_Service_SWIFT::op_post()
+{
+ const char *temp_url = s->info.env->get("HTTP_X_ACCOUNT_META_TEMP_URL");
+ if (temp_url) {
+ return new RGWSetTempUrl_ObjStore_SWIFT;
+ }
+ return NULL;
+}
+
RGWOp *RGWHandler_ObjStore_Bucket_SWIFT::get_obj_op(bool get_data)
{
if (is_acl_op()) {
void send_response();
};
+class RGWSetTempUrl_ObjStore_SWIFT : public RGWSetTempUrl_ObjStore {
+public:
+ RGWSetTempUrl_ObjStore_SWIFT() {}
+ ~RGWSetTempUrl_ObjStore_SWIFT() {}
+
+ int get_params();
+ void send_response();
+};
+
class RGWDeleteObj_ObjStore_SWIFT : public RGWDeleteObj_ObjStore {
public:
RGWDeleteObj_ObjStore_SWIFT() {}
protected:
RGWOp *op_get();
RGWOp *op_head();
+ RGWOp *op_post();
public:
RGWHandler_ObjStore_Service_SWIFT() {}
virtual ~RGWHandler_ObjStore_Service_SWIFT() {}
if (op_state.has_bucket_quota())
user_info.bucket_quota = op_state.get_bucket_quota();
+ if (op_state.temp_url_key_specified)
+ user_info.temp_url_key = op_state.temp_url_key;
+
// update the request
op_state.set_user_info(user_info);
op_state.set_populated();
if (op_state.system_specified)
user_info.system = op_state.system;
+ if (op_state.temp_url_key_specified)
+ user_info.temp_url_key = op_state.temp_url_key;
+
if (op_state.op_mask_specified)
user_info.op_mask = op_state.get_op_mask();
std::string caps;
RGWObjVersionTracker objv;
uint32_t op_mask;
+ string temp_url_key;
// subuser attributes
std::string subuser;
bool suspension_op;
bool system_specified;
bool key_op;
+ bool temp_url_key_specified;
// req parameters
bool populated;
op_mask = mask;
op_mask_specified = true;
}
+ void set_temp_url_key(const string& key) {
+ temp_url_key = key;
+ temp_url_key_specified = true;
+ }
void set_key_type(int32_t type) {
key_type = type;
type_specified = true;
std::string get_caps() { return caps; };
std::string get_user_email() { return user_email; };
std::string get_display_name() { return display_name; };
+ std::string get_temp_url_key() { return temp_url_key; };
RGWUserInfo& get_user_info() { return info; };
subuser_params_checked = false;
user_params_checked = false;
bucket_quota_specified = false;
+ temp_url_key_specified = false;
}
};