Sample code for 30+ languages & platforms
C

ChartURL - Create a Signed URL

See more HTTP Misc Examples

Demonstrates how to create a signed URL for ChartURL.

Chilkat C Downloads

C
#include <C_CkCrypt2.h>
#include <C_CkJsonObject.h>
#include <C_CkStringBuilder.h>

void ChilkatSample(void)
    {
    HCkCrypt2 crypt;
    const char *key;
    const char *token;
    const char *slug;
    const char *data;
    HCkJsonObject json;
    const char *sig;
    HCkStringBuilder sbUrl;

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    crypt = CkCrypt2_Create();

    // Example key: "dek-d7a46236eda961a6c3c18ffcc6b077ba87d27e9ae85f7842c6d427c265dd5f69d5131308d93332353d4a55a4b1160fcf516515a4a9f0aa50fbf2d7a2e7d0f1c5"
    key = "charturl-sign-encrypt-key";
    // Example token: "dt-RwYN"
    token = "charturl-token";

    slug = "weekly-activity";
    data = "{ \"options\": {\"data\": {\"columns\": [[\"This Week\",10,13],[\"Last Week\",9,5]]}}}";

    CkCrypt2_putHashAlgorithm(crypt,"SHA256");
    CkCrypt2_putMacAlgorithm(crypt,"HMAC");
    CkCrypt2_SetMacKeyString(crypt,key);
    CkCrypt2_putEncodingMode(crypt,"base64");

    json = CkJsonObject_Create();
    CkJsonObject_Load(json,data);
    printf("json = %s\n",CkJsonObject_emit(json));

    sig = CkCrypt2_macStringENC(crypt,CkJsonObject_emit(json));

    sbUrl = CkStringBuilder_Create();
    CkStringBuilder_Append(sbUrl,"https://charturl.com/i/");
    CkStringBuilder_Append(sbUrl,token);
    CkStringBuilder_Append(sbUrl,"/");
    CkStringBuilder_Append(sbUrl,slug);
    CkStringBuilder_Append(sbUrl,"?d=");
    CkStringBuilder_Append(sbUrl,CkCrypt2_encodeString(crypt,CkJsonObject_emit(json),"utf-8","url"));
    CkStringBuilder_Append(sbUrl,"&s=");
    CkStringBuilder_Append(sbUrl,CkCrypt2_encodeString(crypt,sig,"utf-8","url"));

    printf("Signed URL: %s\n",CkStringBuilder_getAsString(sbUrl));


    CkCrypt2_Dispose(crypt);
    CkJsonObject_Dispose(json);
    CkStringBuilder_Dispose(sbUrl);

    }