added CORS support for com.daplie.goldilocks api calls
This is needed in order to support set up from the installer
This commit is contained in:
		
							parent
							
								
									e96ebfc1fc
								
							
						
					
					
						commit
						78c1fb344e
					
				| @ -19,6 +19,27 @@ module.exports.create = function (deps, conf) { | ||||
|   }); | ||||
|   */ | ||||
| 
 | ||||
|   function handleCors(req, res, methods) { | ||||
|     if (!methods) { | ||||
|       methods = ['GET', 'POST']; | ||||
|     } | ||||
|     if (!Array.isArray(methods)) { | ||||
|       methods = [ methods ]; | ||||
|     } | ||||
| 
 | ||||
|     res.setHeader('Access-Control-Allow-Origin', req.headers.origin || '*'); | ||||
|     res.setHeader('Access-Control-Allow-Methods', methods.join(', ')); | ||||
|     res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); | ||||
| 
 | ||||
|     if (req.method.toUpperCase() !== 'OPTIONS') { | ||||
|       return false; | ||||
|     } | ||||
| 
 | ||||
|     res.setHeader('Allow', methods.join(', ')); | ||||
|     res.end(); | ||||
|     return true; | ||||
|   } | ||||
| 
 | ||||
|   function isAuthorized(req, res, fn) { | ||||
|     var auth = jwt.decode((req.headers.authorization||'').replace(/^bearer\s+/i, '')); | ||||
|     if (!auth) { | ||||
| @ -42,11 +63,21 @@ module.exports.create = function (deps, conf) { | ||||
| 
 | ||||
|   return { | ||||
|     init: function (req, res) { | ||||
|       if (handleCors(req, res, 'POST')) { | ||||
|         return; | ||||
|       } | ||||
|       if (req.method !== 'POST') { | ||||
|         res.statusCode = 405; | ||||
|         res.setHeader('Content-Type', 'application/json'); | ||||
|         res.end(JSON.stringify({ error: { message: 'method '+req.method+' not allowed'}})); | ||||
|         return; | ||||
|       } | ||||
| 
 | ||||
|       jsonParser(req, res, function () { | ||||
| 
 | ||||
|       return deps.PromiseA.resolve().then(function () { | ||||
|         console.log('init POST body', req.body); | ||||
| 
 | ||||
|         console.log('req.body', req.body); | ||||
|         var auth = jwt.decode((req.headers.authorization||'').replace(/^bearer\s+/i, '')); | ||||
|         var token = jwt.decode(req.body.access_token); | ||||
|         var refresh = jwt.decode(req.body.refresh_token); | ||||
| @ -109,7 +140,8 @@ module.exports.create = function (deps, conf) { | ||||
|           res.setHeader('Content-Type', 'application/json;'); | ||||
|           res.end(JSON.stringify({ success: true })); | ||||
|         }); | ||||
|       }, function (err) { | ||||
|       }) | ||||
|       .catch(function (err) { | ||||
|         res.setHeader('Content-Type', 'application/json;'); | ||||
|         res.end(JSON.stringify({ error: { message: err.message, code: err.code, uri: err.uri } })); | ||||
|       }); | ||||
| @ -117,6 +149,9 @@ module.exports.create = function (deps, conf) { | ||||
|       }); | ||||
|     } | ||||
|   , tunnel: function (req, res) { | ||||
|       if (handleCors(req, res)) { | ||||
|         return; | ||||
|       } | ||||
|       isAuthorized(req, res, function () { | ||||
|         if ('POST' !== req.method) { | ||||
|           res.setHeader('Content-Type', 'application/json'); | ||||
| @ -144,6 +179,9 @@ module.exports.create = function (deps, conf) { | ||||
|       }); | ||||
|     } | ||||
|   , config: function (req, res) { | ||||
|       if (handleCors(req, res)) { | ||||
|         return; | ||||
|       } | ||||
|       isAuthorized(req, res, function () { | ||||
|         if ('POST' !== req.method) { | ||||
|           res.setHeader('Content-Type', 'application/json;'); | ||||
| @ -163,6 +201,9 @@ module.exports.create = function (deps, conf) { | ||||
|       }); | ||||
|     } | ||||
|   , request: function (req, res) { | ||||
|       if (handleCors(req, res, '*')) { | ||||
|         return; | ||||
|       } | ||||
|       isAuthorized(req, res, function () { | ||||
|       jsonParser(req, res, function () { | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user