aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Phorkie/File.php18
-rw-r--r--src/Phorkie/Repository.php13
-rw-r--r--www/.htaccess1
-rw-r--r--www/raw.php21
4 files changed, 53 insertions, 0 deletions
diff --git a/src/Phorkie/File.php b/src/Phorkie/File.php
index f12d837..14a7bbf 100644
--- a/src/Phorkie/File.php
+++ b/src/Phorkie/File.php
@@ -17,6 +17,15 @@ class File
*/
public $repo;
+ public static $arMimeTypeMap = array(
+ 'css' => 'text/css',
+ 'htm' => 'text/html',
+ 'html' => 'text/html',
+ 'js' => 'application/javascript',
+ 'php' => 'text/x-php',
+ 'txt' => 'text/plain',
+ );
+
public function __construct($path, Repository $repo)
{
$this->path = $path;
@@ -48,6 +57,15 @@ class File
return file_get_contents($this->path);
}
+ public function getMimeType()
+ {
+ $type = $this->getType();
+ if (!isset(static::$arMimeTypeMap[$type])) {
+ return null;
+ }
+ return static::$arMimeTypeMap[$type];
+ }
+
/**
* Get a link to the file
*
diff --git a/src/Phorkie/Repository.php b/src/Phorkie/Repository.php
index ae01f6c..ebd420f 100644
--- a/src/Phorkie/Repository.php
+++ b/src/Phorkie/Repository.php
@@ -57,6 +57,19 @@ class Repository
return $arFiles;
}
+ public function getFileByName($name)
+ {
+ $base = basename($name);
+ if ($base != $name) {
+ throw new Exception('No directories supported for now');
+ }
+ $path = $this->repoDir . '/' . $base;
+ if (!is_readable($path)) {
+ throw new Exception_Input('File does not exist');
+ }
+ return new File($path, $this);
+ }
+
public function getDescription()
{
return file_get_contents($this->repoDir . '/.git/description');
diff --git a/www/.htaccess b/www/.htaccess
index f41e1bf..a57b34d 100644
--- a/www/.htaccess
+++ b/www/.htaccess
@@ -3,3 +3,4 @@ RewriteBase /
#RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^([0-9]+)$ /display.php?id=$1
+RewriteRule ^([0-9]+)/raw/(.+)$ /raw.php?id=$1&file=$2
diff --git a/www/raw.php b/www/raw.php
new file mode 100644
index 0000000..9128770
--- /dev/null
+++ b/www/raw.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Displays a file
+ */
+namespace Phorkie;
+require_once 'www-header.php';
+$repo = new Repository();
+$repo->loadFromRequest();
+
+if (!isset($_GET['file']) || $_GET['file'] == '') {
+ throw new Exception_Input('File name missing');
+}
+
+$file = $repo->getFileByName($_GET['file']);
+$mimetype = $file->getMimeType();
+if ($mimetype === null) {
+ $mimetype = 'text/plain';
+}
+header('Content-Type: ' . $mimetype);
+readfile($file->path);
+?>