Change JSON response of GET HTTP /restful/keyring/...

Return "sid", "did" and "name" fields inside their own "identity"
object
This commit is contained in:
Andrew Bettison 2015-08-31 19:11:08 +09:30
parent e956749727
commit 714ea63190
2 changed files with 29 additions and 29 deletions

View File

@ -89,25 +89,34 @@ static int http_request_keyring_response_identity(struct httpd_request *r, uint1
keyring_identity_extract(id, &sidp, &did, &name);
if (!sidp)
return http_request_keyring_response(r, 501, "Identity has no SID");
unsigned i = 0;
if (sidp) {
r->http.response.result_extra[i].label = "sid";
r->http.response.result_extra[i].value.type = JSON_STRING_NULTERM;
r->http.response.result_extra[i].value.u.string.content = alloca_tohex_sid_t(*sidp);
++i;
}
struct json_atom json_id;
struct json_key_value json_id_kv[3];
struct json_atom json_sid;
struct json_atom json_did;
struct json_atom json_name;
json_id.type = JSON_OBJECT;
json_id.u.object.itemc = 1;
json_id.u.object.itemv = json_id_kv;
json_id_kv[0].key = "sid";
json_id_kv[0].value = &json_sid;
json_sid.type = JSON_STRING_NULTERM;
json_sid.u.string.content = alloca_tohex_sid_t(*sidp);
if (did) {
r->http.response.result_extra[i].label = "did";
r->http.response.result_extra[i].value.type = JSON_STRING_NULTERM;
r->http.response.result_extra[i].value.u.string.content = did;
++i;
json_id_kv[json_id.u.object.itemc].key = "did";
json_id_kv[json_id.u.object.itemc].value = &json_did;
++json_id.u.object.itemc;
json_did.type = JSON_STRING_NULTERM;
json_did.u.string.content = did;
}
if (name) {
r->http.response.result_extra[i].label = "name";
r->http.response.result_extra[i].value.type = JSON_STRING_NULTERM;
r->http.response.result_extra[i].value.u.string.content = name;
++i;
json_id_kv[json_id.u.object.itemc].key = "name";
json_id_kv[json_id.u.object.itemc].value = &json_name;
++json_id.u.object.itemc;
json_name.type = JSON_STRING_NULTERM;
json_name.u.string.content = name;
}
r->http.response.result_extra[0].label = "identity";
r->http.response.result_extra[0].value = json_id;
return http_request_keyring_response(r, result, message);
}

View File

@ -62,9 +62,6 @@ set_extra_config() {
set_keyring_config() {
executeOk_servald config \
set debug.httpd on \
set debug.rhizome_manifest on \
set debug.rhizome_store on \
set debug.rhizome on \
set debug.keyring on \
set debug.verbose on \
set log.console.level debug
@ -146,7 +143,7 @@ test_keyringAdd() {
tfw_cat http.headers add.json
tfw_preserve add.json
assertStdoutIs '200'
SID="$(jq -r '.sid' add.json)"
SID="$(jq -r '.identity.sid' add.json)"
assert matches_rexp "^${rexp_sid}$" "$SID"
executeOk_servald keyring list
assert_keyring_list 3
@ -168,7 +165,7 @@ test_keyringAddPin() {
tfw_cat http.headers add.json
tfw_preserve add.json
assertStdoutIs '200'
SID="$(jq -r '.sid' add.json)"
SID="$(jq -r '.identity.sid' add.json)"
executeOk_servald keyring list
assert_keyring_list 2
assertStdoutGrep --stderr --matches=0 "^$SID::\$"
@ -204,9 +201,7 @@ test_keyringSetDidName() {
tfw_cat http.headers set.json
tfw_preserve set.json
assertStdoutIs '200'
assertJq set.json 'contains({"sid": "'$SIDA1'"})'
assertJq set.json 'contains({"did": "987654321"})'
assertJq set.json 'contains({"name": "Joe Bloggs"})'
assertJq set.json 'contains({"identity": {"sid": "'$SIDA1'", "did": "987654321", "name": "Joe Bloggs"}})'
executeOk_servald keyring list
assert_keyring_list 2
assertStdoutGrep --stderr --matches=1 "^$SIDA1:987654321:Joe Bloggs\$"
@ -249,9 +244,7 @@ test_keyringSetDidNamePin() {
tfw_cat http.headers set3.json
tfw_preserve set3.json
assertStdoutIs '200'
assertJq set3.json 'contains({"sid": "'$SIDA1'"})'
assertJq set3.json 'contains({"did": "987654321"})'
assertJq set3.json 'contains({"name": "Joe Bloggs"})'
assertJq set3.json 'contains({"identity": {"sid": "'$SIDA1'", "did": "987654321", "name": "Joe Bloggs"}})'
executeOk_servald keyring list --entry-pin=xyzabc
assert_keyring_list 2
assertStdoutGrep --stderr --matches=1 "^$SIDA1:987654321:Joe Bloggs\$"
@ -266,9 +259,7 @@ test_keyringSetDidNamePin() {
tfw_cat http.headers set4.json
tfw_preserve set4.json
assertStdoutIs '200'
assertJq set4.json 'contains({"sid": "'$SIDA1'"})'
assertJq set4.json 'contains({"did": "321321321"})'
assertJq set4.json 'contains({"name": "Fred Nurks"})'
assertJq set4.json 'contains({"identity": {"sid": "'$SIDA1'", "did": "321321321", "name": "Fred Nurks"}})'
executeOk_servald keyring list --entry-pin=xyzabc
assert_keyring_list 2
assertStdoutGrep --stderr --matches=1 "^$SIDA1:321321321:Fred Nurks\$"