function ajax_sign_request()
{
$settings = $this->get_settings();
if (!$this->configured()) {
$this->ajax_error(__("Plugin not configured", 'ooyala'));
}
// check nonce
$this->ajax_check();
$request = json_decode(file_get_contents('php://input'), true);
if (!isset($request) || !is_array($request)) {
$this->ajax_error(__("Invalid request", 'ooyala'));
}
$request = wp_parse_args($request, array('method' => '', 'path' => '', 'body' => '', 'params' => array()));
$request['params']['api_key'] = $settings['api_key'];
$request['params']['expires'] = time() + 300;
$to_sign = $settings['api_secret'] . $request['method'] . $request['path'];
$param_sorted = array_keys($request['params']);
sort($param_sorted);
foreach ($param_sorted as $key) {
$to_sign .= $key . '=' . $request['params'][$key];
}
$to_sign .= $request['body'];
// Sign the payload in $to_sign
$hash = hash("sha256", $to_sign, true);
$base64_hash = base64_encode($hash);
$request['params']['signature'] = rtrim(substr($base64_hash, 0, 43), '=');
$url = self::api_base . $request['path'] . '?' . http_build_query($request['params']);
$this->ajax_success(null, array('url' => $url));
}