コード例 #1
0
ファイル: server.api.js プロジェクト: rjz/jsdares
		getMiddleware: function() {
			return connect()
				.use('/get', connect.query())
				.use('/get/collection', this.getCollection.bind(this))
				.use('/get/collectionAndDaresAndInstances', this.getCollectionAndDaresAndInstances.bind(this))
				.use('/get/dare', this.getDare.bind(this))
				.use('/get/dareAndInstance', this.getDareAndInstance.bind(this))
				.use('/get/dareEdit', this.getDareEdit.bind(this))
				.use('/get/checkUsername', this.getCheckUsername.bind(this))
				.use('/get/checkEmail', this.getCheckEmail.bind(this))
				.use('/get/loginData', this.getLoginData.bind(this))
				.use('/get/daresAndInstancesAll', this.getDaresAndInstancesAll.bind(this))
				.use('/get/daresAndInstancesNewest', this.getDaresAndInstancesNewest.bind(this))
				.use('/get/daresAndInstancesByUserId', this.getDaresAndInstancesByUserId.bind(this))
				.use('/get/daresAndInstancesPlayed', this.getDaresAndInstancesPlayed.bind(this))
				.use('/get/userByUsername', this.getUserByUsername.bind(this))
				.use('/get/usersAll', this.getUsersAll.bind(this))
				.use('/post', connect.json())
				.use('/post/program', this.postProgram.bind(this))
				.use('/post/instance', this.postInstance.bind(this))
				.use('/post/dareCreate', this.postDareCreate.bind(this))
				.use('/post/dareEdit', this.postDareEdit.bind(this))
				.use('/post/register', this.postRegister.bind(this))
				.use('/post/login', this.postLogin.bind(this))
				.use('/post/logout', this.postLogout.bind(this));
		},
コード例 #2
0
ファイル: configure.js プロジェクト: KwakesProject/nodebook
module.exports = function(app) {
    app.engine('handlebars', exphbs.create({
        defaultLayout: 'main',
        layoutsDir: app.get('views') + '/layouts',
        partialsDir: [app.get('views') + '/partials'],
        helpers: {
            timeago: function(timestamp) {
                console.log(timestamp);
                return moment(timestamp).startOf('minute').fromNow();
            }
        }
    }).engine);
    app.set('view engine', 'handlebars');

    app.use(connect.logger('dev'));
    app.use(connect.bodyParser({
        uploadDir:path.join(__dirname, '../public/upload/temp')
    }));
    app.use(connect.json());
    app.use(connect.urlencoded());
    app.use(connect.methodOverride());
    app.use(connect.cookieParser('some-secret-value-here'));
    app.use(app.router);
    app.use('/public/', connect.static(path.join(__dirname, '../public')));

    if ('development' === app.get('env')) {
        app.use(connect.errorHandler());
    }

    routes.initialize(app);

    return app;
};
コード例 #3
0
ファイル: index.js プロジェクト: Manuras/manuras-old
/**
 * Sets up the correct connect middleware and setup a requesthandler to handle incoming request.
 * 
 * @param context
 * @param port
 */
function start(context, port) {

	var logger = log4js.getLogger('manuras');
	logger.info('Starting HTTP Server on Worker');
	
	var app = connect();
	
	logger.debug('Setting up middleware');
	
	app.use(connect.static(context.settings.paths.public))
		.use(connect.query())
		.use(connect.cookieParser())
		.use(connect.urlencoded())
		.use(connect.json())
	   	.use(requestHandler.handler(context))
		.use(errorHandler.handle());
	
	logger.debug('Creating Server');
	var server = http.createServer(app);
	
	logger.debug('Set Server for requestHandler. Start server.');
	requestHandler.setServer(server, function() {
		server.listen(port);
	});
}
コード例 #4
0
ファイル: server.js プロジェクト: vincentpeyrouse/sips-atos
app.configure(function () {
        
    app.set('port', process.env.PORT || 1337);
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'hbs');
    app.set('layout', 'layout');
    app.use(express.favicon());
    app.use(express.static(path.join(__dirname, 'config', 'logo')));
    app.use(connect.json());
    app.use(connect.urlencoded());
    app.use(express.methodOverride());

    app.use(app.router);

    app.use(function (req, res, next) {
        res.status(404);
        res.render('errors/404', { url: req.url });
    });

    // error-handling middleware
    app.use(function (err, req, res, next) {
        // we may use properties of the error object
        // here and next(err) appropriately, or if
        // we possibly recovered from the error, simply next().
        res.status(err.status || 500);
        res.render('errors/500', { error: err });
    });

});
コード例 #5
0
ファイル: scheduler.js プロジェクト: apendua/meteor-scheduler
module.exports = function (port) {
  "use strict";
  
  var scheduler = new Scheduler();
  
  var app = connect()
    .use(connect.query())
    .use(connect.urlencoded())
    .use(connect.json())
    .use(middleware.matchApi('/v1', scheduler.api(), { verbose: false }))
    .use(middleware.basicAuth())
    .use(middleware.apiCall());
  
  var server = http.createServer(app).listen(port);
  var connections = [];
  
  console.log('=> Scheduler running at: http://localhost:' + port + '/v1');
  
  server.on('close', function () {
    console.log('');
  });
  
  process.on('SIGINT', function () {
    server.close();
    scheduler.stop();
  });
  
  scheduler.start();
  
  return server;
};
コード例 #6
0
ファイル: application.js プロジェクト: hutia/hutia
	this.start = function(callback){
		// logging status
		_status = 'starting';
		
		// check settings and middle-wares
		this.get('favicon') && this.use(connect.favicon(this.get('favicon')));
		
		this.get('logger') && this.use(connect.logger(this.get('logger')));
		
		if (this.get('session')){
			this.use(connect.cookieParser());
			this.use(connect.cookieSession(this.get('session')));
		}
		
		this.use(connect.json());
		this.use(connect.urlencoded());
		
		for (var ext in engines) this.engine(ext, engines[ext]);
		
		this.use(connect.static(_root));
		
		// initialize database
		if (this.get('dbpath')) this.db = new DB(path.resolve(process.cwd(), this.get('dbpath')));
		
		// start listening
		_server.listen(_port, function(){
			_status = 'started';
			if ('function' === typeof callback) callback();
		});
	};
コード例 #7
0
ファイル: app.js プロジェクト: particlebanana/Content-Server
db.connect(function(err, adapters) {

  // Create an app instance
  app = recess();

  // Card Catalog Options
  app.set('connection', adapters.mongo);
  app.set('namespace', 'categories');
  app.set('adapters', adapters);

  // Middleware
  app.before(cors_middleware);
  app.before(hmac_middleware(adapters.mongo));
  app.before(connect.json());
  app.before(connect.urlencoded());

  // API Card
  app.card(api_v1_card);

  app.on('ready', function() {
    app.listen(process.env.PORT || 3000);
    console.log('Listening on port ' + (process.env.PORT || 3000));
  });

  bootstrap(adapters.mongo, function(err) {
    if(err) throw error(err);

    // Create the card catalog
    app.create();
  });
});
コード例 #8
0
module.exports = function(options) {
    var app = connect(),
        emitter = new events.EventEmitter();

    // optional parameters
    options = options || {};
    options.emitter = emitter;

    // proxy cross-origin requests
    app.use(proxy(options));

    // support POST JSON-encoded and URL-encoded queries
    app.use(connect.json());
    app.use(connect.urlencoded());

    // no-cache header
    app.use(nocache(options));

    // sessions require the cookie parser
    app.use(connect.cookieParser());

    // register requires session support
    app.use(connect.session({ secret: 'phonegap' }));

    // watch file system for changes and notify client
    app.use(autoreload(options));

    // handle /register requests
    app.use(register(options));

    // handle /zip requests
    app.use(zip(options));

    // inject JavaScript to refresh app or navigate home
    app.use(inject(options));

    // serve static assets
    app.use(mstatic(options));

    // serve cordova js if 404'd out from previous static server
    app.use(cordova(options));

    // serve cordova_plugin js if 404'd out from previous static server
    app.use(cordova_plugins(options));

    // serve plugins if 404'd out from previous static server
    app.use(plugins(options));

    // create request listener and attach event emitter interface
    var requestListener = function(req, res, next) {
        app.handle(req, res, next);
    };

    for(var property in emitter) {
        requestListener[property] = emitter[property];
    }

    return requestListener;
};
コード例 #9
0
ファイル: server.js プロジェクト: d-simon/interactlight
app.configure(function() {
    app.use(connect.json());
    app.use(express.logger('dev'));
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));

    app.use("/click", express.static(path.join(__dirname, 'app-click')));
    app.use("/", express.static(path.join(__dirname, 'app-command')));
});
コード例 #10
0
ファイル: index.js プロジェクト: coolaj86/served
  function createStaticServer(rootname) {
    var app
      , server
      , failed = false
      , somereq
      ;

   function useUserReq(req, res, next) {
      try {
        somereq(req, res, next);
      } catch(e) {
        if (!failed) {
          console.error("required '" + rootname  + "', but couldn't use it as a connect module");
          console.error(e);
          failed = true;
        }
        next();
      }
    }

    app = connect();

    try {
      somereq = require(rootname);

      if ('function' === typeof somereq) {
        app.use(useUserReq);
      } else {
        app.use(somereq);
      }

      console.log(rootname, "is a loadable module. I'm gonna load it!");
    } catch(e) {
      console.log(rootname, "is not a loadable module and that's okay.");
      // ignore
    }

    app
      .use(connect.static(rootname))
      .use(connect.directory(rootname))
      .use(createFileReceiver(rootname))
      .use('/version', function (req, res, next) {
          res.end(version);
        })
      .use(connect.json())
      .use(connect.urlencoded())
      .use(connect.multipart())
      .use(function (req, res) {
          console.log(req.body);
          res.end();
        })
      ;

    return app;
  }
コード例 #11
0
ファイル: server.js プロジェクト: casser/node-goofy
		start  		: function(){
			process.title = 'goofyd';
			var connect = require('connect');
			var app = connect();
			app.use(connect.logger('dev'))
			app.use(connect.query());
			app.use(connect.json());
			app.use(function(req, res, next){
				res.json = function(result){
					this.setHeader('Connection', 'keep-alive');
					this.setHeader('Transfer-Encoding', 'chunked');
					this.setHeader('Content-Type', 'application/json');
					this.end(JSON.stringify(Utils.simplify(result)));
				},
				res.success = function(result){
					this.json({
						status: 'success',
						result: result
					})
				}
				res.error  = function(result){
					var error = result;
					if(error instanceof Error){
						var err = {
							message		:error.message,
							code		:error.code
						};
						for(var i in error){
							if(i=='stack'){
								err.stack = error.stack.split('\n');
							}else
							if(typeof(error[i])!='function'){
								err[i] = Utils.simplify(error[i]);
							}
						}
						error = err;
					}
					this.json({
						status: 'error',
						result: error
					})
				}
				next()
			});

			for(var handler in Server.instance){
				if(handler!='constructor' && typeof(Server.instance[handler])==='function'){
					app.use('/'+handler,Server.instance[handler].bind(Server.instance));
				}
			}

			app.use(connect.static(__dirname+'/../../web'));
			app.listen(CONFIG.GOOFY_PORT);
		}
コード例 #12
0
exports.setup = function(app) {
  app.get('/subscribed',
          session.provider,
          getUserSubscriptions);
  app.post('/subscribed',
           connect.json(),
           session.provider,
           changeUserSubscriptions);
  app.get('/:channel/subscribers/:node',
          session.provider,
          getNodeSubscriptions);
};
コード例 #13
0
 topic: function () {
   union.createServer({
     buffer: false,
     before: [
       connect.urlencoded(),
       connect.json(),
       function (req, res) {
         res.end(JSON.stringify(req.body, true, 2));
       }
     ]
   }).listen(8082, this.callback);
 },
コード例 #14
0
function init(app) {
  // list 
  app.get("/drawings", allDrawings);
  
  // details
  app.get("/drawings/:id", showDrawing);
  app.get("/drawings/:id/json", showDrawingJSON);
  
  // edit 
  app.get("/drawings/:id/edit", editDrawing);
  app.post("/drawings/:id/edit", editDrawingSave);
  app.post("/drawings/:id/edit/saveImage", [connect.json()], editDrawingSaveImage);
}
コード例 #15
0
ファイル: cli.js プロジェクト: zaim/wander
function serve (dirs, port, log) {
  var app = connect();

  app.use(connect.json());
  app.use(watcher({ paths: dirs, log: log}));

  dirs.forEach(function (dir) {
    app.use(connect.static(dir));
  });

  app.use(connect.errorHandler());
  app.listen(port || PORT);
}
コード例 #16
0
ファイル: index.js プロジェクト: adamlofting/express-persona
module.exports = function(app, options) {
  options = options || {};

  var personaOpts = {};
  Object.keys(defaultOptions).forEach(function(key) {
    if (typeof options[key] === typeof defaultOptions[key]) {
      personaOpts[key] = options[key];
    } else {
      personaOpts[key] = defaultOptions[key];
    }
  });

  var verify = browseridVerify({
    url: personaOpts.verifierURI
  });

  app.post(personaOpts.verifyPath, connect.json(), connect.urlencoded(), personaOpts.middleware, function(req, res) {
    // If the body can't be parsed then we can't get the assertion
    if (!req.body) {
      personaOpts.verifyResponse("Server-side exception", req, res);
      return;
    }

    verify(req.body.assertion, personaOpts.audience, function(err, email, response) {
      if (err) {
        if (err instanceof Error) {
          err = err.message;
        }
        return personaOpts.verifyResponse(err, req, res);
      }

      if (response && response.status !== "okay") {
        return personaOpts.verifyResponse(response.reason, req, res, email);
      }

      if (req.session) {
        req.session[personaOpts.sessionKey] = email;
      }

      personaOpts.verifyResponse(null, req, res, email);
    });
  });

  app.post(personaOpts.logoutPath, personaOpts.middleware, function(req, res) {
    if (req.session) {
      req.session[personaOpts.sessionKey] = null;
    }

    personaOpts.logoutResponse(null, req, res);
  });
};
コード例 #17
0
ファイル: service.js プロジェクト: mszygenda/eduframework
Service.initializeHttpServer = function () {
  var self = this;

  this.httpServer = connect();
  this.httpServer.use(connect.cookieParser('keyboard cat'));
  this.httpServer.use(connect.session({ cookie: { maxAge: 60000 }}));
  this.httpServer.use(connect.json());
  this.httpServer.use(connect.urlencoded());
  this.httpServer.use(connect.multipart());

  this.httpServer.use(function (req, resp) {
    var requestHandler = Core.HttpEngine.createRequestHandler();
    requestHandler.handle(self, req, resp);
  });
};
コード例 #18
0
ファイル: server.js プロジェクト: oleq/benderjs
		bender.server.create = function() {
			var app = connect(),
				server = http.createServer( app );

			// enable connect's middleware
			app.use( connect.json() );
			app.use( connect.urlencoded() );

			// create middleware instances
			bender.middlewares.forEach( function( middleware ) {
				app.use( middleware( bender ) );
			} );

			// serve static files, e.g. client scripts and styles
			app.use( connect.static( path.resolve( __dirname, '../static/' ) ) );

			// serve 404 for unhandled requests
			app.use( function( req, res ) {
				res.writeHead( 404 );
				res.end( http.STATUS_CODES[ '404' ] );
			} );

			return server;
		};
コード例 #19
0
/* Copyright (c) 2010-2014 Richard Rodger, MIT License */
'use strict'

var Connect = require('connect')
var Seneca = require('../..')

var si = Seneca()
si.use('echo')

Connect()
  .use(Connect.logger())
  .use(Connect.json())
  .use(si.export('web'))
  .listen(3000)

  // curl -H "Content-Type:application/json" -d '{"a":1}' http://localhost:3000/echo
コード例 #20
0
var connect = require('connect');
var login = require('./login');

var app = connect();

app.use(connect.json()); // Parse JSON request body into `request.body`
app.use(connect.urlencoded()); // Parse form in request body into `request.body`
app.use(connect.cookieParser()); // Parse cookies in the request headers into `request.cookies`
app.use(connect.query()); // Parse query string into `request.query`

app.use('/', main);

function main(request, response, next) {
	switch (request.method) {
		case 'GET': get(request, response); break;
		case 'POST': post(request, response); break;
		case 'DELETE': del(request, response); break;
		case 'PUT': put(request, response); break;
	}
};

function get(request, response) {
	var cookies = request.cookies;
	console.log(cookies);
	if ('session_id' in cookies) {
		var sid = cookies['session_id'];
		if ( login.isLoggedIn(sid) ) {
			response.setHeader('Set-Cookie', 'session_id=' + sid);
			response.end(login.hello(sid));	
		} else {
			response.end("Invalid session_id! Please login again\n");
コード例 #21
0
ファイル: index.js プロジェクト: bencevans/jobukyu
var app = connect();



// Use the logger if environment config allows
//
if (config.log) {
    app.use(connect.logger('dev'));
}



// Append connect middleware
//
app.use(connect.query());
app.use(connect.json());



// Defines support for res.json in controller
// actions
//
// @req   {Object}    The http request object
// @res   {Object}    The http response object
// @next  {Function}  The function to execute once finished
//
app.use(function (req,res, next) {
    res.json = function (statusCodeOrBody, body) {
        var status = 200;
        if (typeof statusCodeOrBody === 'number') {
            status = statusCodeOrBody;
コード例 #22
0
ファイル: durable.js プロジェクト: daviddeng/rules
        that.run = function (basePath, databases, start) {
            var port = 5000;
            var fileServer = new stat.Server(__dirname);
            app.use(connect.json());
            basePath = basePath || '';
            if (basePath !== '' && basePath.indexOf('/') !== 0) {
                basePath = '/' + basePath;
            }
            if (!databases) {
                databases = [ '/tmp/redis.sock' ];
            }

            bind(databases);
            if (start) {
                start(that);
            }

            app.get('/durableVisual.js', function (request, response) {
                request.addListener('end',function () {
                    fileServer.serveFile('/durableVisual.js', 200, {}, request, response);
                }).resume();
            });

            app.get(basePath + '/:rules/:sid/admin.html', function (request, response) {
                request.addListener('end',function () {
                    fileServer.serveFile('/admin.html', 200, {}, request, response);
                }).resume();
            });

            app.get(basePath + '/:rules/:sid', function (request, response) {
                response.contentType = 'application/json; charset=utf-8';
                getState(request.params.rules,
                    request.params.sid,
                    function (err, result) {
                        if (err) {
                            response.send({ error: err }, 500);
                        }
                        else {
                            response.send(result);
                        }
                    });
            });

            app.post(basePath + "/:rules/:sid", function (request, response) {
                response.contentType = "application/json; charset=utf-8";
                var message = request.body;
                var rules = request.params.rules;
                message.sid = request.params.sid;
                that.post(rules, message, function (err) {
                    if (err)
                        response.send({ error: err }, 500);
                    else
                        response.send();
                });
            });

            app.patch(basePath + '/:rules/:sid', function (request, response) {
                response.contentType = 'application/json; charset=utf-8';
                var document = request.body;
                var rules = request.params.rules;
                document.id = request.params.sid;
                patchSession(rules, document, function (err) {
                    if (err) {
                        response.send({ error: err }, 500);
                    } else {
                        response.send();
                    }
                });
            });

            app.get(basePath + '/:rules', function (request, response) {
                response.contentType = 'application/json; charset=utf-8';
                var rules = request.params.rules;
                getRuleset(rules, function (err, result) {
                    if (err) {
                        response.send({ error: err }, 500);
                    }
                    else {
                        response.send(result);
                    }
                });
            });

            setTimeout(dispatchRules, 100, 1);
            setTimeout(dispatchTimers, 100, 1);
               
            app.listen(port, function () {
                console.log('Listening on ' + port);
            });
        };
コード例 #23
0
ファイル: workspace.js プロジェクト: Comenius/orion.client
module.exports = function(options) {
	var workspaceRoot = options.root;
	var fileRoot = options.fileRoot;
	var workspaceDir = options.workspaceDir;
	if (!workspaceRoot) { throw 'options.root path required'; }

	var workspaceId = 'orionode';
	var workspaceName = 'Orionode Workspace';

	return connect()
	.use(connect.json())
	.use(resource(workspaceRoot, {
		GET: function(req, res, next, rest) {
			if (rest === '') {
				// http://wiki.eclipse.org/Orion/Server_API/Workspace_API#Getting_the_list_of_available_workspaces
				fileUtil.withStats(workspaceDir, function(err, stats) {
					if (err) {
						throw err;
					}
					var ws = JSON.stringify({
						Id: 'anonymous',
						Name: 'anonymous',
						UserName: '******',
						Workspaces: [{
							Id: workspaceId,
							LastModified: stats.mtime.getTime(),
							Location: api.join(workspaceRoot, workspaceId),
							Name: workspaceName
						}]
					});
					res.setHeader('Content-Type', 'application/json');
					res.setHeader('Content-Length', ws.length);
					res.end(ws);
				});
			} else if (rest === workspaceId) {
				// http://wiki.eclipse.org/Orion/Server_API/Workspace_API#Getting_workspace_metadata
				var parentFileLocation = fileRoot;
				fileUtil.getChildren(workspaceDir, parentFileLocation, function(children) {
					// TODO this is basically a File object with 1 more field. Should unify the JSON between workspace.js and file.js
					var ws = JSON.stringify({
						Directory: true,
						Id: workspaceId,
						Name: workspaceName,
						Location: api.join(workspaceRoot, workspaceId),
						ChildrenLocation: api.join(workspaceRoot, workspaceId), // ?? // api.join(fileRoot, workspaceId, '?depth=1'),
						Children: children
	//					Projects: [
	//						// TODO projects -- does anything care about these?
	//					]
					});
					res.setHeader('Content-Type', 'application/json');
					res.setHeader('Content-Length', ws.length);
					res.end(ws);
				});
			} else {
				res.statusCode = 400;
				res.end(util.format('workspace not found: %s', rest));
			}
		},
		POST: function(req, res, next, rest) {
			var err;
			if (rest === '') {
				// Create workspace. unsupported
				err = {Message: 'Unsupported operation: create workspace'};
				res.statusCode = 403;
				res.end(JSON.stringify(err));
			} else if (rest === workspaceId) {
				// Create project
				var projectName = req.headers.slug || (req.body && req.body.Name);
				if (!projectName) {
					err = {Message: 'Missing "Slug" header or "Name" parameter'};
					res.statusCode = 400;
					res.setHeader('Content-Type', 'application/json');
					res.end(JSON.stringify(err));
				} else {
					fs.mkdir(fileUtil.safeFilePath(workspaceDir, projectName), parseInt('0755', 8), function(error) {
						if (error) {
							err = {Message: error};
							res.statusCode = 400;
							res.end(JSON.stringify(error));
						} else {
							var newProject = JSON.stringify({
								ContentLocation: api.join(fileRoot, projectName), // Important
								Id: projectName,
								Location: api.join(workspaceRoot, 'project', projectName) // not important
								
							});
							res.statusCode = 201;
							res.setHeader('Content-Type', 'application/json');
							res.setHeader('Content-Length', newProject.length);
							res.end(newProject);
						}
					});
				}
			}
		},
		PUT: function(req, res, next, rest) {
			// Would 501 be more appropriate?
			writeError(403, res);
		},
		DELETE: function(req, res, next, rest) {
			// Would 501 be more appropriate?
			writeError(403, res);
		}
	}));
};
コード例 #24
0
ファイル: file.js プロジェクト: Rekv/orion.client
module.exports = function(options) {
	var fileRoot = options.root;
	var workspaceDir = options.workspaceDir;
	if (!fileRoot) { throw 'options.root is required'; }
	if (!workspaceDir) { throw 'options.workspaceDir is required'; }

	var writeFileMetadata = function(req /*, args.. */) {
		var args = Array.prototype.slice.call(arguments, 1);
		var originalFileUrl = fileUtil.getContextPath(req) + fileRoot;
		return fileUtil.writeFileMetadata.apply(null, [originalFileUrl].concat(args));
	};
	var getSafeFilePath = fileUtil.safeFilePath.bind(null, workspaceDir);

	function writeFileContents(res, rest, filepath, stats, etag) {
		if (stats.isDirectory()) {
			//shouldn't happen
			writeError(500, res, "Expected a file not a directory");
		} else {
			var stream = fs.createReadStream(filepath);
			res.setHeader('Content-Length', stats.size);
			res.setHeader('ETag', etag);
			res.setHeader('Accept-Patch', 'application/json-patch; charset=UTF-8');
			stream.pipe(res);
			stream.on('error', function(e) {
				res.writeHead(500, e.toString());
				res.end();
			});
			stream.on('end', function() {
				res.statusCode = 200;
				res.end();
			});
		}
	}

	function handleDiff(req, res, rest, body) {
		try {
			body = typeof body === "string" ? JSON.parse(body) : body;
		} catch (e) {
			writeError(500, res, e.toString());
		}
		var diffs = body.diff || [];
		var contents = body.contents;
		var patchPath = getSafeFilePath(rest);
		fs.exists(patchPath, function(destExists) {
			if (destExists) {
				fs.readFile(patchPath,function (error, data) {
					if (error) {
						writeError(500, res, error);
						return;
					}
				
					var newContents = data.toString();
					var buffer = {
						_text: [newContents], 
						replaceText: function (text, start, end) {
							var offset = 0, chunk = 0, length;
							while (chunk<this._text.length) {
								length = this._text[chunk].length; 
								if (start <= offset + length) { break; }
								offset += length;
								chunk++;
							}
							var firstOffset = offset;
							var firstChunk = chunk;
							while (chunk<this._text.length) {
								length = this._text[chunk].length; 
								if (end <= offset + length) { break; }
								offset += length;
								chunk++;
							}
							var lastOffset = offset;
							var lastChunk = chunk;
							var firstText = this._text[firstChunk];
							var lastText = this._text[lastChunk];
							var beforeText = firstText.substring(0, start - firstOffset);
							var afterText = lastText.substring(end - lastOffset);
							var params = [firstChunk, lastChunk - firstChunk + 1];
							if (beforeText) { params.push(beforeText); }
							if (text) { params.push(text); }
							if (afterText) { params.push(afterText); }
							Array.prototype.splice.apply(this._text, params);
							if (this._text.length === 0) { this._text = [""]; }
						},
						getText: function() {
							return this._text.join("");									
						}
					};
					for (var i=0; i<diffs.length; i++) {
						var change = diffs[i];
						buffer.replaceText(change.text, change.start, change.end);
					}
					newContents = buffer.getText();

					var failed = false;
					if (contents) {
						if (newContents !== contents) {
							failed = true;
							newContents = contents;
						}
					}
					fs.writeFile(patchPath, newContents, function(err) {
						if (err) {
							writeError(500, res, error);
							return;
						}
						if (failed) {
							write(406, res, 'Bad file diffs. Please paste this content in a bug report: \u00A0\u00A0 \t' + JSON.stringify(body));
							return;
						}
						fs.stat(patchPath, function(error, stats) {
							if (err) {
								writeError(500, res, error);
								return;
							}
							var etag = new ETag(newContents);
							writeFileMetadata(req, res, rest, patchPath, stats, etag.getValue() /*the new ETag*/);
						});
					});
					
				});
			} else {
				writeError(500, res, 'Destination does not exist.');
			}
		});
	}

	function writeDiffContents(req, res, next, rest) {
		var requestBody = new Buffer(0);
		req.on('error', function(e) {
			writeError(500, res, e.toString());
		});
		// Tolerate both json and text/plain here for compatibility with Java server and client code
		if (req.headers['content-type'] === "application/json" && req.body) {
			handleDiff(req, res, rest, req.body);
			return;
		}
		// Buffer it
		req.on('data', function(data) {
			requestBody = Buffer.concat([requestBody,data]);
		});
		req.on('end', function(event) {
			handleDiff(req, res, rest, requestBody.toString());
		});
	}

	/*
	 * Handler begins here
	 */
	return connect()
	.use(connect.json())
	.use(resource(fileRoot, {
		GET: function(req, res, next, rest) {
			if (writeEmptyFilePathError(res, rest)) {
				return;
			}
			var filepath = getSafeFilePath(rest);
			fileUtil.withStatsAndETag(filepath, function(error, stats, etag) {
				if (error && error.code === 'ENOENT') {
					writeError(404, res, 'File not found: ' + rest);
				} else if (error) {
					writeError(500, res, error);
				} else if (stats.isFile() && getParam(req, 'parts') !== 'meta') {
					// GET file contents
					writeFileContents(res, rest, filepath, stats, etag);
				} else {
					// TODO handle depth > 1 for directories
					var includeChildren = (stats.isDirectory() && getParam(req, 'depth') === '1');
					writeFileMetadata(req, res, rest, filepath, stats, etag, includeChildren);
				}
			});
		},
		PUT: function(req, res, next, rest) {
			if (writeEmptyFilePathError(res, rest)) {
				return;
			}
			var filepath = getSafeFilePath(rest);
			if (getParam(req, 'parts') === 'meta') {
				// TODO implement put of file attributes
				res.statusCode = 501;
				return;
			} else {
				// The ETag for filepath's current contents is computed asynchronously -- so buffer the request body
				// to memory, then write it into the real file once ETag is available.
				var requestBody = new Buffer(0);
				var requestBodyETag = new ETag(req);
				req.on('data', function(data) {
					requestBody = Buffer.concat([requestBody, data]);
				});
				req.on('error', function(e) {
					console.warn(e);
				});
				req.on('end', function(e) {
					var ifMatchHeader = req.headers['if-match'];
					if(!ifMatchHeader){//If etag is not defined, we are writing blob. In this case the file does not exist yet so we need create it.
						fs.writeFile(filepath, requestBody, function(error) {
							if (error) {
								writeError(500, res, error);
								return;
							}
							fs.stat(filepath, function(error, stats) {
								writeFileMetadata(req, res, rest, filepath, stats, requestBodyETag.getValue() /*the new ETag*/);
							});
						});
					} else {
						fileUtil.withStatsAndETag(filepath, function(error, stats, etag) {
							if (error && error.code === 'ENOENT') {
								res.statusCode = 404;
								res.end();
							} else if (ifMatchHeader && ifMatchHeader !== etag) {
								res.statusCode = 412;
								res.end();
							} else {
								// write buffer into file
								fs.writeFile(filepath, requestBody, function(error) {
									if (error) {
										writeError(500, res, error);
										return;
									}
									writeFileMetadata(req, res, rest, filepath, stats, requestBodyETag.getValue() /*the new ETag*/);
								});
							}
						});
					}
				});
			}
		},
		POST: function(req, res, next, rest) {
			if (writeEmptyFilePathError(res, rest)) {
				return;
			}
			var diffPatch = req.headers['x-http-method-override'];
			if (diffPatch === "PATCH") {
				writeDiffContents(req, res, next, rest);
				return;
			}
			var name = req.headers.slug || (req.body && req.body.Name);
			if (!name) {
				write(400, res, 'Missing Slug header or Name property');
				return;
			}

			var wwwpath = api.join(rest, encodeURIComponent(name)),
			    filepath = getSafeFilePath(path.join(rest, name));

			fileUtil.handleFilePOST(workspaceDir, fileRoot, req, res, wwwpath, filepath);
		},
		DELETE: function(req, res, next, rest) {
			if (writeEmptyFilePathError(res, rest)) {
				return;
			}
			var filepath = getSafeFilePath(rest);
			fileUtil.withStatsAndETag(filepath, function(error, stats, etag) {
				var ifMatchHeader = req.headers['if-match'];
				if (error && error.code === 'ENOENT') {
					res.statusCode = 204;
					res.end();
				} else if (ifMatchHeader && ifMatchHeader !== etag) {
					write(412, res);
				} else {
					var callback = function(error) {
						if (error) {
							writeError(500, res, error);
							return;
						}
						res.statusCode = 204;
						res.end();
					};
					if (stats.isDirectory()) {
						fileUtil.rumRuff(filepath, callback);
					} else {
						fs.unlink(filepath, callback);
					}
				}
			});
		}
	}));
};
コード例 #25
0
ファイル: dmx-web.js プロジェクト: eleventigers/node-dmx
	app.configure(function() {
		app.use(connect.json())
	});
コード例 #26
0
ファイル: init.js プロジェクト: nandinisa/test
"use strict";

var express = require('express');
var path = require('path');

var connect = require('connect');

var init = express();

init.use(connect.json());
init.use(connect.urlencoded());
//init.use(cors({ origin: "*" }));



//CORS middleware
var allowCrossDomain = function (req, res, next) {
    res.header('Access-Control-Allow-Origin', 'null');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Content-Type');
    res.header('Access-Control-Allow-Credentials', true);
    
    next();
}

init.use(allowCrossDomain);
//init.use(express.cookieParser());

// Set routing handler to serve all static files
// Set the directory public to serve static files
init.use(express.static(path.join(__dirname, 'client')));
コード例 #27
0
(function () {
  'use strict';

  var connect = require('connect')
    , path = require('path')
    , passport = require('passport')
    , User = require('./user')
    , ExampleStrategy = require('./passport-example').Strategy
    , app = connect()
    , server
    , port = process.argv[2] || 3002
    , oauthConfig = require('./oauth-config')
    , pConf = oauthConfig.provider
    , lConf = oauthConfig.consumer
      // for Ward Steward
    , opts = require('./oauth-consumer-config')
    ;

  if (!connect.router) {
    connect.router = require('connect_router');
  }

  // Passport session setup.
  //   To support persistent login sessions, Passport needs to be able to
  //   serialize users into and deserialize users out of the session.  Typically,
  //   this will be as simple as storing the user ID when serializing, and finding
  //   the user by ID when deserializing.  However, since this example does not
  //   have a database of user records, the complete Facebook profile is serialized
  //   and deserialized.
  passport.serializeUser(function(user, done) {
    //Users.create(user);
    done(null, user);
  });

  passport.deserializeUser(function(obj, done) {
    var user = obj // Users.read(obj)
      ;

    done(null, user);
  });

  passport.use(new ExampleStrategy({
      // see https://github.com/jaredhanson/oauth2orize/blob/master/examples/all-grants/db/clients.js
      clientID: opts.clientId
    , clientSecret: opts.clientSecret
    , callbackURL: lConf.protocol + "://" + lConf.host + "/auth/example-oauth2orize/callback"
    }
  , function (accessToken, refreshToken, profile, done) {
      User.findOrCreate({ profile: profile }, function (err, user) {
        user.accessToken = accessToken;
        return done(err, user);
      });
    }
  ));

  function route(rest) {
    rest.get('/externalapi/account', function (req, res, next) {
      console.log('[using accessToken]', req.user.accessToken);
      if (false) { next(); }
      var request = require('request')
        , options = {
            url: pConf.protocol + '://' + pConf.host + '/api/exampleauth/me'
          , headers: {
              'Authorization': 'Bearer ' + req.user.accessToken
            }
          }
        ;

      function callback(error, response, body) {
        if (!error && response.statusCode === 200) {
          res.end(body);
        } else {
          res.end('error: \n' + body);
        }
      }

      request(options, callback);
    });
    /*
    */
    rest.get('/auth/example-oauth2orize', passport.authenticate('exampleauth', { scope: ['email'] }));
    rest.get('/auth/example-oauth2orize/callback'
      //passport.authenticate('facebook', { successRedirect: '/close.html?accessToken=blar',
      //                                    failureRedirect: '/close.html?error=foo' }));
    , passport.authenticate('exampleauth', { failureRedirect: '/close.html?error=foo' })
    );
    rest.get('/auth/example-oauth2orize/callback'
    , function (req, res) {
        console.log('req.session');
        console.log(req.session);
        var url = '/success.html' // + '?type=fb'
          /*
          + '&accessToken=' + req.session.passport.user.accessToken
          + '&email=' + req.session.passport.user.profile.email
          + '&link=' + req.session.passport.user.profile.profileUrl
          */
          ;

        console.log(url);
        res.statusCode = 302;
        res.setHeader('Location', url);
        res.end('hello');
        // This will pass through to the static module
        //req.url = url;
        //next();
      }
    );
    rest.post('/auth/example-oauth2orize/callback', function (req, res/*, next*/) {
      console.log('req.user', req.user);
      res.end('thanks for playing');
    });
  }

  app
    .use(connect.query())
    .use(connect.json())
    .use(connect.urlencoded())
    .use(connect.compress())
    .use(connect.cookieParser())
    .use(connect.session({ secret: 'keyboard mouse' }))
    .use(passport.initialize())
    .use(passport.session())
    .use(connect.router(route))
    .use(connect.static(path.join(__dirname, 'public')))
    ;

  module.exports = app;

  if (require.main === module) {
    server = app.listen(port, function () {
      console.log('Listening on', server.address());
    });
  }
}());
コード例 #28
0
ファイル: app.js プロジェクト: karenpeng/pinata
var app = connect();

app.use('/public', connect.static(PUBLIC_DIR));
app.use(function (req, res, next) {
  res.req = req;
  next();
});

//parse http get params
app.use(connect.query());

//parse http post body
app.use(connect.urlencoded());
app.use(connect.json({
  strict: true
}));

//parse cookie
app.use(connect.cookieParser());

//session
app.use(connect.session({
  key: config.sessionCookie,
  secret: config.sessionSecret,
  cookie: {
    path: '/',
    httpOnly: true
  },
}));
コード例 #29
0
module.exports = function(options) {
    var app = connect(),
        emitter = new events.EventEmitter();

    // optional parameters
    options = options || {};
    options.emitter = emitter;

    // global array to contain files to update for delta updates
    options.filesToUpdate = [];

    // proxy cross-origin requests
    app.use(proxy(options));

    // support POST JSON-encoded and URL-encoded queries
    app.use(connect.json());
    app.use(connect.urlencoded());

    // no-cache header
    app.use(nocache(options));

    // sessions require the cookie parser
    app.use(connect.cookieParser());

    // register requires session support
    app.use(connect.session({ secret: 'phonegap' }));

    // watch file system for changes and notify client
    app.use(autoreload(options));

    // handle delta updates for content sync
    app.use(update(options));

    // handle /register requests
    app.use(register(options));

    // handle /zip requests
    app.use(zip(options));

    // inject JavaScript to refresh app or navigate home
    app.use(inject(options));

    // support desktop browser
    if (options.browser)
        app.use(browser(options));

    // serve static assets
    app.use(mstatic(options));

    // serve cordova js if 404'd out from previous static server
    app.use(cordova(options));

    // serve cordova_plugin js if 404'd out from previous static server
    app.use(cordova_plugins(options));

    // serve plugins if 404'd out from previous static server
    app.use(plugins(options));

    // allow client to specify custom middleware
    if (options.customMiddleware) {
        if (typeof options.customMiddleware === "function") {
            app.use(options.customMiddleware(options));
        } else if (Array.isArray(options.customMiddleware)) {
            options.customMiddleware.forEach(function(custom) {
                if (typeof custom === "function") {
                    app.use(custom(options));
                }
            });
        }
    }

    // create request listener and attach event emitter interface
    var requestListener = function(req, res, next) {
        app.handle(req, res, next);
    };

    for(var property in emitter) {
        requestListener[property] = emitter[property];
    }

    return requestListener;
};
コード例 #30
0
ファイル: app.js プロジェクト: andreajparker/crypton
var app = process.app = module.exports = express();
app.log = require('./lib/log');
app.config = require('./lib/config');
app.datastore = require('./lib/storage');

app.redisSession = redisSession;

app.log('info', 'configuring server');

app.SERVER_VERSION = version;

app.use(connect.urlencoded());

app.use(connect.json({
  limit: '20mb'
}));

app.use(cors({
  credentials: true,
  origin: function (origin, callback) {
    callback(null, true);
  }
}));

if (app.config.securityHeaders) {
  try {
    var luscaObj = app.config.securityHeaders;
    // A naive validation check:
    if ((typeof luscaObj.csp == 'object') && (typeof luscaObj.xframe == "string")
                                          && (typeof luscaObj.csrf == 'boolean')) {