Skip to content

Commit

Permalink
Merge pull request ceph#5579 from jbweber/s3_encoding_type
Browse files Browse the repository at this point in the history
rgw: implement s3 encoding-type for get bucket

Reviewed-by: Yehuda Sadeh <[email protected]>
  • Loading branch information
yehudasa committed Aug 20, 2015
2 parents 5686d9b + 180ca7b commit 8314384
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/rgw/rgw_op.h
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,7 @@ class RGWListBucket : public RGWOp {
rgw_obj_key end_marker;
string max_keys;
string delimiter;
string encoding_type;
bool list_versions;
int max;
int ret;
Expand Down
25 changes: 23 additions & 2 deletions src/rgw/rgw_rest_s3.cc
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,7 @@ int RGWListBucket_ObjStore_S3::get_params()
return ret;
}
delimiter = s->info.args.get("delimiter");
encoding_type = s->info.args.get("encoding-type");
return 0;
}

Expand All @@ -261,13 +262,23 @@ void RGWListBucket_ObjStore_S3::send_versioned_response()

s->formatter->dump_string("IsTruncated", (max && is_truncated ? "true" : "false"));

bool encode_key = false;
if (strcasecmp(encoding_type.c_str(), "url") == 0)
encode_key = true;

if (ret >= 0) {
vector<RGWObjEnt>::iterator iter;
for (iter = objs.begin(); iter != objs.end(); ++iter) {
time_t mtime = iter->mtime.sec();
const char *section_name = (iter->is_delete_marker() ? "DeleteMarker" : "Version");
s->formatter->open_array_section(section_name);
s->formatter->dump_string("Key", iter->key.name);
if (encode_key) {
string key_name;
url_encode(iter->key.name, key_name);
s->formatter->dump_string("Key", key_name);
} else {
s->formatter->dump_string("Key", iter->key.name);
}
string version_id = iter->key.instance;
if (version_id.empty()) {
version_id = "null";
Expand Down Expand Up @@ -328,11 +339,21 @@ void RGWListBucket_ObjStore_S3::send_response()

s->formatter->dump_string("IsTruncated", (max && is_truncated ? "true" : "false"));

bool encode_key = false;
if (strcasecmp(encoding_type.c_str(), "url") == 0)
encode_key = true;

if (ret >= 0) {
vector<RGWObjEnt>::iterator iter;
for (iter = objs.begin(); iter != objs.end(); ++iter) {
s->formatter->open_array_section("Contents");
s->formatter->dump_string("Key", iter->key.name);
if (encode_key) {
string key_name;
url_encode(iter->key.name, key_name);
s->formatter->dump_string("Key", key_name);
} else {
s->formatter->dump_string("Key", iter->key.name);
}
time_t mtime = iter->mtime.sec();
dump_time(s, "LastModified", &mtime);
s->formatter->dump_format("ETag", "\"%s\"", iter->etag.c_str());
Expand Down

0 comments on commit 8314384

Please sign in to comment.