Hello everyone,

I have a question on my API Signing code. The code below I have tested on 
commands like createDomain, listTemplates, and listServices. Those all run like 
expected, but I am running into trouble with createAccount. I am wondering if 
it isn't an issue with the sort function?

function cloudstack_sign_sort($cmd)
{
  $commands = explode('&', $cmd);
  sort($commands);
  $sort = implode('&', $commands);

  return $sort;
}

function cloudstack_formatCmd($api, $cmd)
{
  $str = 'apiKey=' . $api . '&' . $cmd;
  $str = strtolower(cloudstack_sign_sort($str));

  return $str;
}

function cloudstack_encrypt($cmd, $secret)
{
  $hash = hash_hmac('sha1', $cmd, $secret, true);
  $hash = base64_encode($hash);

  return urlencode($hash);
}

function cloudstack_formattedUrl($baseUrl, $api, $cmd, $signature)
{
  $url = $baseUrl . '?' . $cmd . '&apiKey=' . $api . '&signature=' . $signature;

  return $url;
}

function cloudstack_sign($command, $api, $secret, $baseUrl)
{
    $clean_command = substr($command, strpos($command, '?'));

    $newCmd = cloudstack_formatCmd($api, $clean_command);
    $signature = cloudstack_encrypt($newCmd, $secret);
    $url = cloudstack_formattedUrl($baseUrl, $api, $clean_command, $signature);

    return $url;
}

Thanks,
Blake Ferkingstad

Reply via email to