|  | @@ -1,6 +1,6 @@
 | 
	
		
			
				|  |  |  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'!
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -23,7 +23,7 @@ initialize
 | 
	
		
			
				|  |  |  	path := self require: 'path'.
 | 
	
		
			
				|  |  |  	http := self require: 'http'.
 | 
	
		
			
				|  |  |  	fs := self require: 'fs'.
 | 
	
		
			
				|  |  | -	sys := self require: 'sys'.
 | 
	
		
			
				|  |  | +	util := self require: 'util'.
 | 
	
		
			
				|  |  |  	url := self require: 'url'
 | 
	
		
			
				|  |  |  ! !
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -48,9 +48,14 @@ respondNotFoundTo: aResponse
 | 
	
		
			
				|  |  |  !
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  handleRequest: aRequest respondTo: aResponse
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	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
 | 
	
	
		
			
				|  | @@ -64,15 +69,32 @@ handleGETRequest: 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
 | 
	
	
		
			
				|  | @@ -102,8 +124,9 @@ respondInternalErrorTo: aResponse
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  respondOKTo: 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'!
 |