Beispiel #1
0
static int getToken(const char *pLink, char *resp, int iMaxLen, void (*cb)(void *p, int ok, const char *pMsg), void *cbRet, const char *pReq="GET", const char *pContent=NULL){
   
   int iRespContentLen=0;
   
   int l;
   
   char bufResp[4096];
   char bufJSonValue[1024];
   
#if 0
   const char *pTest="{\"api_key\": \"z46d3856f8ff292f2eb8dab4e5e51edf5b951fb6e6eb01c80662157z\", \"result\": \"success\"}";
   
   iRespContentLen=strlen(pTest);
   l=findJSonToken(pTest,iRespContentLen,"api_key",&bufResp[0],1023);
   if(l>0)printf("token=[%.*s]\n",l,bufResp);

   l=findJSonToken(pTest,iRespContentLen,"result",&bufResp[0],4095);
   if(l>0)printf("token=[%.*s]\n",l,bufResp);
   exit(1);
#endif
   
   
   memset(bufResp,0,sizeof(bufResp));

   
   char *p=download_page2Loc(pLink, &bufResp[0], sizeof(bufResp)-50, iRespContentLen,cb,cbRet, pReq, pContent);
   
   if(!p){
      cb(cbRet,0,"Please check network connection.");//download json fail
      return -1;
   }
#ifdef PROV_TEST
   printf("rec[%.*s]\n",iRespContentLen,p);//rem
   printf("rec-t[%s]\n",bufResp);//rem
#endif
   l=findJSonToken(p,iRespContentLen,"result",&bufJSonValue[0],1023);
   if(l<=0){
      cb(cbRet,0,"ERR: Result is not found");
      return -1;
   }
   if(strcmp(&bufJSonValue[0],"success")){
      l=findJSonToken(p,iRespContentLen,"error_msg",&bufJSonValue[0],1023);
      if(l>0)
         cb(cbRet,-1,&bufJSonValue[0]);
      else{
         cb(cbRet,-1,"Could not download configuration!");
      }
      return -1;
   }
   
   
   l=findJSonToken(p,iRespContentLen,"api_key",&bufJSonValue[0],1023);
   if(l<=0 || l>256 || l>iMaxLen){
      cb(cbRet,0,"ERR: Find api_key failed");
      return -1;
   }
   int ret=snprintf(resp,iMaxLen,"%s",&bufJSonValue[0]);
   resp[iMaxLen]=0;
   
#if defined(__APPLE__)

   int storeAPIKeyToKC(const char *p);
   storeAPIKeyToKC(resp);
   
#endif
   
   return ret;
}
int createUserOnWeb(const char *pUN, const char *pPWD,
                    const char *pEM, const char *pFN, const char *pLN,
                    void (*cb)(void *p, int ok, const char *pMsg), void *cbRet){

   int c, l = 0;
   int iRespContentLen=0;
   
   char bufResp[4096];
   char bufBody[4096];

   
   
   char url[1024];
   int ul = snprintf(url,sizeof(url)-10,"%s/v1/user/",provisioningLink);
   
   ul+=fixPostEncodingToken(&url[ul],sizeof(url)-10-ul,pUN,strlen(pUN));
   url[ul] = '/'; ul++; url[ul]=0;
 
   bufBody[0]='{';l = 1;
   
   c = t_addJSON(1, &bufBody[l], sizeof(bufBody)-l, "username", pUN);
   if(!c){
      cb(cbRet,0,"Please check Username field.");
      return -1;
   }
   l+=c;
   
   c = t_addJSON(0 , &bufBody[l], sizeof(bufBody)-l, "password", pPWD);
   if(!c){
      cb(cbRet,0,"Please check Password field.");
      return -1;
   }
   l+=c;
   
   c = t_addJSON(1 , &bufBody[l], sizeof(bufBody)-l, "email", pEM);
   if(!c){
      cb(cbRet,0,"Please check Email field.");
      return -1;
   }
   l+=c;
   
   c = t_addJSON(1 , &bufBody[l], sizeof(bufBody)-l, "first_name", pFN); l+=c;
   c = t_addJSON(1 , &bufBody[l], sizeof(bufBody)-l, "last_name", pLN); l+=c;

   bufBody[l - 1] = '}';//remove last , from JSON
   
   memset(bufResp,0,sizeof(bufResp));
   
   char *p=download_page2Loc(url, &bufResp[0], sizeof(bufResp)-50, iRespContentLen,cb,cbRet, "PUT", bufBody);
   
   if(!p){
      cb(cbRet,0,"Please check network connection.");//download json fail
      return -1;
   }
#ifdef PROV_TEST
   printf("rec[%.*s]\n",iRespContentLen,p);//rem
   printf("rec-t[%s]\n",bufResp);//rem
#endif
   
   /*
    {"last_name": "N", "hash": "7c4219a8bcdbfe71aaa7381a72c0b57d3471ee39", "keys": [], "active_st_device": null, "country_code": "", "silent_text": true, "subscription": {"expires": "1900-01-01T00:00:00Z", "has_expired": true}, "first_name": "J", "display_name": "J N", "avatar_url": null, "silent_phone": false, "force_password_change": false, "permissions": {"can_send_media": true, "silent_text": true, "can_receive_voicemail": false, "silent_desktop": false, "silent_phone": false, "conference_create"
    */
   
   char bufJSonValue[1024];
   l=findJSonToken(p,iRespContentLen,"result",&bufJSonValue[0],1023);
   if(l<=0){
      cb(cbRet,0,"ERR: Result is not found");
      return -1;
   }
   if(strcmp(&bufJSonValue[0],"success")){
      l=findJSonToken(p,iRespContentLen,"error_msg",&bufJSonValue[0],1023);
      if(l>0)
         cb(cbRet,-1,&bufJSonValue[0]);
      else{
         cb(cbRet,-1,"Could not download configuration!");
      }
      return -1;
   }
   
   void saveCfgFile(const char *fn, void *p, int iLen);
   saveCfgFile("userData.json", bufResp, iRespContentLen);

   return 0;
}