Fixing some bugs in the geoip and language detection stuff.

This commit is contained in:
Nick Winter 2015-07-31 14:32:32 -07:00
parent 1bfef7c4ff
commit fc0a6513f3
2 changed files with 5 additions and 3 deletions

View file

@ -202,7 +202,7 @@ module.exports.makeNewUser = makeNewUser = (req) ->
user.set 'testGroupNumber', Math.floor(Math.random() * 256) # also in app/core/auth
lang = languages.languageCodeFromAcceptedLanguages req.acceptedLanguages
user.set 'preferredLanguage', lang if lang[...2] isnt 'en'
user.set 'lastIP', req.connection.remoteAddress
user.set 'lastIP', (req.headers['x-forwarded-for'] or req.connection.remoteAddress)?.split(' ')[0]
user.set 'chinaVersion', true if req.chinaVersion
log.info "making new user #{user.get('_id')} with language #{user.get('preferredLanguage')} of #{req.acceptedLanguages} and chinaVersion #{req.chinaVersion} on #{if config.tokyo then 'Tokyo' else 'US'} server and lastIP #{req.connection.remoteAddress}."
user

View file

@ -80,12 +80,14 @@ setupPassportMiddleware = (app) ->
setupChinaRedirectMiddleware = (app) ->
shouldRedirectToChinaVersion = (req) ->
speaksChinese = req.acceptedLanguages[0]?.indexOf('zh') isnt -1
firstLanguage = req.acceptedLanguages[0]
speaksChinese = firstLanguage and firstLanguage.indexOf('zh') isnt -1
unless config.tokyo
ip = req.headers['x-forwarded-for'] or req.connection.remoteAddress
ip = ip?.split(' ')[0] # If there are two IP addresses, say because of CloudFlare, we just take the first.
geo = geoip.lookup(ip)
if speaksChinese or geo?.country is "CN"
log.info("Should we redirect to Tokyo server? speaksChinese: #{speaksChinese}, acceptedLanguages: #{req.acceptedLanguages[0]}, ip: #{ip}, geo: #{geo} -- so redirecting? #{geo?.country is 'CN' and speaksChinese}")
log.info("Should we redirect to Tokyo server? speaksChinese: #{speaksChinese}, firstLanguage: #{firstLanguage}, ip: #{ip}, geo: #{geo} -- so redirecting? #{geo?.country is 'CN' and speaksChinese}")
return geo?.country is "CN" and speaksChinese
else
log.info("We are on Tokyo server. speaksChinese: #{speaksChinese}, acceptedLanguages: #{req.acceptedLanguages[0]}")