deprecate getHandler in favor of createStaticHandler
diff --git a/example/example_server.dart b/example/example_server.dart
index 948c397..3331b64 100644
--- a/example/example_server.dart
+++ b/example/example_server.dart
@@ -11,7 +11,7 @@
'root of the project.');
}
var handler = const shelf.Pipeline().addMiddleware(shelf.logRequests())
- .addHandler(getHandler('example/files'));
+ .addHandler(createStaticHandler('example/files'));
io.serve(handler, 'localhost', 8080).then((server) {
print('Serving at http://${server.address.host}:${server.port}');
diff --git a/lib/shelf_static.dart b/lib/shelf_static.dart
index 18815ee..52cbc23 100644
--- a/lib/shelf_static.dart
+++ b/lib/shelf_static.dart
@@ -10,10 +10,13 @@
// directory listing
// default document
// sym links
-// mime type handling
// hidden files
-Handler getHandler(String fileSystemPath) {
+// TODO: {bool serveFilesOutsidePath}
+
+/// Creates a Shelf [Handler] that serves files from the provided
+/// [fileSystemPath].
+Handler createStaticHandler(String fileSystemPath) {
var rootDir = new Directory(fileSystemPath);
if (!rootDir.existsSync()) {
throw new ArgumentError('A directory corresponding to fileSystemPath '
@@ -42,9 +45,7 @@
// Do not serve a file outside of the original fileSystemPath
if (!p.isWithin(fileSystemPath, resolvedPath)) {
- // TODO(kevmoo) throw a real error here. Perhaps a new error type?
- throw 'Requested path ${request.url.path} resolved to $resolvedPath '
- 'is not under $fileSystemPath.';
+ return new Response.notFound('Not Found');
}
var fileStat = file.statSync();
@@ -69,3 +70,8 @@
return new Response.ok(file.openRead(), headers: headers);
};
}
+
+/// Use [createStaticHandler] instead.
+@deprecated
+Handler getHandler(String fileSystemPath) =>
+ createStaticHandler(fileSystemPath);
diff --git a/test/alternative_root_test.dart b/test/alternative_root_test.dart
index 3acf750..091de1a 100644
--- a/test/alternative_root_test.dart
+++ b/test/alternative_root_test.dart
@@ -31,7 +31,7 @@
test('access root file', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/static/root.txt', scriptName: '/static')
.then((response) {
@@ -44,7 +44,7 @@
test('access root file with space', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/static/files/with%20space.txt',
scriptName: '/static').then((response) {
@@ -57,7 +57,7 @@
test('access root file with unencoded space', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/static/files/with space.txt',
scriptName: '/static').then((response) {
@@ -68,7 +68,7 @@
test('access file under directory', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/static/files/test.txt',
scriptName: '/static').then((response) {
@@ -81,7 +81,7 @@
test('file not found', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/static/not_here.txt',
scriptName: '/static').then((response) {
diff --git a/test/basic_file_test.dart b/test/basic_file_test.dart
index 5da3771..6497889 100644
--- a/test/basic_file_test.dart
+++ b/test/basic_file_test.dart
@@ -35,7 +35,7 @@
test('access root file', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/root.txt').then((response) {
expect(response.statusCode, HttpStatus.OK);
@@ -47,7 +47,7 @@
test('access root file with space', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/files/with%20space.txt').then((response) {
expect(response.statusCode, HttpStatus.OK);
@@ -59,7 +59,7 @@
test('access root file with unencoded space', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/files/with space.txt').then((response) {
expect(response.statusCode, HttpStatus.FORBIDDEN);
@@ -69,7 +69,7 @@
test('access file under directory', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/files/test.txt').then((response) {
expect(response.statusCode, HttpStatus.OK);
@@ -81,7 +81,7 @@
test('file not found', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/not_here.txt').then((response) {
expect(response.statusCode, HttpStatus.NOT_FOUND);
@@ -91,7 +91,7 @@
test('last modified', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
var rootPath = p.join(d.defaultRoot, 'root.txt');
var modified = new File(rootPath).statSync().changed.toUtc();
@@ -105,7 +105,7 @@
group('if modified since', () {
test('same as last modified', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
var rootPath = p.join(d.defaultRoot, 'root.txt');
var modified = new File(rootPath).statSync().changed.toUtc();
@@ -124,7 +124,7 @@
test('before last modified', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
var rootPath = p.join(d.defaultRoot, 'root.txt');
var modified = new File(rootPath).statSync().changed.toUtc();
@@ -144,7 +144,7 @@
test('after last modified', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
var rootPath = p.join(d.defaultRoot, 'root.txt');
var modified = new File(rootPath).statSync().changed.toUtc();
@@ -166,7 +166,7 @@
group('content type', () {
test('root.txt should be text/plain', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/root.txt').then((response) {
expect(response.mimeType, 'text/plain');
@@ -176,7 +176,7 @@
test('index.html should be text/html', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/index.html').then((response) {
expect(response.mimeType, 'text/html');
@@ -186,7 +186,7 @@
test('random.unknown should be null', () {
schedule(() {
- var handler = getHandler(d.defaultRoot);
+ var handler = createStaticHandler(d.defaultRoot);
return makeRequest(handler, '/random.unknown').then((response) {
expect(response.mimeType, isNull);
@@ -200,4 +200,7 @@
// hosted via other path: success, fail
// no sym links
+
+ // sym link within provided root
+ // sym link outside provided root
}
diff --git a/test/get_handler_test.dart b/test/get_handler_test.dart
index 87b1205..b88b013 100644
--- a/test/get_handler_test.dart
+++ b/test/get_handler_test.dart
@@ -31,27 +31,27 @@
test('non-existent relative path', () {
schedule(() {
- expect(() => getHandler('random/relative'), throwsArgumentError);
+ expect(() => createStaticHandler('random/relative'), throwsArgumentError);
});
});
test('existing relative path', () {
schedule(() {
var existingRelative = p.relative(d.defaultRoot);
- expect(() => getHandler(existingRelative), returnsNormally);
+ expect(() => createStaticHandler(existingRelative), returnsNormally);
});
});
test('non-existent absolute path', () {
schedule(() {
var nonExistingAbsolute = p.join(d.defaultRoot, 'not_here');
- expect(() => getHandler(nonExistingAbsolute), throwsArgumentError);
+ expect(() => createStaticHandler(nonExistingAbsolute), throwsArgumentError);
});
});
test('existing absolute path', () {
schedule(() {
- expect(() => getHandler(d.defaultRoot), returnsNormally);
+ expect(() => createStaticHandler(d.defaultRoot), returnsNormally);
});
});
}
diff --git a/test/sample_test.dart b/test/sample_test.dart
index 114e509..fb229b1 100644
--- a/test/sample_test.dart
+++ b/test/sample_test.dart
@@ -62,7 +62,7 @@
}
Future<Response> _request(Request request) {
- var handler = getHandler(_samplePath);
+ var handler = createStaticHandler(_samplePath);
return syncFuture(() => handler(request));
}