diff --git a/viewer/templates/browse.html b/viewer/templates/browse.html
index eebe1ae..33ada3c 100644
--- a/viewer/templates/browse.html
+++ b/viewer/templates/browse.html
@@ -17,7 +17,9 @@
- {{ file.0 }}
+
+ {{ file.0 }}
+
{% endfor %}
diff --git a/viewer/urls.py b/viewer/urls.py
index c6bf29a..2b2acb8 100644
--- a/viewer/urls.py
+++ b/viewer/urls.py
@@ -5,4 +5,5 @@ from . import views
urlpatterns = [
path('', views.index, name='index'),
path('//', views.browse, name='browse'),
+ path('///', views.file, name='file')
]
diff --git a/viewer/views.py b/viewer/views.py
index ae250e2..98c7d8c 100644
--- a/viewer/views.py
+++ b/viewer/views.py
@@ -37,3 +37,24 @@ def browse(request, directory_id):
)
}
return render(request, 'message.html', context, status=500)
+
+
+def file(request, directory_id, file):
+ dir = get_object_or_404(ServedDirectory, id=directory_id)
+ if os.path.isdir(dir.path):
+ path = os.path.join(dir.path, file)
+ if os.path.exists(path):
+ return FileResponse(open(path, 'rb'))
+ else:
+ context = {
+ 'title': 'Invalid File',
+ 'message': 'The file requested from this directory was not found on the server.'
+ }
+ return render(request, 'message.html', context, status=500)
+ context = {
+ 'title': 'Invalid Directory',
+ 'message': 'The path this server directory points to {}.'.format(
+ 'exists, but is not a directory' if os.path.exists(dir.path) else 'does not exist'
+ )
+ }
+ return render(request, 'message.html', context, status=500)