alpha-one
Version:
ideas about recurring tasks in Web- and Backend-Application building
181 lines (138 loc) • 7.37 kB
text/coffeescript
############################################################################################################
# ERROR = require 'coffeenode-stacktrace'
# njs_util = require 'util'
njs_path = require 'path'
# njs_fs = require 'fs'
#...........................................................................................................
TYPES = require 'coffeenode-types'
TRM = require 'coffeenode-trm'
rpr = TRM.rpr.bind TRM
badge = 'using-connect'
log = TRM.get_logger 'plain', badge
info = TRM.get_logger 'info', badge
whisper = TRM.get_logger 'whisper', badge
alert = TRM.get_logger 'alert', badge
debug = TRM.get_logger 'debug', badge
warn = TRM.get_logger 'warn', badge
help = TRM.get_logger 'help', badge
echo = TRM.echo.bind TRM
# rainbow = TRM.rainbow.bind TRM
# suspend = require 'coffeenode-suspend'
# step = suspend.step
# after = suspend.after
# eventually = suspend.eventually
# immediately = suspend.immediately
# every = suspend.every
# TEXT = require 'coffeenode-text'
#...........................................................................................................
### https://github.com/goodeggs/teacup ###
teacup = require 'teacup'
#...........................................................................................................
templates = require './templates'
connect = require 'connect'
authom = require 'authom'
TRM.dir authom
#-----------------------------------------------------------------------------------------------------------
write_ok_html_header = ( request, response ) ->
status_code = 200
#.........................................................................................................
headers =
'Content-Type': 'text/html'
'Connection': 'keep-alive'
'Transfer-Encoding': 'chunked'
#.........................................................................................................
return response.writeHead status_code, headers
#-----------------------------------------------------------------------------------------------------------
respond = ( request, response, next ) ->
write_ok_html_header request, response
response.write """<link rel='shortcut icon' href='/public/favicon.ico?v=#{1 * new Date()}'>"""
response.write "<div>RQ##{request_count}</div>"
response.end "<div>hello world</div>"
#-----------------------------------------------------------------------------------------------------------
request_counter_middleware = ( request, response, next ) ->
request[ 'count' ] = ( request_count += 1 )
next()
#-----------------------------------------------------------------------------------------------------------
request_count = 0
#-----------------------------------------------------------------------------------------------------------
login = ( user, password, handler ) ->
debug "authenticating #{user}:#{password}"
handler null, true
#-----------------------------------------------------------------------------------------------------------
server_options =
'host': '127.0.0.1'
'port': 3000
#-----------------------------------------------------------------------------------------------------------
connect_options =
'logger':
'format': 'short' # ':remote-addr - :method :url HTTP/:http-version :status :res[content-length] - :response-time ms'
'format': 'tiny' # ':method :url :status :res[content-length] - :response-time ms'
'format': 'default' # ':remote-addr - - [:date] ":method :url HTTP/:http-version" :status :res[content-length] ":referrer" ":user-agent"'
'format': 'mingkwai' # own format
'format': 'dev' # concise output colored by response status for development use
# possible to define logger format:
connect.logger.format 'mingkwai', ':method :url :status :res[content-length] - :response-time ms'
#-----------------------------------------------------------------------------------------------------------
app = connect()
app.use request_counter_middleware
app.use connect.logger connect_options[ 'logger' ][ 'format' ]
# app.use connect.basicAuth login
### https://github.com/wdavidw/node-connect-coffee-script ###
### http://learnboost.github.io/stylus/docs/middleware.html ###
# stylus.middleware(options)
# Options
# Return Connect middleware with the given options.
# `serve` Serve the stylus files from `dest` [true]
# `force` Always re-compile
# `src` Source directory used to find .styl files
# `dest` Destination directory used to output .css files
# when undefined defaults to `src`.
# `compile` Custom compile function, accepting the arguments
# `(str, path)`.
# `compress` Whether the output .css files should be compressed
# `firebug` Emits debug infos in the generated css that can
# be used by the FireStylus Firebug plugin
# `linenos` Emits comments in the generated css indicating
# the corresponding stylus line
############################################################################################################
# create servers for the services you'll be using
# authom.createServer {} # facebook credentials
# authom.createServer {} # github credentials
# authom.createServer {} # google credentials
# authom.createServer {} # twitter credentials
# ... et cetera
service_credential_records = [
service: "github"
id: "7e38d12b740a339b2d31"
secret: "116e41bd4cd160b7fae2fe8cc79c136a884928c3"
]
for service_credentials in service_credential_records
authom.createServer service_credentials
# called when a user is authenticated on any service
authom.on 'auth', ( request, response, data ) ->
debug 'auth', data
# called when an error occurs during authentication
authom.on 'error', ( request, response, data ) ->
debug 'error', data
# TRM.dir app
app.use '/auth/:service', authom.app
############################################################################################################
# TEST MIDDLEWARE (see http://howtonode.org/connect-it)
test_middleware = ->
debug "setting up test_middleware"
return ( request, response, next ) ->
# TRM.dir 'test request', request
# TRM.dir 'test response', response
debug 'test'
write_ok_html_header request, response
response.write 'just a test'
response.end()
# next()
# Calling the handler gives us a place to handle startup matters:
app.use '/test', test_middleware()
############################################################################################################
app.use '/public', connect.static njs_path.join __dirname, 'public'
# app.use connect.static 'public'
app.use respond
app.listen server_options[ 'port' ]
log TRM.green "listening to #{server_options[ 'host' ]}:#{server_options[ 'port' ]}"