kaltura_notification_client.php in Kaltura 5
File
kaltura_client/kaltura_notification_client.php
View source
<?php
class KalturaNotificationClient {
var $id;
var $type;
var $puser;
var $partner;
var $data;
var $multi = false;
var $valid_signature = null;
function KalturaNotificationClient($notification_params = array(), $admin_secret = null, $validate_sig = true) {
if (!count($notification_params)) {
return $this;
}
if ($validate_sig) {
$this
->validate_signature($notification_params, $admin_secret);
if (!$this->valid_signature) {
return $this;
}
}
$this->id = $notification_params['notification_id'];
$this->type = $notification_params['notification_type'];
$this->puser = $notification_params['puser_id'];
$this->partner = $notification_params['partner_id'];
$data = array();
foreach ($notification_params as $k => $v) {
switch ($k) {
case 'partner_id':
break;
default:
$data[$k] = $v;
}
}
if (isset($data["multi_notification"]) && $data["multi_notification"] === "true") {
$this->multi = true;
$res = $this
->splitMultiNotifications($data);
}
else {
$res[0] = $data;
}
$this->data = $res;
return $this;
}
function splitMultiNotifications($data) {
$not_data = array();
foreach ($data as $name => $value) {
$match = preg_match("/^(not[^_]*)_(.*)\$/", $name, $parts);
if (!$match) {
continue;
}
$not_name_parts = $parts[1];
$not_property = @$parts[2];
$num = (int) str_replace('not', '', $not_name_parts);
$not_data[$num][$not_property] = $value;
}
return $not_data;
}
function validate_signature($notification_params, $admin_secret) {
ksort($notification_params);
$str = "";
$valid_params = array();
if (key_exists('signed_fields', $notification_params)) {
$valid_params = explode(',', $notification_params['signed_fields']);
}
foreach ($notification_params as $k => $v) {
if ($k == "sig") {
continue;
}
if (!in_array($k, $valid_params) && count($valid_params) > 1 && !$notification_params['multi_notification']) {
if ($k != 'multi_notification' && $k != 'number_of_notifications') {
continue;
}
}
$str .= $k . $v;
}
if (md5($admin_secret . $str) == $notification_params['sig']) {
$this->valid_signature = true;
}
else {
$this->valid_signature = false;
}
}
}