Skip to content
This repository was archived by the owner on Apr 3, 2019. It is now read-only.

Commit 929113b

Browse files
author
Shane Tomlinson
authored
Merge pull request #76 from mozilla/75-cors-oauth-fake-server r=@rfk
feat(fake-server): Have the fake server serve CORS requests, handle OAuth tokens.
2 parents 8df02b0 + 046476c commit 929113b

File tree

2 files changed

+35
-10
lines changed

2 files changed

+35
-10
lines changed

bin/fake-basket-server.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ var url = require('url');
1313
var config = require('../lib/config');
1414
var logger = require('../lib/logging')('server');
1515

16-
var app = require('../lib/basket/fake.js');
16+
const app = require('../lib/basket/fake');
1717

1818
function listen(app) {
1919
var apiUrl = url.parse(config.get('basket.api_url'));
2020
app.listen(apiUrl.port, apiUrl.hostname);
21-
logger.info('FxA Fake Basket Server listening on port', apiUrl.port);
21+
logger.info(`FxA Fake Basket Server listening on port ${apiUrl.port}`);
2222
return true;
2323
}
2424

25-
listen(app());
25+
listen(app(logger));

lib/basket/fake.js

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,32 @@
1010
var config = require('../config');
1111
var basket = require('./');
1212

13-
var express = require('express');
13+
const cors = require('cors');
1414
var bodyParser = require('body-parser');
15+
var express = require('express');
16+
17+
const verifyOAuthToken = require('../verify')();
1518

16-
var API_KEY = config.get('basket.api_key');
19+
const API_KEY = config.get('basket.api_key');
20+
const CORS_ORIGIN = config.get('cors_origin');
1721

22+
function verifyAuthorization (logger) {
23+
return (req, res, next) => {
24+
const apiKey = req.headers['x-api-key'];
25+
const authHeader = req.headers.authorization;
26+
27+
if (apiKey) {
28+
logger.info('fake.authorization.api_key');
29+
verifyApiKey(req, res, next);
30+
} else if (authHeader) {
31+
logger.info('fake.authorization.oauth');
32+
verifyOAuthToken(req, res, next);
33+
} else {
34+
res.status(400).json(basket.errorResponse('unauthorized', basket.errors.AUTH_ERROR));
35+
}
36+
37+
};
38+
}
1839

1940
function verifyApiKey (req, res, next) {
2041
var key = req.headers['x-api-key'];
@@ -34,7 +55,7 @@ function extend(target, source) {
3455
}
3556

3657

37-
module.exports = function initApp() {
58+
module.exports = function initApp(logger) {
3859

3960
var userData = {};
4061
var tokenToUser = {};
@@ -46,10 +67,14 @@ module.exports = function initApp() {
4667

4768
var app = express();
4869
app.use(bodyParser.urlencoded());
49-
app.use(verifyApiKey);
70+
app.use(cors({
71+
origin: CORS_ORIGIN
72+
}));
73+
74+
app.use(verifyAuthorization(logger));
5075

5176
app.get('/lookup-user/', function (req, res) {
52-
var email = req.query.email;
77+
const email = (res.locals.creds && res.locals.creds.email) || req.query.email;
5378
if (! userData[email]) {
5479
res.status(404).json(basket.errorResponse('unknown-email', basket.errors.UNKNOWN_EMAIL));
5580
return;
@@ -61,7 +86,7 @@ module.exports = function initApp() {
6186

6287
app.post('/subscribe/', function (req, res) {
6388
var params = req.body;
64-
var email = params.email;
89+
const email = (res.locals.creds && res.locals.creds.email) || params.email;
6590
var user = userData[email];
6691
// Basket accepts either an explicit language choice,
6792
// or an "accept_lang" preference string from which it
@@ -74,7 +99,7 @@ module.exports = function initApp() {
7499
// elaborate accept-lang parsing, just use first one.
75100
lang = lang.split(/[\s\-;,]/)[0];
76101
} else {
77-
lang = '';
102+
lang = 'en-US';
78103
}
79104
}
80105
var token;

0 commit comments

Comments
 (0)