1010var config = require ( '../config' ) ;
1111var basket = require ( './' ) ;
1212
13- var express = require ( 'express ' ) ;
13+ const cors = require ( 'cors ' ) ;
1414var 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
1940function 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