PureBasic
PureBasic
ChartURL - Create a Signed URL
See more HTTP Misc Examples
Demonstrates how to create a signed URL for ChartURL.Chilkat PureBasic Downloads
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkCrypt2.pb"
Procedure ChilkatExample()
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
crypt.i = CkCrypt2::ckCreate()
If crypt.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Example key: "dek-d7a46236eda961a6c3c18ffcc6b077ba87d27e9ae85f7842c6d427c265dd5f69d5131308d93332353d4a55a4b1160fcf516515a4a9f0aa50fbf2d7a2e7d0f1c5"
key.s = "charturl-sign-encrypt-key"
; Example token: "dt-RwYN"
token.s = "charturl-token"
slug.s = "weekly-activity"
data.s = "{ " + Chr(34) + "options" + Chr(34) + ": {" + Chr(34) + "data" + Chr(34) + ": {" + Chr(34) + "columns" + Chr(34) + ": [[" + Chr(34) + "This Week" + Chr(34) + ",10,13],[" + Chr(34) + "Last Week" + Chr(34) + ",9,5]]}}}"
CkCrypt2::setCkHashAlgorithm(crypt, "SHA256")
CkCrypt2::setCkMacAlgorithm(crypt, "HMAC")
CkCrypt2::ckSetMacKeyString(crypt,key)
CkCrypt2::setCkEncodingMode(crypt, "base64")
json.i = CkJsonObject::ckCreate()
If json.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoad(json,data)
Debug "json = " + CkJsonObject::ckEmit(json)
sig.s = CkCrypt2::ckMacStringENC(crypt,CkJsonObject::ckEmit(json))
sbUrl.i = CkStringBuilder::ckCreate()
If sbUrl.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkStringBuilder::ckAppend(sbUrl,"https://charturl.com/i/")
CkStringBuilder::ckAppend(sbUrl,token)
CkStringBuilder::ckAppend(sbUrl,"/")
CkStringBuilder::ckAppend(sbUrl,slug)
CkStringBuilder::ckAppend(sbUrl,"?d=")
CkStringBuilder::ckAppend(sbUrl,CkCrypt2::ckEncodeString(crypt,CkJsonObject::ckEmit(json),"utf-8","url"))
CkStringBuilder::ckAppend(sbUrl,"&s=")
CkStringBuilder::ckAppend(sbUrl,CkCrypt2::ckEncodeString(crypt,sig,"utf-8","url"))
Debug "Signed URL: " + CkStringBuilder::ckGetAsString(sbUrl)
CkCrypt2::ckDispose(crypt)
CkJsonObject::ckDispose(json)
CkStringBuilder::ckDispose(sbUrl)
ProcedureReturn
EndProcedure