= 16 && is_numeric($vars['id']) && $vars['id'] > 0) { $key = get_user_pref($vars['id'], 'atom_key'); if ($key) { // Check hash auth if ($data = decrypt($vars['hash'], $key)) { //var_dump($data); $data = explode('|', $data); // user_id|user_level|auth_mechanism $data_c = count($data); if ($data_c == 3) { $user_id = $data[0]; $user_level = $data[1]; // FIXME, need new way for check userlevel, because it can be changed $check_auth_mechanism = $config['auth_mechanism'] == $data[2]; // Now set auth $auth = $check_auth_mechanism && $user_level > 0 && $user_id == $vars['id']; } //else if ($data_c == 2) //{ // // Force delete old keys without auth_mechanism //} } } } //var_dump($auth); if (!$auth) { display_error_http(401, 'Update feed url'); } // End auth session_start(); $_SESSION['user_id'] = $user_id; $_SESSION['userlevel'] = $user_level; $permissions = permissions_cache($_SESSION['user_id']); session_write_close(); include($config['html_dir'] . "/includes/cache-data.inc.php"); // Need for check permissions $use_rss = $vars['v'] === 'rss'; // In most cases used ATOM feed $param = ['short' => TRUE, 'pagesize' => 25]; if (is_numeric($vars['size'])) { $param['pagesize'] = $vars['size']; } // base feed info $base_url = rtrim($GLOBALS['config']['base_url'], '/'); $feed_generator = OBSERVIUM_PRODUCT . ' ' . OBSERVIUM_VERSION; $feed_title = 'Observium [' . $_SERVER["SERVER_NAME"] . '] :: Eventlog Feed'; $feed_description = "Latest eventlogs from observium on $base_url"; $feed_link = $base_url . '/eventlog/'; $events = get_events_array($param); if ($use_rss) { // create rss // See format options here: http://validator.w3.org/feed/docs/rss2.html $xml = new SimpleXMLElement(''); $xml -> addChild('channel'); $xml -> channel -> addChild('title', $feed_title); $xml -> channel -> addChild('description', $feed_description); $xml -> channel -> addChild('link', $feed_link); $xml -> channel -> addChild('language', 'en-us'); $xml -> channel -> addChild('generator', $feed_generator); $xml -> channel -> addChild('pubDate', date(DATE_RSS, strtotime($events['updated']))); $xml -> channel -> addChild('ttl', '5'); // a number of minutes that indicates how long a channel can be cached before refreshing } else { // create atom // See format options here: http://validator.w3.org/feed/docs/atom.html $atom_ns = 'http://www.w3.org/2005/Atom'; $xml = new SimpleXMLElement(''); $xml -> addChild('title', $feed_title); $xml -> addChild('subtitle', $feed_description); $xml -> addChild('id', $feed_link); $xml -> addChild('icon', $base_url . '/' . $GLOBALS['config']['favicon']); $xml -> addChild('link'); $xml -> link -> addAttribute('href', $feed_link); $self_link = $xml -> addChild('link', '', $atom_ns); $self_link -> addAttribute('href', $base_url . $_SERVER['REQUEST_URI']); $self_link -> addAttribute('rel', 'self'); $self_link -> addAttribute('type', 'application/atom+xml'); $xml -> addChild('generator', $feed_generator); $xml -> addChild('updated', date(DATE_ATOM, strtotime($events['updated']))); } foreach ($events['entries'] as $entry) { $entry_device = device_by_id_cache($entry['device_id']); $entry_vars = ['page' => 'device', 'device' => $entry['device_id'], 'tab' => 'logs', 'section' => 'eventlog', 'type' => $entry['type'], 'timestamp_from' => $entry['timestamp'], 'timestamp_to' => $entry['timestamp']]; $entry_title = escape_html('[' . $entry_device['hostname'] . '] ' . $entry['message']); $entry_description = escape_html('[' . $entry_device['hostname'] . "]\n" . strtoupper($entry['type']) . ': ' . $entry['message']); $entry_link = $base_url . '/' . generate_device_url($entry_device, $entry_vars); $entry_id = $entry_link . 'guid=' . md5($entry['event_id']); if ($use_rss) { // add item element for each article $item = $xml -> channel -> addChild('item'); $item -> addChild('title', $entry_title); $item -> addChild('description', $entry_description); $item -> addChild('guid', $entry_id); $item -> addChild('link', $entry_link); $item -> addChild('h:dc:creator', $entry['type']); $item -> addChild('pubDate', date(DATE_RSS, strtotime($entry['timestamp']))); } else { // add entry element for each article $item = $xml -> addChild('entry'); $item -> addChild('title', $entry_title); $item -> addChild('summary', $entry_description); $item -> addChild('id', $entry_id); $item -> addChild('link'); $item -> link -> addAttribute('href', $entry_link); $item -> addChild('author'); $item -> author -> addChild('name', $entry['type']); $item -> addChild('updated', date(DATE_ATOM, strtotime($entry['timestamp']))); } } // Unset & destroy session session_unset(); session_destroy(); // Print feed header('Content-Type: text/xml; charset=utf-8'); echo $xml -> asXML(); // DOCME needs phpdoc block function content_cdata($content) { return ''; } // EOF