[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r36803 - in gnunet/src: identity-provider include
From: |
gnunet |
Subject: |
[GNUnet-SVN] r36803 - in gnunet/src: identity-provider include |
Date: |
Mon, 11 Jan 2016 17:36:26 +0100 |
Author: schanzen
Date: 2016-01-11 17:36:26 +0100 (Mon, 11 Jan 2016)
New Revision: 36803
Modified:
gnunet/src/identity-provider/gnunet-service-identity-provider.c
gnunet/src/identity-provider/identity_provider.h
gnunet/src/identity-provider/identity_provider_api.c
gnunet/src/identity-provider/plugin_rest_identity_provider.c
gnunet/src/include/gnunet_identity_provider_service.h
Log:
- fixes, modify api
Modified: gnunet/src/identity-provider/gnunet-service-identity-provider.c
===================================================================
--- gnunet/src/identity-provider/gnunet-service-identity-provider.c
2016-01-11 15:33:28 UTC (rev 36802)
+++ gnunet/src/identity-provider/gnunet-service-identity-provider.c
2016-01-11 16:36:26 UTC (rev 36803)
@@ -891,14 +891,25 @@
static struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage*
-create_issue_result_message (const char* ticket)
+create_issue_result_message (const char* label,
+ const char* ticket,
+ const char* token)
{
struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *irm;
+ char *tmp_str;
- irm = GNUNET_malloc (sizeof (struct
GNUNET_IDENTITY_PROVIDER_IssueResultMessage) + strlen(ticket) + 1);
+ irm = GNUNET_malloc (sizeof (struct
GNUNET_IDENTITY_PROVIDER_IssueResultMessage)
+ + strlen (label) + 1
+ + strlen (ticket) + 1
+ + strlen (token) + 1);
irm->header.type = htons
(GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_ISSUE_RESULT);
- irm->header.size = htons (sizeof (struct
GNUNET_IDENTITY_PROVIDER_IssueResultMessage) + strlen (ticket) + 1);
- memcpy (&irm[1], ticket, strlen (ticket) + 1);
+ irm->header.size = htons (sizeof (struct
GNUNET_IDENTITY_PROVIDER_IssueResultMessage)
+ + strlen (label) + 1
+ + strlen (ticket) + 1
+ + strlen (token) + 1);
+ GNUNET_asprintf (&tmp_str, "%s,%s,%s", label, ticket, token);
+ memcpy (&irm[1], tmp_str, strlen (tmp_str) + 1);
+ GNUNET_free (tmp_str);
return irm;
}
@@ -925,7 +936,8 @@
{
struct IssueHandle *handle = cls;
struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *irm;
- char* token_ticket_str;
+ char *ticket_str;
+ char *token_str;
handle->ns_qe = NULL;
if (GNUNET_SYSERR == success)
{
@@ -937,7 +949,7 @@
}
if (GNUNET_OK != ticket_serialize (handle->ticket,
&handle->iss_key,
- &token_ticket_str))
+ &ticket_str))
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s\n",
"Error serializing ticket\n");
@@ -945,7 +957,18 @@
GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
return;
}
- irm = create_issue_result_message (token_ticket_str);
+ if (GNUNET_OK != token_to_string (handle->token,
+ &handle->iss_key,
+ &token_str))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "%s\n",
+ "Error serializing token\n");
+ GNUNET_free (ticket_str);
+ cleanup_issue_handle (handle);
+ GNUNET_SCHEDULER_add_now (&do_shutdown, NULL);
+ return;
+ }
+ irm = create_issue_result_message (handle->label, ticket_str, token_str);
GNUNET_SERVER_notification_context_unicast (nc,
handle->client,
&irm->header,
@@ -953,7 +976,8 @@
GNUNET_SERVER_client_set_user_context (handle->client, NULL);
cleanup_issue_handle (handle);
GNUNET_free (irm);
- GNUNET_free (token_ticket_str);
+ GNUNET_free (ticket_str);
+ GNUNET_free (token_str);
}
/**
@@ -1320,11 +1344,11 @@
sizeof (struct GNUNET_CRYPTO_EcdsaPublicKey)))
{
char *tmp2 = GNUNET_STRINGS_data_to_string_alloc (aud_key,
- sizeof (struct
GNUNET_CRYPTO_EcdsaPublicKey));
+ sizeof (struct
GNUNET_CRYPTO_EcdsaPublicKey));
//Audience does not match!
char *tmp = GNUNET_GNSRECORD_value_to_string
(GNUNET_GNSRECORD_TYPE_ID_TOKEN_METADATA,
-
token_metadata_record->data,
-
token_metadata_record->data_size);
+ token_metadata_record->data,
+
token_metadata_record->data_size);
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
"Token does not match audience %s vs %s. Moving on\n",
tmp2,
Modified: gnunet/src/identity-provider/identity_provider.h
===================================================================
--- gnunet/src/identity-provider/identity_provider.h 2016-01-11 15:33:28 UTC
(rev 36802)
+++ gnunet/src/identity-provider/identity_provider.h 2016-01-11 16:36:26 UTC
(rev 36803)
@@ -65,7 +65,7 @@
*/
struct GNUNET_MessageHeader header;
- /* followed by 0-terminated ticket */
+ /* followed by 0-terminated label,ticket,token */
};
Modified: gnunet/src/identity-provider/identity_provider_api.c
===================================================================
--- gnunet/src/identity-provider/identity_provider_api.c 2016-01-11
15:33:28 UTC (rev 36802)
+++ gnunet/src/identity-provider/identity_provider_api.c 2016-01-11
16:36:26 UTC (rev 36803)
@@ -193,6 +193,9 @@
const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *irm;
const struct GNUNET_IDENTITY_PROVIDER_ExchangeResultMessage *erm;
char *str;
+ char *ticket_str;
+ char *token_str;
+ char *label_str;
uint16_t size;
if (NULL == msg)
@@ -214,17 +217,45 @@
return;
}
irm = (const struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage *) msg;
- str = (char *) &irm[1];
+ str = GNUNET_strdup ((char *) &irm[1]);
if ( (size > sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage))
&&
('\0' != str[size - sizeof (struct
GNUNET_IDENTITY_PROVIDER_IssueResultMessage) - 1]) )
{
+ GNUNET_free (str);
GNUNET_break (0);
reschedule_connect (h);
return;
}
if (size == sizeof (struct GNUNET_IDENTITY_PROVIDER_IssueResultMessage))
+ {
+ GNUNET_free (str);
str = NULL;
-
+ }
+ label_str = strtok (str, ",");
+
+ if (NULL == label_str)
+ {
+ GNUNET_free (str);
+ GNUNET_break (0);
+ reschedule_connect (h);
+ return;
+ }
+ ticket_str = strtok (NULL, ",");
+ if (NULL == ticket_str)
+ {
+ GNUNET_free (str);
+ GNUNET_break (0);
+ reschedule_connect (h);
+ return;
+ }
+ token_str = strtok (NULL, ",");
+ if (NULL == token_str)
+ {
+ GNUNET_free (str);
+ GNUNET_break (0);
+ reschedule_connect (h);
+ return;
+ }
op = h->op_head;
GNUNET_CONTAINER_DLL_remove (h->op_head,
h->op_tail,
@@ -231,9 +262,11 @@
op);
GNUNET_CLIENT_receive (h->client, &message_handler, h,
GNUNET_TIME_UNIT_FOREVER_REL);
- ticket.data = str;
+ ticket.data = ticket_str;
+ token.data = token_str;
if (NULL != op->iss_cb)
- op->iss_cb (op->cls, &ticket);
+ op->iss_cb (op->cls, label_str, &ticket, &token);
+ GNUNET_free (str);
GNUNET_free (op);
break;
case GNUNET_MESSAGE_TYPE_IDENTITY_PROVIDER_EXCHANGE_RESULT:
Modified: gnunet/src/identity-provider/plugin_rest_identity_provider.c
===================================================================
--- gnunet/src/identity-provider/plugin_rest_identity_provider.c
2016-01-11 15:33:28 UTC (rev 36802)
+++ gnunet/src/identity-provider/plugin_rest_identity_provider.c
2016-01-11 16:36:26 UTC (rev 36803)
@@ -57,11 +57,17 @@
#define GNUNET_REST_API_NS_IDENTITY_OAUTH2_TOKEN "/idp/token"
/**
- * The URL parameter name in which the ticket must be provided
+ * The parameter name in which the ticket must be provided
*/
#define GNUNET_REST_JSONAPI_IDENTITY_PROVIDER_TICKET "ticket"
/**
+ * The parameter name in which the ticket must be provided
+ */
+#define GNUNET_REST_JSONAPI_IDENTITY_PROVIDER_TOKEN "token"
+
+
+/**
* The URL parameter name in which the nonce must be provided
*/
#define GNUNET_IDENTITY_TOKEN_REQUEST_NONCE "nonce"
@@ -354,13 +360,17 @@
*/
static void
token_creat_cont (void *cls,
- const struct GNUNET_IDENTITY_PROVIDER_Ticket *ticket)
+ const char *label,
+ const struct GNUNET_IDENTITY_PROVIDER_Ticket *ticket,
+ const struct GNUNET_IDENTITY_PROVIDER_Token *token)
{
struct JsonApiResource *json_resource;
struct RequestHandle *handle = cls;
struct MHD_Response *resp;
- json_t *token_ticket_json;
+ json_t *ticket_json;
+ json_t *token_json;
char *ticket_str;
+ char *token_str;
char *result_str;
if (NULL == ticket)
@@ -369,18 +379,26 @@
GNUNET_SCHEDULER_add_now (&do_error, handle);
return;
}
-
+
handle->resp_object = GNUNET_REST_jsonapi_object_new ();
json_resource = GNUNET_REST_jsonapi_resource_new
(GNUNET_REST_JSONAPI_IDENTITY_PROVIDER_TICKET,
- "tmpid"); //TODO
+ label);
ticket_str = GNUNET_IDENTITY_PROVIDER_ticket_to_string (ticket);
- token_ticket_json = json_string (ticket_str);
+ token_str = GNUNET_IDENTITY_PROVIDER_token_to_string (token);
+ ticket_json = json_string (ticket_str);
+ token_json = json_string (token_str);
GNUNET_REST_jsonapi_resource_add_attr (json_resource,
GNUNET_REST_JSONAPI_IDENTITY_PROVIDER_TICKET,
- token_ticket_json);
+ ticket_json);
+ GNUNET_REST_jsonapi_resource_add_attr (json_resource,
+
GNUNET_REST_JSONAPI_IDENTITY_PROVIDER_TOKEN,
+ token_json);
GNUNET_free (ticket_str);
- json_decref (token_ticket_json);
+ GNUNET_free (token_str);
+ json_decref (ticket_json);
+ json_decref (token_json);
GNUNET_REST_jsonapi_object_resource_add (handle->resp_object, json_resource);
+
GNUNET_REST_jsonapi_data_serialize (handle->resp_object, &result_str);
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Result %s\n", result_str);
resp = GNUNET_REST_create_json_response (result_str);
@@ -405,7 +423,7 @@
{
const struct GNUNET_CRYPTO_EcdsaPrivateKey *priv_key;
const char *egoname;
-
+
struct RequestHandle *handle = cls;
struct EgoEntry *ego_entry;
struct GNUNET_HashCode key;
@@ -436,7 +454,7 @@
GNUNET_CRYPTO_hash (GNUNET_REST_JSONAPI_IDENTITY_ISS_REQUEST,
strlen (GNUNET_REST_JSONAPI_IDENTITY_ISS_REQUEST),
&key);
- if ( GNUNET_YES ==
+ if ( GNUNET_YES !=
GNUNET_CONTAINER_multihashmap_contains
(handle->conndata_handle->url_param_map,
&key) )
{
@@ -760,7 +778,7 @@
root = json_object ();
token_str = GNUNET_IDENTITY_PROVIDER_token_to_string (token);
- json_object_set_new (root, "identity_token", json_string (token_str));
+ json_object_set_new (root, "token", json_string (token_str));
json_object_set_new (root, "token_type", json_string ("jwt"));
GNUNET_free (token_str);
@@ -1016,7 +1034,7 @@
* @return NULL on error, otherwise the plugin context
*/
void *
-libgnunet_plugin_rest_identity_token_init (void *cls)
+libgnunet_plugin_rest_identity_provider_init (void *cls)
{
static struct Plugin plugin;
struct GNUNET_REST_Plugin *api;
@@ -1051,7 +1069,7 @@
* @return always NULL
*/
void *
-libgnunet_plugin_rest_identity_token_done (void *cls)
+libgnunet_plugin_rest_identity_provider_done (void *cls)
{
struct GNUNET_REST_Plugin *api = cls;
struct Plugin *plugin = api->cls;
Modified: gnunet/src/include/gnunet_identity_provider_service.h
===================================================================
--- gnunet/src/include/gnunet_identity_provider_service.h 2016-01-11
15:33:28 UTC (rev 36802)
+++ gnunet/src/include/gnunet_identity_provider_service.h 2016-01-11
16:36:26 UTC (rev 36803)
@@ -90,7 +90,9 @@
* token
*
* @param cls closure
+ * @param grant the label in GNS pointing to the token
* @param ticket the ticket
+ * @param token the issued token
* @param name name assigned by the user for this ego,
* NULL if the user just deleted the ego and it
* must thus no longer be used
@@ -97,7 +99,9 @@
*/
typedef void
(*GNUNET_IDENTITY_PROVIDER_IssueCallback)(void *cls,
- const struct GNUNET_IDENTITY_PROVIDER_Ticket
*ticket);
+ const char *grant,
+ const struct GNUNET_IDENTITY_PROVIDER_Ticket
*ticket,
+ const struct GNUNET_IDENTITY_PROVIDER_Token
*token);
/**
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r36803 - in gnunet/src: identity-provider include,
gnunet <=