gnunet-svn
[Top][All Lists]
Advanced

[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);
 
 
 /**




reply via email to

[Prev in Thread] Current Thread [Next in Thread]