| 142 | }); |
| 143 | |
| 144 | const setupFeaturesMiddleware = app => app.use(function(req, res, next) { |
| 145 | // TODO: Share these defaults with run-tests.js |
| 146 | let features; |
| 147 | req.features = (features = { |
| 148 | freeOnly: false |
| 149 | }); |
| 150 | |
| 151 | if ((req.headers.host === 'brainpop.codecombat.com') || (req.session.featureMode === 'brain-pop')) { |
| 152 | features.freeOnly = true; |
| 153 | features.campaignSlugs = ['dungeon']; |
| 154 | features.playViewsOnly = true; |
| 155 | features.noAuth = true; |
| 156 | features.brainPop = true; |
| 157 | features.noAds = true; |
| 158 | } |
| 159 | |
| 160 | if (/(cn\.codecombat\.com|koudashijie|aojiarui)/.test(req.get('host')) || (req.session.featureMode === 'china')) { |
| 161 | features.china = true; |
| 162 | features.freeOnly = true; |
| 163 | features.noAds = true; |
| 164 | } |
| 165 | |
| 166 | if (config.chinaInfra) { |
| 167 | features.chinaInfra = true; |
| 168 | } |
| 169 | |
| 170 | return next(); |
| 171 | }); |
| 172 | |
| 173 | // When config.TRACE_ROUTES is set, this logs a stack trace every time an endpoint sends a response. |
| 174 | // It's great for finding where a mystery endpoint is! |