r4273 Initial implementation of #389, section 3.3.
authorDenis Ovsienko <infrastation@yandex.ru>
Thu, 3 Mar 2011 00:07:45 +0000 (00:07 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Thu, 3 Mar 2011 00:07:45 +0000 (00:07 +0000)
index.php: add dispatching code
TSURI(): new function for static URI translation
getImageHREF(): make use of the wrapper for static images
printPageHeaders(): idem, for CSS/JS content
proxyStaticURI(): new function to actually serve the content

wwwroot/inc/functions.php
wwwroot/inc/interface.php
wwwroot/index.php

index d7aed928ccecf61bded7914cfa2b5d6d564f8dbe..c3cbfd11a9c773d63bcc061923de6e0c9574a348 100644 (file)
@@ -2366,6 +2366,16 @@ function ip_long2quad ($quad)
       return long2ip($quad);
 }
 
+// translate static URI
+function TSURI ($URI)
+{
+       global $racktables_static_dir;
+       if (! isset ($racktables_static_dir))
+               return $URI;
+       return "?module=tsuri&uri=${URI}";
+}
+
+// make "A" HTML element
 function mkA ($text, $nextpage, $bypass = NULL, $nexttab = NULL)
 {
        global $page, $tab;
@@ -2389,6 +2399,7 @@ function mkA ($text, $nextpage, $bypass = NULL, $nexttab = NULL)
        return '<a href="' . makeHref ($args) . '">' . $text . '</a>';
 }
 
+// make "HREF" HTML attribute
 function makeHref($params = array())
 {
        $ret = 'index.php?';
@@ -3754,7 +3765,7 @@ function printPageHeaders ()
                if ($item['type'] == 'inline')
                        echo '<style type="text/css">' . "\n" . trim ($item['style'], "\r\n") . "\n</style>\n";
                elseif ($item['type'] == 'file')
-                       echo '<link rel="stylesheet" type="text/css" href="' . htmlspecialchars ($item['style']) . "\" />\n";
+                       echo '<link rel="stylesheet" type="text/css" href="' . TSURI ($item['style']) . "\" />\n";
 
        // add JS scripts
        foreach (addJS (NULL) as $group_name => $js_list)
@@ -3762,7 +3773,7 @@ function printPageHeaders ()
                        if ($item['type'] == 'inline')
                                echo '<script type="text/javascript">' . "\n" . trim ($item['script'], "\r\n") . "\n</script>\n";
                        elseif ($item['type'] == 'file')
-                               echo '<script type="text/javascript" src="' . htmlspecialchars($item['script']) . "\"></script>\n";
+                               echo '<script type="text/javascript" src="' . TSURI ($item['script']) . "\"></script>\n";
 }
 
 function strerror8021Q ($errno)
@@ -4705,4 +4716,36 @@ function getPortinfoByName (&$object, $portname)
        return NULL;
 }
 
+function proxyStaticURI ($URI)
+{
+       $content_type = array
+       (
+               'css' => 'text/css',
+               'js' => 'text/javascript',
+               'html' => 'text/html',
+               'png' => 'image/png',
+               'gif' => 'image/gif',
+       );
+       global $racktables_static_dir;
+       $my_static_root = isset ($racktables_static_dir) ? $racktables_static_dir : '.';
+       $file_path = $my_static_root . '/' . $URI;
+       if (! file_exists ($file_path))
+       {
+               header ('404 Not Found');
+?><!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<html><head>
+<title>404 Not Found</title>
+</head><body>
+<h1>Not Found</h1>
+<p>The requested file was not found in this instance.</p>
+<hr>
+<address>RackTables static content proxy</address>
+</body></html><?php
+               exit;
+       }
+       $extension = preg_replace ('/^.+\.([a-z]+)$/', '$1', $URI);
+       header ('Content-type: ' . $content_type[$extension]);
+       readfile ($file_path);
+}
+
 ?>
index e054f715ad6ac0f391d8ea797d56433bea5c5d34..1dadf093f5918976d7bfd063ba86b45173256f1c 100644 (file)
@@ -4657,12 +4657,14 @@ function printImageHREF ($tag, $title = '', $do_input = FALSE, $tabindex = 0)
        echo getImageHREF ($tag, $title, $do_input, $tabindex);
 }
 
+// this would be better called mkIMG(), make "IMG" HTML element
 function getImageHREF ($tag, $title = '', $do_input = FALSE, $tabindex = 0)
 {
        global $image;
        if (!isset ($image[$tag]))
                $tag = 'error';
        $img = $image[$tag];
+       $img['path'] = TSURI ($img['path']);
        if ($do_input == TRUE)
                return
                        "<input type=image name=submit class=icon " .
index 86ab3ddb7d5aa74d72390dbb4386e0ca4dd449fc..857e30b907b6a9667440d507562c6dd6b9e2aacb 100644 (file)
@@ -1,8 +1,22 @@
 <?php
 ob_start();
 try {
-require 'inc/interface.php';
 require 'inc/init.php';
+if (array_key_exists ('module', $_REQUEST))
+{
+       switch ($_REQUEST['module'])
+       {
+       case 'tsuri':
+               genericAssertion ('uri', 'string');
+               proxyStaticURI ($_REQUEST['uri']);
+               break;
+       default:
+               throw new InvalidRequestArgException ('module', $_REQUEST['module']);
+       }
+       exit;
+}
+
+require 'inc/interface.php';
 prepareNavigation();
 // no ctx override is necessary
 fixContext();