Beispiel #1
0
char *remove_secret(cJSON **argjsonp,char *parmstxt)
{
    long len;
    cJSON_DeleteItemFromObject(*argjsonp,"secret");
    if ( parmstxt != 0 )
        free(parmstxt);
    parmstxt = cJSON_Print(*argjsonp);
    len = strlen(parmstxt);
    stripwhite_ns(parmstxt,len);
    return(parmstxt);
}
Beispiel #2
0
char *call_SuperNET_JSON(char *JSONstr)
{
    cJSON *json,*array;
    int32_t valid;
    char NXTaddr[64],_tokbuf[2*MAX_JSON_FIELD],encoded[NXT_TOKEN_LEN+1],*cmdstr,*retstr = 0;
    struct coin_info *cp = get_coin_info("BTCD");
    if ( Finished_init == 0 )
    {
        printf("Finished_init still 0\n");
        return(clonestr("{\"result\":null}"));
    }
//printf("got call_SuperNET_JSON.(%s)\n",JSONstr);
    if ( cp != 0 && (json= cJSON_Parse(JSONstr)) != 0 )
    {
        expand_nxt64bits(NXTaddr,cp->srvpubnxtbits);
        cJSON_AddItemToObject(json,"NXT",cJSON_CreateString(NXTaddr));
        cJSON_AddItemToObject(json,"pubkey",cJSON_CreateString(Global_mp->pubkeystr));
        cmdstr = cJSON_Print(json);
        if ( cmdstr != 0 )
        {
            stripwhite_ns(cmdstr,strlen(cmdstr));
            issue_generateToken(0,encoded,cmdstr,cp->srvNXTACCTSECRET);
            encoded[NXT_TOKEN_LEN] = 0;
            sprintf(_tokbuf,"[%s,{\"token\":\"%s\"}]",cmdstr,encoded);
            free(cmdstr);
            //printf("made tokbuf.(%s)\n",_tokbuf);
            array = cJSON_Parse(_tokbuf);
            if ( array != 0 )
            {
                cmdstr = verify_tokenized_json(0,NXTaddr,&valid,array);
                //printf("cmdstr.%s valid.%d\n",cmdstr,valid);
                retstr = SuperNET_json_commands(Global_mp,0,array,NXTaddr,valid,_tokbuf);
                //printf("json command return.(%s)\n",retstr);
                if ( cmdstr != 0 )
                    free(cmdstr);
                free_json(array);
            } else printf("couldnt parse tokbuf.(%s)\n",_tokbuf);
        }
        free_json(json);
    } else printf("couldnt parse (%s)\n",JSONstr);
    if ( retstr == 0 )
        retstr = clonestr("{\"result\":null}");
    return(retstr);
}
Beispiel #3
0
char *pNXT_jsonhandler(cJSON **argjsonp,char *argstr,char *verifiedsender)
{
    struct NXThandler_info *mp = Global_mp;
    long len;
    struct coin_info *cp;
    int32_t valid,firsttime = 1;
    cJSON *secretobj = 0,*json;
    char NXTACCTSECRET[1024],sender[64],*origparmstxt,*parmstxt=0,encoded[NXT_TOKEN_LEN+1],*retstr = 0;
again:
    sender[0] = 0;
    if ( verifiedsender != 0 && verifiedsender[0] != 0 )
        safecopy(sender,verifiedsender,sizeof(sender));
    valid = -1;
    //printf("pNXT_jsonhandler argjson.%p\n",*argjsonp);
    if ( *argjsonp != 0 )
    {
        secretobj = cJSON_GetObjectItem(*argjsonp,"secret");
        copy_cJSON(NXTACCTSECRET,secretobj);
        if ( NXTACCTSECRET[0] == 0 && (cp= get_coin_info("BTCD")) != 0 )
        {
            safecopy(NXTACCTSECRET,cp->NXTACCTSECRET,sizeof(NXTACCTSECRET));
            cJSON_ReplaceItemInObject(*argjsonp,"secret",cJSON_CreateString(NXTACCTSECRET));
            //printf("got cp.%p for BTCD (%s) (%s)\n",cp,cp->NXTACCTSECRET,cJSON_Print(*argjsonp));
        }
        parmstxt = cJSON_Print(*argjsonp);
        len = strlen(parmstxt);
        stripwhite_ns(parmstxt,len);
        //printf("parmstxt.(%s)\n",parmstxt);
    }
    if ( *argjsonp == 0 )
    {
        json = cJSON_CreateObject();
        cJSON_AddItemToObject(json,"error",cJSON_CreateString("cant parse"));
        cJSON_AddItemToObject(json,"argstr",cJSON_CreateString(argstr));
        retstr = cJSON_Print(json);
        free_json(json);
        return(retstr);
    }
    else
    {
        origparmstxt = parmstxt;
        parmstxt = verify_tokenized_json(sender,&valid,argjsonp,parmstxt);
    }
    retstr = pNXT_json_commands(mp,Global_pNXT,*argjsonp,sender,valid,argstr);
    //printf("back from pNXT_json_commands\n");
    if ( firsttime != 0 && retstr == 0 && *argjsonp != 0 && parmstxt == 0 )
    {
        cJSON *reqobj;
        uint64_t nxt64bits;
        char _tokbuf[4096],NXTaddr[64],buf[1024];//,*str;
        firsttime = 0;
        reqobj = cJSON_GetObjectItem(*argjsonp,"requestType");
        copy_cJSON(buf,reqobj);
        if ( cJSON_GetObjectItem(*argjsonp,"requestType") != 0 )
            cJSON_ReplaceItemInObject(*argjsonp,"time",cJSON_CreateNumber(time(NULL)));
        else cJSON_AddItemToObject(*argjsonp,"time",cJSON_CreateNumber(time(NULL)));
        nxt64bits = issue_getAccountId(0,NXTACCTSECRET);
        expand_nxt64bits(NXTaddr,nxt64bits);
        cJSON_ReplaceItemInObject(*argjsonp,"NXT",cJSON_CreateString(NXTaddr));
        printf("replace NXT.(%s)\n",NXTaddr);
//#ifndef __linux__
        if ( strcmp(buf,"teleport") != 0 && strcmp(buf,"tradebot") != 0 && strcmp(buf,"makeoffer") != 0 && strcmp(buf,"select") != 0 && strcmp(buf,"checkmessages") != 0 && Global_pNXT->privacyServer != 0 )
        {
            parmstxt = remove_secret(argjsonp,parmstxt);
            issue_generateToken(mp->curl_handle2,encoded,parmstxt,NXTACCTSECRET);
            encoded[NXT_TOKEN_LEN] = 0;
            sprintf(_tokbuf,"[%s,{\"token\":\"%s\"}]",parmstxt,encoded);
            retstr = sendmessage(NXTaddr,NXTACCTSECRET,_tokbuf,(int32_t)strlen(_tokbuf)+1,Global_pNXT->privacyServer_NXTaddr,_tokbuf);
        }
        else
//#endif
        {
            issue_generateToken(mp->curl_handle2,encoded,origparmstxt,NXTACCTSECRET);
            encoded[NXT_TOKEN_LEN] = 0;
            sprintf(_tokbuf,"[%s,{\"token\":\"%s\"}]",origparmstxt,encoded);
            if ( *argjsonp != 0 )
                free_json(*argjsonp);
            *argjsonp = cJSON_Parse(_tokbuf);
            if ( origparmstxt != 0 )
                free(origparmstxt), origparmstxt = 0;
            goto again;
        }
    }
    //printf("free parmstxt.%p, argjson.%p\n",parmstxt,*argjsonp);
    if ( parmstxt != 0 )
        free(parmstxt);
    return(retstr);
}