| 
														
															@@ -1,6 +1,6 @@ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 Object subclass: #FileServer 
														 | 
														
														 | 
														
															 Object subclass: #FileServer 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	instanceVariableNames: 'path http fs url port basePath sys' 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	category: 'FileServer'! 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	instanceVariableNames: 'path http fs url port basePath util' 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	package: 'FileServer'! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 !FileServer methodsFor: 'accessing'! 
														 | 
														
														 | 
														
															 !FileServer methodsFor: 'accessing'! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -23,7 +23,7 @@ initialize 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	path := self require: 'path'. 
														 | 
														
														 | 
														
															 	path := self require: 'path'. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	http := self require: 'http'. 
														 | 
														
														 | 
														
															 	http := self require: 'http'. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	fs := self require: 'fs'. 
														 | 
														
														 | 
														
															 	fs := self require: 'fs'. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	sys := self require: 'sys'. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	util := self require: 'util'. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	url := self require: 'url' 
														 | 
														
														 | 
														
															 	url := self require: 'url' 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ! ! 
														 | 
														
														 | 
														
															 ! ! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -48,9 +48,14 @@ respondNotFoundTo: aResponse 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ! 
														 | 
														
														 | 
														
															 ! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 handleRequest: aRequest respondTo: aResponse 
														 | 
														
														 | 
														
															 handleRequest: aRequest respondTo: aResponse 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	aRequest method = 'PUT' 
														 | 
														
														 | 
														
															 	aRequest method = 'PUT' 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		ifTrue: [self handlePUTRequest: aRequest respondTo: aResponse] 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		ifFalse: [self handleGETRequest: aRequest respondTo: aResponse] 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		ifTrue: [self handlePUTRequest: aRequest respondTo: aResponse]. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	aRequest method = 'GET' 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		ifTrue:[self handleGETRequest: aRequest respondTo: aResponse]. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	aRequest method = 'OPTIONS' 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		ifTrue:[self handleOPTIONSRequest: aRequest respondTo: aResponse] 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ! 
														 | 
														
														 | 
														
															 ! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 handleGETRequest: aRequest respondTo: aResponse 
														 | 
														
														 | 
														
															 handleGETRequest: aRequest respondTo: aResponse 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -64,15 +69,32 @@ handleGETRequest: aRequest respondTo: aResponse 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ! 
														 | 
														
														 | 
														
															 ! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 handlePUTRequest: aRequest respondTo: aResponse 
														 | 
														
														 | 
														
															 handlePUTRequest: aRequest respondTo: aResponse 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	| stream | 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	stream := fs createWriteStream: '.', aRequest url. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	|stream | 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	stream := fs createWriteStream: '.' , aRequest url. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        aRequest setEncoding: 'utf8'. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+        < 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		aRequest.on("data", function (chunk) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			stream.write(chunk); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		aRequest.on("end", function () { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			stream.end(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			aResponse.writeHead(200, "OK", { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			'Content-Type': 'text/plain', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			'Access-Control-Allow-Origin': '*' 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+       			}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+       			aResponse.end(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	        }) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	> 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	aRequest setEncoding: 'utf8'. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	aRequest on: #data do: [:data | stream write: data]. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	aRequest on: #end do: [ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		stream end. 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		self respondOKTo: aResponse] 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+handleOPTIONSRequest: aRequest respondTo: aResponse 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	aResponse writeHead: 200 options: #{'Access-Control-Allow-Origin' -> '*'. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					'Access-Control-Allow-Methods' -> 'GET, PUT, POST, DELETE, OPTIONS'. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					'Access-Control-Allow-Headers' -> 'Content-Type, Accept'. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					'Content-Length' -> 0. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					'Access-Control-Max-Age' -> 10}. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	aResponse end 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ! 
														 | 
														
														 | 
														
															 ! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 respondFileNamed: aFilename to: aResponse 
														 | 
														
														 | 
														
															 respondFileNamed: aFilename to: aResponse 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -102,8 +124,9 @@ respondInternalErrorTo: aResponse 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 respondOKTo: aResponse 
														 | 
														
														 | 
														
															 respondOKTo: aResponse 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	aResponse  
														 | 
														
														 | 
														
															 	aResponse  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		writeHead: 200 options: #{'Content-Type' -> 'text/plain'}; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		end 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		writeHead: 200 options: #{'Content-Type' -> 'text/plain'. 'Access-Control-Allow-Origin' -> '*'}. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	aResponse end. 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 ! ! 
														 | 
														
														 | 
														
															 ! ! 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 !FileServer methodsFor: 'starting'! 
														 | 
														
														 | 
														
															 !FileServer methodsFor: 'starting'! 
														 |