Added redirection to Chinese servers based on location and language

This commit is contained in:
Michael Schmatz 2015-03-19 15:25:24 -04:00
parent 7f9301e8c6
commit cfa09a3239
3 changed files with 23 additions and 0 deletions

View file

@ -48,6 +48,7 @@
"connect": "2.7.x",
"express": "~3.0.6",
"express-useragent": "~0.0.9",
"geoip-lite": "^1.1.6",
"graceful-fs": "~2.0.1",
"gridfs-stream": "0.4.x",
"jsondiffpatch": "0.1.17",

View file

@ -3,6 +3,7 @@ config = {}
config.unittest = process.argv.indexOf('--unittest') > -1
config.tokyo = process.env.TOKYO or false
config.chinaDomain = "http://cn.codecombat.com"
config.port = process.env.COCO_PORT or process.env.COCO_NODE_PORT or 3000
config.ssl_port = process.env.COCO_SSL_PORT or process.env.COCO_SSL_NODE_PORT or 3443
config.cloudflare =

View file

@ -5,6 +5,7 @@ useragent = require 'express-useragent'
fs = require 'graceful-fs'
log = require 'winston'
compressible = require 'compressible'
geoip = require 'geoip-lite'
database = require './server/commons/database'
baseRoute = require './server/routes/base'
@ -77,6 +78,25 @@ setupPassportMiddleware = (app) ->
app.use(authentication.initialize())
app.use(authentication.session())
setupChinaRedirectMiddleware = (app) ->
isInChina = (req) ->
unless config.tokyo
ip = req.headers['x-forwarded-for'] || req.connection.remoteAddress
geo = geoip.lookup(ip)
if geo?.country isnt "CN" then return false
firstAcceptedLanguage = req.acceptedLanguages[0]
isChinese = firstAcceptedLanguage.indexOf? "zh"
return isChinese? and isChinese isnt -1
else
return true
app.use (req, res, next) ->
if isInChina req
res.writeHead 302, "Location": config.chinaDomain + req.url
res.end()
else
next()
setupOneSecondDelayMiddleware = (app) ->
if(config.slow_down)
app.use((req, res, next) -> setTimeout((-> next()), 1000))
@ -111,6 +131,7 @@ setupTrailingSlashRemovingMiddleware = (app) ->
next()
exports.setupMiddleware = (app) ->
setupChinaRedirectMiddleware app
setupMiddlewareToSendOldBrowserWarningWhenPlayersViewLevelDirectly app
setupExpressMiddleware app
setupPassportMiddleware app