<?
/*
-Provides access to preview images of book.
+Provides access to preview images of book. It is run with privileges and provides a reduced
+access wrapper around BookReaderImages.
Michael Ang <http://github.com/mangtronix>
along with BookReader. If not, see <http://www.gnu.org/licenses/>.
*/
-require_once('BookReaderMeta.inc.php');
require_once('BookReaderImages.inc.php');
function BRfatal($message) {
header("HTTP/1.0 404 Not Found");
+ header("Content-type: text/plain");
print $message;
- exit();
+ die(-1);
}
-$brm = new BookReaderMeta();
-$metadata = $brm->buildMetadata($_REQUEST['id'], $_REQUEST['itemPath'], $_REQUEST['bookId'], $_REQUEST['server']);
+$allowedPages = array('title','cover','preview');
+$allowedPattern = '#^(' . join('|', $allowedPages) . ')#';
-$knownPages = array('title','cover','preview');
$page = $_REQUEST['page'];
-if (! in_array($page, $knownPages) ) {
- BRfatal("Bad or no page specified");
-}
-// Index of image to return
-$imageIndex = null;
-
-switch ($page) {
- case 'title':
- if (! array_key_exists('titleIndex', $metadata)) {
- BRfatal("No title page asserted in book");
- }
- $imageIndex = $metadata['titleIndex'];
- break;
-
- case 'cover':
- if (! array_key_exists('coverIndices', $metadata)) {
- BRfatal("No cover asserted in book");
- }
- $imageIndex = $metadata['coverIndices'][0]; // $$$ TODO add support for other covers
- break;
+if (preg_match($allowedPattern, $page)) {
+ // Return image data
+ $bri = new BookReaderImages();
+
+ try {
+ $bri->serveLookupRequest($_REQUEST);
+ } catch (Exception $e) {
+ header("HTTP/1.0 404 Not Found");
+ header("Content-type: text/plain");
- case 'preview':
- // Preference is:
- // Title page
- // Cover page
- // Page 0
- if (array_key_exists('titleIndex', $metadata)) {
- $imageIndex = $metadata['titleIndex'];
- } else if (array_key_exists('coverIndices', $metadata)) {
- $imageIndex = $metadata['coverIndices'][0];
- } else {
- $imageIndex = 0;
- }
- break;
-
- default:
- // Shouldn't be possible
- BRfatal("Couldn't find page");
- break;
+ print "Error serving request:\n";
+ print " " . $e->getMessage() . "\n\n";
+ print "Debugging information:\n";
+ echo $e->getTraceAsString();
+ }
+} else {
+ BRfatal("Bad or no page specified");
}
-$leaf = $brm->leafForIndex($imageIndex, $metadata['leafNums']);
-
-$requestEnv = array(
- 'zip' => $metadata['zip'],
- 'file' => $brm->imageFilePath($leaf, $metadata['bookId'], $metadata['imageFormat']),
- 'ext' => 'jpg',
- 'reduce' => 2, // XXX
-);
-
-// Return image data - will check privs
-$bri = new BookReaderImages();
-$bri->serveRequest($requestEnv);
?>
\ No newline at end of file