[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[gnunet] 18/30: towards better API
From: |
gnunet |
Subject: |
[gnunet] 18/30: towards better API |
Date: |
Thu, 13 Feb 2020 22:31:18 +0100 |
This is an automated email from the git hooks/post-receive script.
martin-schanzenbach pushed a commit to branch master
in repository gnunet.
commit 5fb277e8d012d687f4d2d032571cd4b57946bbfb
Author: Schanzenbach, Martin <address@hidden>
AuthorDate: Tue Feb 4 23:34:10 2020 +0100
towards better API
---
src/include/gnunet_reclaim_attribute_lib.h | 9 ++++
src/include/gnunet_reclaim_plugin.h | 18 ++++++++
src/include/gnunet_reclaim_service.h | 6 ++-
src/reclaim-attribute/Makefile.am | 2 +
.../plugin_reclaim_attestation_jwt.c | 53 +++++++++++++++++++++-
src/reclaim-attribute/reclaim_attestation.c | 18 ++++++++
src/reclaim/gnunet-reclaim.c | 31 +++++++++----
src/reclaim/gnunet-service-reclaim.c | 13 +++++-
src/reclaim/plugin_rest_openid_connect.c | 3 +-
src/reclaim/plugin_rest_reclaim.c | 3 +-
src/reclaim/reclaim.h | 5 ++
src/reclaim/reclaim_api.c | 12 +++--
12 files changed, 156 insertions(+), 17 deletions(-)
diff --git a/src/include/gnunet_reclaim_attribute_lib.h
b/src/include/gnunet_reclaim_attribute_lib.h
index 937a4d8f4..6d3503950 100644
--- a/src/include/gnunet_reclaim_attribute_lib.h
+++ b/src/include/gnunet_reclaim_attribute_lib.h
@@ -586,6 +586,15 @@ GNUNET_RECLAIM_attestation_number_to_typename (uint32_t
type);
uint32_t
GNUNET_RECLAIM_attestation_typename_to_number (const char *typename);
+/**
+ * Convert an attestation type name to the corresponding number
+ *
+ * @param typename name to convert
+ * @return corresponding number, UINT32_MAX on error
+ */
+struct GNUNET_RECLAIM_AttributeList*
+GNUNET_RECLAIM_attestation_get_attributes (const struct
GNUNET_RECLAIM_Attestation *attest);
+
#if 0 /* keep Emacsens' auto-indent happy */
{
diff --git a/src/include/gnunet_reclaim_plugin.h
b/src/include/gnunet_reclaim_plugin.h
index 4dd5252d2..ed62adf6c 100644
--- a/src/include/gnunet_reclaim_plugin.h
+++ b/src/include/gnunet_reclaim_plugin.h
@@ -165,6 +165,18 @@ typedef const char
*(*GNUNET_RECLAIM_AttestationNumberToTypenameFunction) (
void *cls,
uint32_t type);
+/**
+ * Function called to convert a type number (i.e. 1) to the
+ * corresponding type string
+ *
+ * @param cls closure
+ * @param type number of a type to convert
+ * @return corresponding typestring, NULL on error
+ */
+typedef struct GNUNET_RECLAIM_AttributeList
*(*GNUNET_RECLAIM_AttestationGetAttributesFunction) (
+ void *cls,
+ const struct GNUNET_RECLAIM_Attestation *attest);
+
/**
@@ -231,6 +243,12 @@ struct GNUNET_RECLAIM_AttestationPluginFunctions
*/
GNUNET_RECLAIM_AttestationNumberToTypenameFunction number_to_typename;
+ /**
+ * Attesation attributes.
+ */
+ GNUNET_RECLAIM_AttestationGetAttributesFunction get_attributes;
+
+
};
diff --git a/src/include/gnunet_reclaim_service.h
b/src/include/gnunet_reclaim_service.h
index c9c4fa5d1..ef9899dde 100644
--- a/src/include/gnunet_reclaim_service.h
+++ b/src/include/gnunet_reclaim_service.h
@@ -138,11 +138,13 @@ typedef void (*GNUNET_RECLAIM_AttributeTicketResult) (
*
* @param cls The callback closure
* @param identity The identity authoritative over the attributes
- * @param attr The attribute
+ * @param attestation The attestation
+ * @param attributes the parsed attributes
*/
typedef void (*GNUNET_RECLAIM_AttestationResult) (
void *cls, const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
- const struct GNUNET_RECLAIM_Attestation *attestation);
+ const struct GNUNET_RECLAIM_Attestation *attestation,
+ const struct GNUNET_RECLAIM_AttributeList *attributes);
/**
diff --git a/src/reclaim-attribute/Makefile.am
b/src/reclaim-attribute/Makefile.am
index a1c220340..9617672ee 100644
--- a/src/reclaim-attribute/Makefile.am
+++ b/src/reclaim-attribute/Makefile.am
@@ -44,6 +44,8 @@ libgnunet_plugin_reclaim_attestation_jwt_la_SOURCES = \
plugin_reclaim_attestation_jwt.c
libgnunet_plugin_reclaim_attestation_jwt_la_LIBADD = \
$(top_builddir)/src/util/libgnunetutil.la \
+ libgnunetreclaimattribute.la \
+ -ljansson\
$(LTLIBINTL)
libgnunet_plugin_reclaim_attestation_jwt_la_LDFLAGS = \
$(GN_PLUGIN_LDFLAGS)
diff --git a/src/reclaim-attribute/plugin_reclaim_attestation_jwt.c
b/src/reclaim-attribute/plugin_reclaim_attestation_jwt.c
index eb6043a66..8a67b18cd 100644
--- a/src/reclaim-attribute/plugin_reclaim_attestation_jwt.c
+++ b/src/reclaim-attribute/plugin_reclaim_attestation_jwt.c
@@ -30,7 +30,7 @@
#include "gnunet_util_lib.h"
#include "gnunet_reclaim_plugin.h"
#include <inttypes.h>
-
+#include <jansson.h>
/**
* Convert the 'value' of an attestation to a string.
@@ -142,6 +142,56 @@ jwt_number_to_typename (void *cls, uint32_t type)
return jwt_attest_name_map[i].name;
}
+/**
+ * Parse a JWT and return the respective claim value as Attribute
+ *
+ * @param attest the jwt attestation
+ * @param claim the name of the claim in the JWT
+ *
+ * @return a GNUNET_RECLAIM_Attribute, containing the new value
+ */
+struct GNUNET_RECLAIM_AttributeList *
+jwt_parse_attributes (void *cls,
+ const struct GNUNET_RECLAIM_Attestation *attest)
+{
+ char *jwt_string;
+ struct GNUNET_RECLAIM_AttributeList *attrs;
+ char delim[] = ".";
+ char *val_str = NULL;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Parsing JWT attributes.\n");
+ char *decoded_jwt;
+ json_t *json_val;
+ json_error_t *json_err = NULL;
+
+ if (GNUNET_RECLAIM_ATTESTATION_TYPE_JWT != attest->type)
+ return NULL;
+ attrs = GNUNET_new (struct GNUNET_RECLAIM_AttributeList);
+
+ jwt_string = GNUNET_strdup (attest->data);
+ const char *jwt_body = strtok (jwt_string, delim);
+ jwt_body = strtok (NULL, delim);
+ GNUNET_STRINGS_base64_decode (jwt_body, strlen (jwt_body),
+ (void **) &decoded_jwt);
+ json_val = json_loads (decoded_jwt, JSON_DECODE_ANY, json_err);
+ const char *key;
+ json_t *value;
+ json_object_foreach (json_val, key, value) {
+ val_str = json_dumps (value, JSON_ENCODE_ANY);
+ GNUNET_RECLAIM_attribute_list_add (attrs,
+ key,
+ NULL,
+
GNUNET_RECLAIM_ATTRIBUTE_TYPE_STRING,//FIXME
+ val_str,
+ strlen (val_str));
+ GNUNET_free (val_str);
+ }
+ GNUNET_free (jwt_string);
+ //FIXME needed??
+ return attrs;
+}
+
+
+
/**
* Entry point for the plugin.
@@ -159,6 +209,7 @@ libgnunet_plugin_reclaim_attestation_jwt_init (void *cls)
api->string_to_value = &jwt_string_to_value;
api->typename_to_number = &jwt_typename_to_number;
api->number_to_typename = &jwt_number_to_typename;
+ api->get_attributes = &jwt_parse_attributes;
return api;
}
diff --git a/src/reclaim-attribute/reclaim_attestation.c
b/src/reclaim-attribute/reclaim_attestation.c
index 1a7776719..fd08b9b12 100644
--- a/src/reclaim-attribute/reclaim_attestation.c
+++ b/src/reclaim-attribute/reclaim_attestation.c
@@ -500,3 +500,21 @@ GNUNET_RECLAIM_attestation_deserialize (const char *data,
size_t data_size)
attestation->data = write_ptr;
return attestation;
}
+
+struct GNUNET_RECLAIM_AttributeList*
+GNUNET_RECLAIM_attestation_get_attributes (const struct
GNUNET_RECLAIM_Attestation *attest)
+{
+ unsigned int i;
+ struct Plugin *plugin;
+ struct GNUNET_RECLAIM_AttributeList *ret;
+ init ();
+ for (i = 0; i < num_plugins; i++)
+ {
+ plugin = attest_plugins[i];
+ if (NULL !=
+ (ret = plugin->api->get_attributes (plugin->api->cls,
+ attest)))
+ return ret;
+ }
+ return NULL;
+}
diff --git a/src/reclaim/gnunet-reclaim.c b/src/reclaim/gnunet-reclaim.c
index 3e31fef4c..0170ceff2 100644
--- a/src/reclaim/gnunet-reclaim.c
+++ b/src/reclaim/gnunet-reclaim.c
@@ -553,13 +553,27 @@ iter_cb (void *cls,
attr->data_size);
attr_type = GNUNET_RECLAIM_attribute_number_to_typename (attr->type);
id = GNUNET_STRINGS_data_to_string_alloc (&attr->id, sizeof(attr->id));
- fprintf (stdout,
- "Name: %s; Value: %s (%s); Flag %u; ID: %s\n",
- attr->name,
- attr_str,
- attr_type,
- attr->flag,
- id);
+ if (GNUNET_YES == GNUNET_RECLAIM_id_is_zero (&attr->attestation))
+ {
+ fprintf (stdout,
+ "Name: %s; Value: %s (%s); Flag %u; ID: %s\n",
+ attr->name,
+ attr_str,
+ attr_type,
+ attr->flag,
+ id);
+ }
+ else
+ {
+ fprintf (stdout,
+ "Name: %s; Value: %s (%s); Flag %u; ID: %s\n",
+ attr->name,
+ attr_str,
+ attr_type,
+ attr->flag,
+ id);
+
+ }
GNUNET_free (id);
}
GNUNET_RECLAIM_get_attributes_next (attr_iterator);
@@ -609,7 +623,8 @@ attest_iter_finished (void *cls)
static void
attest_iter_cb (void *cls,
const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
- const struct GNUNET_RECLAIM_Attestation *attest)
+ const struct GNUNET_RECLAIM_Attestation *attest,
+ const struct GNUNET_RECLAIM_AttributeList *attrs)
{
char *attest_str;
char *id;
diff --git a/src/reclaim/gnunet-service-reclaim.c
b/src/reclaim/gnunet-service-reclaim.c
index 61d029665..99831172b 100644
--- a/src/reclaim/gnunet-service-reclaim.c
+++ b/src/reclaim/gnunet-service-reclaim.c
@@ -1900,7 +1900,10 @@ attest_iter_cb (void *cls,
{
struct Iterator *ai = cls;
struct GNUNET_MQ_Envelope *env;
+ struct GNUNET_RECLAIM_AttributeList *attrs;
+ struct GNUNET_RECLAIM_Attestation *att;
char *data_tmp;
+ char *attrs_size;
if ((rd_count != 1) ||
(GNUNET_GNSRECORD_TYPE_RECLAIM_ATTESTATION != rd->record_type))
@@ -1908,6 +1911,10 @@ attest_iter_cb (void *cls,
GNUNET_NAMESTORE_zone_iterator_next (ai->ns_it, 1);
return;
}
+ att = GNUNET_RECLAIM_attestation_deserialize (rd->data,
+ rd->data_size);
+ attrs = GNUNET_RECLAIM_attestation_get_attributes (att);
+ attrs_size = GNUNET_RECLAIM_attribute_list_serialize_get_size (attrs);
struct AttestationResultMessage *arm;
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Found attestation under: %s\n",
@@ -1915,13 +1922,17 @@ attest_iter_cb (void *cls,
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Sending ATTESTATION_RESULT message\n");
env = GNUNET_MQ_msg_extra (arm,
- rd->data_size,
+ rd->data_size + attrs_size,
GNUNET_MESSAGE_TYPE_RECLAIM_ATTESTATION_RESULT);
arm->id = htonl (ai->request_id);
arm->attestation_len = htons (rd->data_size);
GNUNET_CRYPTO_ecdsa_key_get_public (zone, &arm->identity);
data_tmp = (char *) &arm[1];
GNUNET_memcpy (data_tmp, rd->data, rd->data_size);
+ data_tmp += rd->data_size;
+ GNUNET_RECLAIM_attribute_list_serialize (attrs,
+ data_tmp);
+
GNUNET_MQ_send (ai->client->mq, env);
}
diff --git a/src/reclaim/plugin_rest_openid_connect.c
b/src/reclaim/plugin_rest_openid_connect.c
index 345dbeed6..b296f6d15 100644
--- a/src/reclaim/plugin_rest_openid_connect.c
+++ b/src/reclaim/plugin_rest_openid_connect.c
@@ -988,7 +988,8 @@ oidc_attest_collect_finished_cb (void *cls)
static void
oidc_attest_collect (void *cls,
const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
- const struct GNUNET_RECLAIM_Attestation *attest)
+ const struct GNUNET_RECLAIM_Attestation *attest,
+ const struct GNUNET_RECLAIM_AttributeList *attrs)
{
struct RequestHandle *handle = cls;
struct GNUNET_RECLAIM_AttributeListEntry *le;
diff --git a/src/reclaim/plugin_rest_reclaim.c
b/src/reclaim/plugin_rest_reclaim.c
index 6f7a5987b..cddee9b54 100644
--- a/src/reclaim/plugin_rest_reclaim.c
+++ b/src/reclaim/plugin_rest_reclaim.c
@@ -619,7 +619,8 @@ add_attestation_cont (struct GNUNET_REST_RequestHandle
*con_handle,
static void
attest_collect (void *cls,
const struct GNUNET_CRYPTO_EcdsaPublicKey *identity,
- const struct GNUNET_RECLAIM_Attestation *attest)
+ const struct GNUNET_RECLAIM_Attestation *attest,
+ const struct GNUNET_RECLAIM_AttributeList *attrs)
{
struct RequestHandle *handle = cls;
json_t *attr_obj;
diff --git a/src/reclaim/reclaim.h b/src/reclaim/reclaim.h
index 7b5d7ab19..2cd07e861 100644
--- a/src/reclaim/reclaim.h
+++ b/src/reclaim/reclaim.h
@@ -178,6 +178,11 @@ struct AttestationResultMessage
*/
uint16_t attestation_len GNUNET_PACKED;
+ /**
+ * Length of serialized attribute data
+ */
+ uint16_t attributes_len GNUNET_PACKED;
+
/**
* always zero (for alignment)
*/
diff --git a/src/reclaim/reclaim_api.c b/src/reclaim/reclaim_api.c
index 3820550c9..afab33320 100644
--- a/src/reclaim/reclaim_api.c
+++ b/src/reclaim/reclaim_api.c
@@ -801,11 +801,14 @@ handle_attestation_result (void *cls, const struct
static struct GNUNET_CRYPTO_EcdsaPrivateKey identity_dummy;
struct GNUNET_RECLAIM_Handle *h = cls;
struct GNUNET_RECLAIM_AttestationIterator *it;
+ struct GNUNET_RECLAIM_AttributeList *attrs;
struct GNUNET_RECLAIM_Operation *op;
size_t att_len;
+ size_t attrs_len;
uint32_t r_id = ntohl (msg->id);
att_len = ntohs (msg->attestation_len);
+ attrs_len = ntohs (msg->attributes_len);
LOG (GNUNET_ERROR_TYPE_DEBUG, "Processing attestation result.\n");
@@ -836,7 +839,7 @@ handle_attestation_result (void *cls, const struct
if (NULL != op)
{
if (NULL != op->at_cb)
- op->at_cb (op->cls, NULL, NULL);
+ op->at_cb (op->cls, NULL, NULL, NULL);
GNUNET_CONTAINER_DLL_remove (h->op_head, h->op_tail, op);
free_op (op);
}
@@ -846,17 +849,20 @@ handle_attestation_result (void *cls, const struct
{
struct GNUNET_RECLAIM_Attestation *att;
att = GNUNET_RECLAIM_attestation_deserialize ((char *) &msg[1], att_len);
+ char *read_ptr = ((char *) &msg[1]) + att_len;
+ attrs = GNUNET_RECLAIM_attribute_list_deserialize (read_ptr, attrs_len);
if (NULL != it)
{
if (NULL != it->proc)
- it->proc (it->proc_cls, &msg->identity, att);
+ it->proc (it->proc_cls, &msg->identity, att, attrs);
}
else if (NULL != op)
{
if (NULL != op->at_cb)
- op->at_cb (op->cls, &msg->identity, att);
+ op->at_cb (op->cls, &msg->identity, att, attrs);
}
GNUNET_free (att);
+ GNUNET_RECLAIM_attribute_list_destroy (attrs);
return;
}
GNUNET_assert (0);
--
To stop receiving notification emails like this one, please contact
address@hidden.
- [gnunet] 16/30: add attestation API to CLI, (continued)
- [gnunet] 16/30: add attestation API to CLI, gnunet, 2020/02/13
- [gnunet] 11/30: consolidate reclaim attribute lib, gnunet, 2020/02/13
- [gnunet] 27/30: Merge branch 'master' into schanzen/reclaim_256bit, gnunet, 2020/02/13
- [gnunet] 21/30: add base64url encoding to util (RFC7515), gnunet, 2020/02/13
- [gnunet] 12/30: add expiration, gnunet, 2020/02/13
- [gnunet] 29/30: Merge branch 'master' into schanzen/reclaim_256bit, gnunet, 2020/02/13
- [gnunet] 19/30: bugfixes, gnunet, 2020/02/13
- [gnunet] 17/30: bugfixes, gnunet, 2020/02/13
- [gnunet] 15/30: add attestation API, gnunet, 2020/02/13
- [gnunet] 13/30: move to 256-bit identifier; some cleanups, gnunet, 2020/02/13
- [gnunet] 18/30: towards better API,
gnunet <=
- [gnunet] 25/30: Merge branch 'schanzen/reclaim_256bit' of ssh://gnunet.org/gnunet into schanzen/reclaim_256bit, gnunet, 2020/02/13
- [gnunet] 20/30: more bugfixes and REST API change, gnunet, 2020/02/13
- [gnunet] 26/30: Merge branch 'master' into schanzen/reclaim_256bit, gnunet, 2020/02/13
- [gnunet] 02/30: Refactoring reclaim attestations, gnunet, 2020/02/13
- [gnunet] 28/30: Merge branch 'master' into schanzen/reclaim_256bit, gnunet, 2020/02/13
- [gnunet] 30/30: Merge branch 'master' into schanzen/reclaim_256bit, gnunet, 2020/02/13
- [gnunet] 22/30: bugfixes; CLI improvements, gnunet, 2020/02/13
- [gnunet] 24/30: add expiration, gnunet, 2020/02/13
- [gnunet] 23/30: consolidate reclaim attribute lib, gnunet, 2020/02/13
- [gnunet] 14/30: Refactoring reclaim attestations, gnunet, 2020/02/13