int checkProv(const char *pUserCode, void (*cb)(void *p, int ok, const char *pMsg), void *cbRet){ /* http://sccps.silentcircle.com/provisioning/silent_phone/tivi_cfg.xml?api_key=12345 http://sccps.silentcircle.com/provisioning/silent_phone/settings.txt?api_key=12345 http://sccps.silentcircle.com/provisioning/silent_phone/tivi_cfg_glob.txt?api_key=12345 */ char bufReq[1024]; const char *t_getDevID_md5(); const char *t_getDev_name(); const char *dev_id=t_getDevID_md5(); const char *dev_name=t_getDev_name(); #define CHK_BUF \ if(l+100>sizeof(bufReq)){\ return -1;\ } int l=snprintf(bufReq, sizeof(bufReq)-10, "%s/provisioning/use_code/?provisioning_code=", provisioningLink); CHK_BUF l+=fixPostEncodingToken(&bufReq[l],sizeof(bufReq)-10-l,pUserCode,strlen(pUserCode)); CHK_BUF l+=snprintf(&bufReq[l],sizeof(bufReq)-10-l,"&device_id=%s&device_name=",dev_id); CHK_BUF l+=fixPostEncodingToken(&bufReq[l],sizeof(bufReq)-10-l, dev_name,strlen(dev_name)); CHK_BUF #undef CHK_BUF int r=getToken(&bufReq[0], &bufAPIKey[0],255,cb,cbRet); if(r<0){ return -1; } cb(cbRet,1,"Configuration code ok"); return checkProvWithAPIKey(&bufAPIKey[0],cb, cbRet);; }
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; }