Browse Source

Add --fallback-page switch for issue #417

Run like this:
./bin/server --fallback-page index.html
All 404 pages will be 200 using index.html instead.
Jerome Baum 12 years ago
parent
commit
070be353e6
1 changed files with 13 additions and 2 deletions
  1. 13 2
      server/FileServer.st

+ 13 - 2
server/FileServer.st

@@ -1,6 +1,6 @@
 Smalltalk current createPackage: 'FileServer'!
 Object subclass: #FileServer
-	instanceVariableNames: 'path http fs url port basePath util username password'
+	instanceVariableNames: 'path http fs url port basePath util username password fallbackPage'
 	package: 'FileServer'!
 
 !FileServer methodsFor: 'accessing'!
@@ -13,6 +13,14 @@ basePath: aString
 	basePath := aString
 !
 
+fallbackPage
+	^fallbackPage
+!
+
+fallbackPage: aString
+	fallbackPage := aString
+!
+
 password: aPassword
 	password := aPassword.
 !
@@ -55,6 +63,7 @@ initialize
 	port := self class defaultPort.
 	username := nil.
 	password := nil.
+	fallbackPage := nil.
 ! !
 
 !FileServer methodsFor: 'private'!
@@ -202,6 +211,7 @@ respondNotCreatedTo: aResponse
 !
 
 respondNotFoundTo: aResponse
+	self fallbackPage isNil ifFalse: [^self respondFileNamed: self fallbackPage to: aResponse].
 	aResponse 
 		writeHead: 404 options: #{'Content-Type' -> 'text/plain'};
 		write: '404 Not found';
@@ -237,7 +247,8 @@ commandLineActions
 	^#{
 		'-p' -> [:fileServer :value | fileServer port: value].
 		'--username' -> [:fileServer :value | fileServer username: value].
-		'--password' -> [:fileServer :value | fileServer password: value]
+		'--password' -> [:fileServer :value | fileServer password: value].
+		'--fallback-page' -> [:fileServer :value | fileServer fallbackPage: value]
 	}
 !