gnunet

Main GNUnet Logic
Log | Files | Refs | Submodules | README | LICENSE

commit 9c7255313368e04bff09d8dfb1aad537e7121359
parent ee99cbfa6a429854c632ee212815fc3fcac9f6f4
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Sun, 23 Oct 2022 22:01:37 +0900

-more rest API fixes, test fix

Diffstat:
Msrc/gnsrecord/json_gnsrecord.c | 114+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Msrc/namestore/Makefile.am | 5++---
Msrc/namestore/plugin_rest_namestore.c | 2+-
Msrc/namestore/test_plugin_rest_namestore.sh | 21+++++++++------------
4 files changed, 71 insertions(+), 71 deletions(-)

diff --git a/src/gnsrecord/json_gnsrecord.c b/src/gnsrecord/json_gnsrecord.c @@ -31,13 +31,13 @@ #define GNUNET_JSON_GNSRECORD_VALUE "value" #define GNUNET_JSON_GNSRECORD_RECORD_DATA "data" #define GNUNET_JSON_GNSRECORD_TYPE "record_type" -#define GNUNET_JSON_GNSRECORD_EXPIRATION_TIME "expiration_time" +#define GNUNET_JSON_GNSRECORD_RELATIVE_EXPIRATION_TIME "relative_expiration" +#define GNUNET_JSON_GNSRECORD_ABSOLUTE_EXPIRATION_TIME "absolute_expiration" #define GNUNET_JSON_GNSRECORD_FLAG_PRIVATE "is_private" -#define GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL "supplemental" +#define GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL "is_supplemental" #define GNUNET_JSON_GNSRECORD_FLAG_RELATIVE "is_relative_expiration" -#define GNUNET_JSON_GNSRECORD_FLAG_SHADOW "shadow" +#define GNUNET_JSON_GNSRECORD_FLAG_SHADOW "is_shadow" #define GNUNET_JSON_GNSRECORD_RECORD_NAME "record_name" -#define GNUNET_JSON_GNSRECORD_NEVER "never" struct GnsRecordInfo { @@ -82,39 +82,66 @@ cleanup_recordinfo (struct GnsRecordInfo *gnsrecord_info) static int parse_record (json_t *data, struct GNUNET_GNSRECORD_Data *rd) { - struct GNUNET_TIME_Absolute abs_expiration_time; - struct GNUNET_TIME_Relative rel_expiration_time; + struct GNUNET_TIME_Absolute abs_exp; + struct GNUNET_TIME_Relative rel_exp; const char *value; const char *record_type; - const char *expiration_time; int private; int supplemental; - int rel_exp; + int is_rel_exp; int shadow; int unpack_state = 0; + json_error_t err; // interpret single gns record - unpack_state = json_unpack (data, - "{s:s, s:s, s:s, s:b, s:b, s:b, s:b}", - GNUNET_JSON_GNSRECORD_VALUE, - &value, - GNUNET_JSON_GNSRECORD_TYPE, - &record_type, - GNUNET_JSON_GNSRECORD_EXPIRATION_TIME, - &expiration_time, - GNUNET_JSON_GNSRECORD_FLAG_PRIVATE, - &private, - GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL, - &supplemental, - GNUNET_JSON_GNSRECORD_FLAG_RELATIVE, - &rel_exp, - GNUNET_JSON_GNSRECORD_FLAG_SHADOW, - &shadow); + unpack_state = json_unpack_ex (data, + &err, + 0, + "{s:s, s:s, s:i, s:b, s:b, s:b, s:b}", + GNUNET_JSON_GNSRECORD_VALUE, + &value, + GNUNET_JSON_GNSRECORD_TYPE, + &record_type, + GNUNET_JSON_GNSRECORD_RELATIVE_EXPIRATION_TIME, + &rel_exp.rel_value_us, + GNUNET_JSON_GNSRECORD_FLAG_PRIVATE, + &private, + GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL, + &supplemental, + GNUNET_JSON_GNSRECORD_FLAG_RELATIVE, + &is_rel_exp, + GNUNET_JSON_GNSRECORD_FLAG_SHADOW, + &shadow); if (0 != unpack_state) { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Error gnsdata object has a wrong format!\n"); - return GNUNET_SYSERR; + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Error gnsdata object has a wrong format: `%s'!\n", + err.text); + unpack_state = json_unpack_ex (data, + &err, + 0, + "{s:s, s:s, s:I, s:b, s:b, s:b, s:b}", + GNUNET_JSON_GNSRECORD_VALUE, + &value, + GNUNET_JSON_GNSRECORD_TYPE, + &record_type, + GNUNET_JSON_GNSRECORD_ABSOLUTE_EXPIRATION_TIME, + &abs_exp.abs_value_us, + GNUNET_JSON_GNSRECORD_FLAG_PRIVATE, + &private, + GNUNET_JSON_GNSRECORD_FLAG_SUPPLEMENTAL, + &supplemental, + GNUNET_JSON_GNSRECORD_FLAG_RELATIVE, + &is_rel_exp, + GNUNET_JSON_GNSRECORD_FLAG_SHADOW, + &shadow); + if ((0 != unpack_state) || (is_rel_exp)) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Error gnsdata object has a wrong format: `%s'!\n", + (is_rel_exp) ? "No relative expiration given" : err.text); + return GNUNET_SYSERR; + } } rd->record_type = GNUNET_GNSRECORD_typename_to_number (record_type); if (UINT32_MAX == rd->record_type) @@ -131,29 +158,8 @@ parse_record (json_t *data, struct GNUNET_GNSRECORD_Data *rd) return GNUNET_SYSERR; } - if (0 == strcmp (expiration_time, GNUNET_JSON_GNSRECORD_NEVER)) - { - rd->expiration_time = GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us; - } - else if ((1 != rel_exp) && - (GNUNET_OK == - GNUNET_STRINGS_fancy_time_to_absolute (expiration_time, - &abs_expiration_time))) - { - rd->expiration_time = abs_expiration_time.abs_value_us; - } - else if (GNUNET_OK == - GNUNET_STRINGS_fancy_time_to_relative (expiration_time, - &rel_expiration_time)) - { + if (is_rel_exp) rd->flags |= GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION; - rd->expiration_time = rel_expiration_time.rel_value_us; - } - else - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Expiration time invalid\n"); - return GNUNET_SYSERR; - } if (1 == private) rd->flags |= GNUNET_GNSRECORD_RF_PRIVATE; if (1 == supplemental) @@ -260,8 +266,8 @@ clean_gnsrecordobject (void *cls, struct GNUNET_JSON_Specification *spec) */ struct GNUNET_JSON_Specification GNUNET_GNSRECORD_JSON_spec_gnsrecord (struct GNUNET_GNSRECORD_Data **rd, - unsigned int *rd_count, - char **name) + unsigned int *rd_count, + char **name) { struct GnsRecordInfo *gnsrecord_info = GNUNET_new (struct GnsRecordInfo); @@ -289,8 +295,8 @@ GNUNET_GNSRECORD_JSON_spec_gnsrecord (struct GNUNET_GNSRECORD_Data **rd, */ json_t * GNUNET_GNSRECORD_JSON_from_gnsrecord (const char*rname, - const struct GNUNET_GNSRECORD_Data *rd, - unsigned int rd_count) + const struct GNUNET_GNSRECORD_Data *rd, + unsigned int rd_count) { struct GNUNET_TIME_Absolute abs_exp; struct GNUNET_TIME_Relative rel_exp; @@ -387,5 +393,3 @@ GNUNET_GNSRECORD_JSON_from_gnsrecord (const char*rname, } return data; } - - diff --git a/src/namestore/Makefile.am b/src/namestore/Makefile.am @@ -519,9 +519,8 @@ check_SCRIPTS = \ test_namestore_delete.sh \ test_namestore_zonefile_import.sh -# FIXME -#check_SCRIPTS += \ -# test_plugin_rest_namestore.sh +check_SCRIPTS += \ + test_plugin_rest_namestore.sh EXTRA_DIST = \ test_common.c \ diff --git a/src/namestore/plugin_rest_namestore.c b/src/namestore/plugin_rest_namestore.c @@ -339,7 +339,7 @@ do_error (void *cls) if (0 != handle->ec) emsg = GNUNET_strdup (GNUNET_ErrorCode_get_hint (handle->ec)); json_object_set_new (json_error, "error", json_string (emsg)); - + json_object_set_new (json_error, "error_code", json_integer (handle->ec)); response_code = GNUNET_ErrorCode_get_http_status (handle->ec); if (0 == response_code) response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; diff --git a/src/namestore/test_plugin_rest_namestore.sh b/src/namestore/test_plugin_rest_namestore.sh @@ -92,37 +92,34 @@ curl_get "${namestore_link}/$public" "error" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf #Test POST with NAME -curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "expiration_time":"1d","is_private": false, "is_relative_expiration": false, "supplemental": false, "shadow": false}],"record_name":"test_entry"}' "HTTP/1.1 204 No Content" +curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "relative_expiration": 86400000000, "is_relative_expiration": false, "is_supplemental": false, "is_shadow": false, "is_private": false}],"record_name":"test_entry"}' "HTTP/1.1 204 No Content" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 # invalid values -curl_post "${namestore_link}/$name" '{"data": [{"value":"HVX38H2CB7WJM0WCPWT9CFX6GASMYJVR65RN75SJSSKAYVYXHMRGxxx", "record_type":"PKEY", "expiration_time":"1d","is_private": false, "is_relative_expiration": false, "supplemental": false, "shadow": false}],"record_name":"test_entry"}' "error" +curl_post "${namestore_link}/$name" '{"data": [{"value":"HVX38H2CB7WJM0WCPWT9CFX6GASMYJVR65RN75SJSSKAYVYXHMRGxxx", "record_type":"PKEY", "relative_expiration": 86400000000, "is_relative_expiration": false, "is_supplemental": false, "is_shadow": false, "is_private": false}],"record_name":"test_entry"}' "error" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 -curl_post "${namestore_link}/$name" '{"data": [{"value":"", "record_type":"PKEY", "expiration_time":"1d","flag":0,"record_name"}]:"test_entry"}' "error" +curl_post "${namestore_link}/$name" '{"data": [{"value":"", "record_type":"PKEY", "relative_expiration": 86400000000,"flag":0,"record_name"}]:"test_entry"}' "error" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 -curl_post "${namestore_link}/$name" '{"data": [{"record_type":"PKEY", "expiration_time":"1d","flag":0}],"record_name":"test_entry"}' "error" +curl_post "${namestore_link}/$name" '{"data": [{"record_type":"PKEY", "relative_expiration": 86400000000,"flag":0}],"record_name":"test_entry"}' "error" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 #expirations -curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "expiration_time":"0d","is_private": false, "is_relative_expiration": true, "supplemental": false, "shadow": false}],"record_name":"test_entry"}' "HTTP/1.1 204" +curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "relative_expiration":0, "is_relative_expiration": true, "is_supplemental": false, "is_shadow": false, "is_private": false}],"record_name":"test_entry"}' "HTTP/1.1 204" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 -curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "expiration_time":"10000d","is_private": false, "is_relative_expiration": true, "supplemental": false, "shadow": false}],"record_name":"test_entry"}' "HTTP/1.1 204" +curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "relative_expiration":864000000000000, "is_relative_expiration": true, "is_supplemental": false, "is_shadow": false, "is_private": false}],"record_name":"test_entry"}' "HTTP/1.1 204" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 -curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "expiration_time":"now","is_private": false, "is_relative_expiration": false, "supplemental": false, "shadow": false}],"record_name":"test_entry"}' "error" -gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 - -curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "expiration_time_missing":"1d","is_private": false, "is_relative_expiration": false, "supplemental": false, "shadow": false}],"record_name":"test_entry"}' "error" +curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "expiration_time_missing":"1d", "is_relative_expiration": false, "is_supplemental": false, "is_shadow": false, "is_private": false}],"record_name":"test_entry"}' "error" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 #record_name -curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "expiration_time":"1d","is_private": false, "is_relative_expiration": false, "supplemental": false, "shadow": false}],"record_name":""}' "error" +curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "relative_expiration":86400000000, "is_relative_expiration": false, "is_supplemental": false, "is_shadow": false, "is_private": false}],"record_name":""}' "error" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 -curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "expiration_time":"1d","is_private": false, "is_relative_expiration": false, "supplemental": false, "shadow": false}],"record_name_missing":"test_entry"}' "error" +curl_post "${namestore_link}/$name" '{"data": [{"value":"000G006WVZ8HQ5YTVFNX09HK0VJVVQ9ZCBYDSCH3ERT04N5ZRBKEB82EP8", "record_type":"PKEY", "relative_expiration":"1d", "is_relative_expiration": false, "is_supplemental": false, "is_shadow": false, "is_private": false}],"record_name_missing":"test_entry"}' "error" gnunet-namestore -z $name -d -n "test_entry" -c test_namestore_api.conf > /dev/null 2>&1 #Test DELETE