mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-26 05:32:05 +00:00
57 lines
1.9 KiB
CoffeeScript
57 lines
1.9 KiB
CoffeeScript
# The server module...
|
|
|
|
connect = require 'connect'
|
|
|
|
Model = require './model'
|
|
createDb = require './db'
|
|
|
|
rest = require './rest'
|
|
socketio = require './socketio'
|
|
browserChannel = require './browserchannel'
|
|
|
|
# Create an HTTP server and attach whatever frontends are specified in the options.
|
|
#
|
|
# The model will be created based on options if it is not specified.
|
|
module.exports = create = (options, model = createModel(options)) ->
|
|
attach(connect(), options, model)
|
|
|
|
# Create an OT document model attached to a database.
|
|
create.createModel = createModel = (options) ->
|
|
dbOptions = options?.db
|
|
|
|
db = createDb dbOptions
|
|
new Model db, options
|
|
|
|
# Attach the OT server frontends to the provided Node HTTP server. Use this if you
|
|
# already have a http.Server or https.Server and want to make some URL paths do OT.
|
|
#
|
|
# The options object specifies options for everything. If settings are missing,
|
|
# defaults will be provided.
|
|
#
|
|
# Set options.rest == null or options.socketio == null to turn off that frontend.
|
|
create.attach = attach = (server, options, model = createModel(options)) ->
|
|
options ?= {}
|
|
options.staticpath ?= '/share'
|
|
|
|
server.model = model
|
|
server.on 'close', -> model.closeDb()
|
|
|
|
server.use options.staticpath, connect.static("#{__dirname}/../../webclient") if options.staticpath != null
|
|
|
|
createAgent = require('./useragent') model, options
|
|
|
|
# The client frontend doesn't get access to the model at all, to make sure security stuff is
|
|
# done properly.
|
|
server.use rest(createAgent, options.rest) if options.rest != null
|
|
|
|
# Socketio frontend is now disabled by default.
|
|
socketio.attach(server, createAgent, options.socketio or {}) if options.socketio?
|
|
|
|
if options.browserChannel != null
|
|
options.browserChannel ?= {}
|
|
#options.browserChannel.base ?= '/sjs'
|
|
options.browserChannel.server = server
|
|
server.use browserChannel(createAgent, options.browserChannel)
|
|
|
|
server
|
|
|