Sample code for 30+ languages & platforms
Zig

ChartURL - Create a Signed URL

See more HTTP Misc Examples

Demonstrates how to create a signed URL for ChartURL.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

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

    const crypt = try chilkat.Crypt2.init();
    defer crypt.deinit();

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

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

    crypt.setHashAlgorithm("SHA256");
    crypt.setMacAlgorithm("HMAC");
    crypt.setMacKeyString(key) catch {};
    crypt.setEncodingMode("base64");

    const json = try chilkat.JsonObject.init();
    defer json.deinit();
    json.load(data) catch {};
    std.debug.print("json = {s}\n", .{try json.emit(alloc)});

    const sig = try crypt.macStringENC(alloc, try json.emit(alloc));

    const sb_url = try chilkat.StringBuilder.init();
    defer sb_url.deinit();
    sb_url.append("https://charturl.com/i/") catch {};
    sb_url.append(token) catch {};
    sb_url.append("/") catch {};
    sb_url.append(slug) catch {};
    sb_url.append("?d=") catch {};
    sb_url.append(try crypt.encodeString(alloc, try json.emit(alloc), "utf-8", "url")) catch {};
    sb_url.append("&s=") catch {};
    sb_url.append(try crypt.encodeString(alloc, sig, "utf-8", "url")) catch {};

    std.debug.print("Signed URL: {s}\n", .{try sb_url.getAsString(alloc)});
}