123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- var parseurl = require( './parse-url' ),
- serve = require( './serve' ),
- servehandler = require( './serve-handler' ),
- helpers = require( './helpers' ),
- application = require( './application' ),
- url = require( 'url' );
- function HandleParsableRequest( request, response ) {
- var parsedRequest = parseurl.Process( url.parse(request.url).pathname );
-
-
-
-
-
-
- var parsedReferer = request.headers.referer ? parseurl.Process( url.parse(request.headers.referer).pathname ) : undefined;
- if ( ( request.url[ request.url.length - 1 ] != "/" ) && ( parsedRequest[ 'private_path' ] == undefined ) && ( url.parse( request.url ).search == undefined ||
- ( parsedReferer && parsedReferer[ 'instance' ] != undefined ) ) ) {
-
- var browserIsIE8 = ( request.headers['user-agent'] ) && ( request.headers['user-agent'].indexOf("MSIE 8.0" ) > -1 );
- var urlIsUnsupportedPage = ( request.url.indexOf("/web/unsupported.html") !== -1 );
- var refererIsUnsupportedPage = ( request.headers.referer && ( request.headers.referer.indexOf( "/web/unsupported.html" ) !== -1 ) );
- if ( browserIsIE8 && !( urlIsUnsupportedPage || refererIsUnsupportedPage ) ) {
- serve.Redirect( "/web/unsupported.html", response );
- return true;
- }
- else if ( ( parsedRequest[ 'instance' ] == undefined ) && ( request.headers['accept'].indexOf( "text/html" ) == -1 ) ) {
- return servehandler.Component( request, response, helpers.JoinPath( global.applicationRoot, parsedRequest[ 'public_path' ], parsedRequest[ 'application' ] ) );
- }
- else if ( parsedRequest[ 'instance' ] == undefined && request.headers['accept'].indexOf( "text/html" ) != -1 && helpers.IsFile( helpers.JoinPath( global.applicationRoot, request.url ) ) ) {
- return servehandler.File( request, response, helpers.JoinPath( global.applicationRoot, request.url ) );
- }
- else {
- serve.Redirect( request.url + "/", response );
- return true;
- }
- }
- else if ( ( parsedRequest[ 'instance' ] == undefined ) && ( parsedRequest[ 'private_path' ] == undefined ) ) {
- if ( request.url != "/" ) {
-
- if ( helpers.IsDirectory( helpers.JoinPath( global.applicationRoot + request.url )) || parsedRequest['application'] != undefined ) {
-
-
- var queryString = url.parse( request.url ).search;
- if ( queryString == undefined ) {
- serve.Redirect( request.url + helpers.GenerateInstanceID( ), response );
- return true;
- }
- else {
-
- serve.Redirect( helpers.JoinPath( url.parse( request.url ).pathname, helpers.GenerateInstanceID( ), queryString.replace( /\/$/, '' ) ), response );
- return true;
- }
- }
- }
- else if ( isDefaultApp( request.url ) ) {
-
- serve.Redirect( request.url + helpers.GenerateInstanceID( ), response );
- return true;
- } else {
- return false;
- }
-
- }
- else {
- return application.Serve( request, response, parsedRequest );
- }
- }
- function isDefaultApp ( requestURL ) {
- if ( helpers.IsFile( helpers.JoinPath( global.applicationRoot, "/index.vwf.yaml" ) )
- || helpers.IsFile( helpers.JoinPath( process.cwd(), "/index.vwf.yaml" ) ) ) {
- return true;
- }
-
- return false;
- }
- function HandleProxyRequest( request, response ) {
- var updatedURL = url.parse( request.url ).pathname;
- var segments = helpers.GenerateSegments( updatedURL );
- if ( ( segments.length > 0 ) && ( segments[ 0 ] == "proxy" ) ) {
- if ( servehandler.File( request, response, helpers.JoinPath( global.vwfRoot + "/support/", updatedURL ) ) ) {
- return true;
- }
- if ( servehandler.Component( request, response, helpers.JoinPath( global.vwfRoot + "/support/", updatedURL ) ) ) {
- return true;
- }
- }
- return false;
- }
- function HandleFileRequest( request, response ) {
- var updatedURL = url.parse( request.url ).pathname;
- var segments = helpers.GenerateSegments( updatedURL );
- if ( segments.length == 0 ) {
- updatedURL = "/index.html";
- }
- return servehandler.File( request, response, helpers.JoinPath( global.applicationRoot, updatedURL ) );
- }
- function HandleWebAppRequest(request, response) {
- var updatedURL = url.parse(request.url).pathname;
- var address = request.headers.host;
- var res = false;
- switch (updatedURL) {
- case '/app':
- response.writeHead(200, { 'content-type': 'text/html' });
- console.log(global.instances);
- for (var prop in global.instances) {
- response.write("<a href=http://" + address + prop + ">" + prop + "</a>" + "<br>");
- }
- response.end();
- res = true;
- break;
- case '/allinstances.json':
- response.writeHead(200, {"Content-Type": "application/json"});
- var obj = {};
- console.log(global.instances);
- for (var prop in global.instances) {
-
- obj[prop] = {
- "instance":address + prop,
- "clients": Object.keys(global.instances[prop].clients).length
- };
-
- }
- var json = JSON.stringify(obj);
- response.end(json);
- res = true;
- break;
- default:
- break;
- }
- return res;
- }
- function Serve( request, response ) {
- var handledRequest = HandleParsableRequest( request, response );
- if ( ! ( handledRequest ) ) {
- handledRequest = HandleProxyRequest( request, response );
- }
- if ( ! ( handledRequest ) ) {
- handledRequest = HandleFileRequest( request, response );
- }
- if ( ! ( handledRequest ) ) {
- handledRequest = HandleWebAppRequest( request, response );
- }
- if ( ! ( handledRequest ) ) {
- global.log("404 : " + url.parse( request.url ).pathname )
- serve._404( response, "404.html" );
- }
- }
- exports.Serve = Serve;
|