Commit version 24.12.13800
This commit is contained in:
264
html/feed.php
264
html/feed.php
@ -6,24 +6,16 @@
|
||||
*
|
||||
* @package observium
|
||||
* @subpackage feed
|
||||
* @author Mike Stupalov <mike@observium.org>
|
||||
* @copyright (C) 2006-2013 Adam Armstrong, (C) 2013-2019 Observium Limited
|
||||
* @copyright (C) Adam Armstrong
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
if (isset($_GET['debug']) && $_GET['debug'])
|
||||
{
|
||||
ini_set('display_errors', 1);
|
||||
ini_set('display_startup_errors', 0);
|
||||
ini_set('log_errors', 0);
|
||||
ini_set('allow_url_fopen', 0);
|
||||
ini_set('error_reporting', E_ALL);
|
||||
}
|
||||
*/
|
||||
include_once("../includes/sql-config.inc.php");
|
||||
include_once("../includes/observium.inc.php");
|
||||
|
||||
if (is_iframe()) {
|
||||
display_error_http(403, 'Not allowed to run in a iframe');
|
||||
}
|
||||
|
||||
include($config['html_dir'] . "/includes/functions.inc.php");
|
||||
//include($config['html_dir'] . "/includes/authenticate.inc.php"); // not for RSS!
|
||||
|
||||
$auth = FALSE;
|
||||
@ -31,167 +23,141 @@ $vars = get_vars('GET');
|
||||
|
||||
// Auth
|
||||
if (isset($vars['hash']) && strlen($vars['hash']) >= 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
|
||||
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];
|
||||
$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
|
||||
//}
|
||||
// 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)
|
||||
{
|
||||
//header("HTTP/1.1 401 Unauthorized"); // This force basic auth form (login/password), which unsupported here
|
||||
header("HTTP/1.1 403 Forbidden");
|
||||
|
||||
if ($vars)
|
||||
{
|
||||
?>
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>Unauthorized</TITLE>
|
||||
</HEAD>
|
||||
<BODY BGCOLOR="#FFFFFF" TEXT="#000000">
|
||||
<H1>Unauthorized</H1>
|
||||
<H2>Update feed url</H2>
|
||||
</BODY>
|
||||
</HTML>
|
||||
<?php
|
||||
}
|
||||
exit;
|
||||
if (!$auth) {
|
||||
display_error_http(401, 'Update feed url');
|
||||
}
|
||||
// End auth
|
||||
|
||||
session_start();
|
||||
$_SESSION['user_id'] = $user_id;
|
||||
$_SESSION['userlevel'] = $user_level;
|
||||
session_start();
|
||||
$_SESSION['user_id'] = $user_id;
|
||||
$_SESSION['userlevel'] = $user_level;
|
||||
|
||||
$permissions = permissions_cache($_SESSION['user_id']);
|
||||
session_commit();
|
||||
$permissions = permissions_cache($_SESSION['user_id']);
|
||||
session_write_close();
|
||||
|
||||
include($config['html_dir'] . "/includes/cache-data.inc.php"); // Need for check permissions
|
||||
include($config['html_dir'] . "/includes/cache-data.inc.php"); // Need for check permissions
|
||||
|
||||
$use_rss = ($vars['v'] == 'rss' ? TRUE : FALSE); // In most cases used ATOM feed
|
||||
$param = array('short' => TRUE, 'pagesize' => 25);
|
||||
if (is_numeric($vars['size']))
|
||||
{
|
||||
$param['pagesize'] = $vars['size'];
|
||||
}
|
||||
$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/';
|
||||
// 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 version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"></rss>');
|
||||
$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 version="1.0" encoding="UTF-8"?><feed xml:lang="en-US" xmlns="'.$atom_ns.'"></feed>');
|
||||
$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'])));
|
||||
}
|
||||
$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 version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"></rss>');
|
||||
$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 version="1.0" encoding="UTF-8"?><feed xml:lang="en-US" xmlns="' . $atom_ns . '"></feed>');
|
||||
$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 = array('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']);
|
||||
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)
|
||||
{
|
||||
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 {
|
||||
$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'])));
|
||||
}
|
||||
$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();
|
||||
// Unset & destroy session
|
||||
session_unset();
|
||||
session_destroy();
|
||||
|
||||
// Print feed
|
||||
header('Content-Type: text/xml; charset=utf-8');
|
||||
echo $xml->asXML();
|
||||
// Print feed
|
||||
header('Content-Type: text/xml; charset=utf-8');
|
||||
echo $xml -> asXML();
|
||||
|
||||
|
||||
// DOCME needs phpdoc block
|
||||
function content_cdata($content)
|
||||
{
|
||||
return '<![CDATA['.$content.']]>';
|
||||
return '<![CDATA[' . $content . ']]>';
|
||||
}
|
||||
|
||||
// EOF
|
||||
|
Reference in New Issue
Block a user