]> git.proxmox.com Git - ceph.git/blob - ceph/src/rgw/rgw_jsonparser.cc
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / rgw / rgw_jsonparser.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #include <errno.h>
5 #include <string.h>
6
7 #include <iostream>
8 #include <map>
9
10 #include "include/types.h"
11
12 #include "common/Formatter.h"
13 #include "common/ceph_json.h"
14
15 #include "rgw_common.h"
16
17 #define dout_subsys ceph_subsys_rgw
18
19 using namespace std;
20
21 void dump_array(JSONObj *obj)
22 {
23
24 JSONObjIter iter = obj->find_first();
25
26 for (; !iter.end(); ++iter) {
27 JSONObj *o = *iter;
28 cout << "data=" << o->get_data() << std::endl;
29 }
30
31 }
32
33 struct Key {
34 string user;
35 string access_key;
36 string secret_key;
37
38 void decode_json(JSONObj *obj) {
39 JSONDecoder::decode_json("user", user, obj);
40 JSONDecoder::decode_json("access_key", access_key, obj);
41 JSONDecoder::decode_json("secret_key", secret_key, obj);
42 }
43 };
44
45 struct UserInfo {
46 string uid;
47 string display_name;
48 int max_buckets;
49 list<Key> keys;
50
51 void decode_json(JSONObj *obj) {
52 JSONDecoder::decode_json("user_id", uid, obj);
53 JSONDecoder::decode_json("display_name", display_name, obj);
54 JSONDecoder::decode_json("max_buckets", max_buckets, obj);
55 JSONDecoder::decode_json("keys", keys, obj);
56 }
57 };
58
59
60 int main(int argc, char **argv) {
61 JSONParser parser;
62
63 char buf[1024];
64 bufferlist bl;
65
66 for (;;) {
67 int done;
68 int len;
69
70 len = fread(buf, 1, sizeof(buf), stdin);
71 if (ferror(stdin)) {
72 cerr << "read error" << std::endl;
73 exit(-1);
74 }
75 done = feof(stdin);
76
77 bool ret = parser.parse(buf, len);
78 if (!ret)
79 cerr << "parse error" << std::endl;
80
81 if (done) {
82 bl.append(buf, len);
83 break;
84 }
85 }
86
87 JSONObjIter iter = parser.find_first();
88
89 for (; !iter.end(); ++iter) {
90 JSONObj *obj = *iter;
91 cout << "is_object=" << obj->is_object() << std::endl;
92 cout << "is_array=" << obj->is_array() << std::endl;
93 cout << "name=" << obj->get_name() << std::endl;
94 cout << "data=" << obj->get_data() << std::endl;
95 }
96
97 iter = parser.find_first("conditions");
98 if (!iter.end()) {
99 JSONObj *obj = *iter;
100
101 JSONObjIter iter2 = obj->find_first();
102 for (; !iter2.end(); ++iter2) {
103 JSONObj *child = *iter2;
104 cout << "is_object=" << child->is_object() << std::endl;
105 cout << "is_array=" << child->is_array() << std::endl;
106 if (child->is_array()) {
107 dump_array(child);
108 }
109 cout << "name=" << child->get_name() <<std::endl;
110 cout << "data=" << child->get_data() <<std::endl;
111 }
112 }
113
114 RGWUserInfo ui;
115
116 try {
117 ui.decode_json(&parser);
118 } catch (JSONDecoder::err& e) {
119 cout << "failed to decode JSON input: " << e.message << std::endl;
120 exit(1);
121 }
122
123 JSONFormatter formatter(true);
124
125 formatter.open_object_section("user_info");
126 ui.dump(&formatter);
127 formatter.close_section();
128
129 formatter.flush(std::cout);
130
131 std::cout << std::endl;
132 }
133