support env RESTRICT_DOMAIN regex pattern to restrict domain list
This commit is contained in:
		| @@ -12,3 +12,4 @@ COPY . /usr/src/app | ||||
|  | ||||
| CMD [ "yarn", "start" ] | ||||
| EXPOSE 7777 | ||||
| EXPOSE 9229 | ||||
|   | ||||
| @@ -5,6 +5,7 @@ services: | ||||
|     env_file: .env | ||||
|     ports: | ||||
|      - "7777:7777" | ||||
|      - "9229:9229" | ||||
|     volumes: | ||||
|       - ".:/usr/src/app" | ||||
|     command: "yarn run start:dev" | ||||
|   | ||||
| @@ -24,6 +24,7 @@ | ||||
|     "dotenv": "^4.0.0", | ||||
|     "express": "^4.14.0", | ||||
|     "express-session": "^1.15.6", | ||||
|     "jsonwebtoken": "^8.1.0", | ||||
|     "nodemon": "^1.11.0", | ||||
|     "passport": "^0.4.0", | ||||
|     "passport-google-oauth20": "^1.0.0", | ||||
| @@ -50,7 +51,7 @@ | ||||
|   }, | ||||
|   "scripts": { | ||||
|     "start": "node server.js", | ||||
|     "start:dev": "nodemon -V --ignore 'data/*' --ignore 'Profile' --ignore 'static/application.min.js'  server.js < /dev/null", | ||||
|     "start:dev": "nodemon -V --ignore 'data/*' --ignore 'Profile' --ignore 'static/application.min.js' --inspect=0.0.0.0:9229 server.js < /dev/null", | ||||
|     "test": "mocha -r should spec/*" | ||||
|   } | ||||
| } | ||||
|   | ||||
							
								
								
									
										26
									
								
								server.js
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								server.js
									
									
									
									
									
								
							| @@ -12,6 +12,7 @@ var query = require('connect-query'); | ||||
| var express = require('express') | ||||
| var connectEnsureLogin = require('connect-ensure-login'); | ||||
| var session = require('express-session') | ||||
| var jwt = require('jsonwebtoken') | ||||
|  | ||||
| require('dotenv').config(); | ||||
| var DocumentHandler = require('./lib/document_handler'); | ||||
| @@ -23,6 +24,7 @@ config.host = process.env.HOST || config.host || 'localhost'; | ||||
| config.secret = process.env.SECRET || '43rndsafdsakf;djsafkdsarf'; | ||||
| config.scheme = process.env.SCHEME || config.scheme || 'https' | ||||
| config.origin = config.scheme + '://' + config.host + ":" +  config.port + "/"; | ||||
| config.restrict_domain = process.env.RESTRICT_DOMAIN | ||||
|  | ||||
| // Set up the loggergg | ||||
| if (config.logging) { | ||||
| @@ -122,25 +124,33 @@ if (config.rateLimits) { | ||||
|  | ||||
| var GoogleStrategy = require('passport-google-oauth20').Strategy; | ||||
|  | ||||
| var OAUTH_SCOPE = ['profile'] | ||||
| var OAUTH_SCOPE = ['profile', 'email', 'openid'] | ||||
|  | ||||
| passport.serializeUser(function(user, cb) { | ||||
|   winston.info('serialize', user) | ||||
|   cb(null, user); | ||||
| }); | ||||
|  | ||||
| passport.deserializeUser(function(obj, cb) { | ||||
|   winston.info('deserialize', obj) | ||||
|   cb(null, obj); | ||||
| }); | ||||
|  | ||||
| passport.use(new GoogleStrategy({ | ||||
|     clientID: process.env.GOOGLE_CLIENT_ID, | ||||
|     clientSecret: process.env.GOOGLE_CLIENT_SECRET, | ||||
|     callbackURL:  config.origin  + 'auth/google/callback' | ||||
|     callbackURL:  config.origin  + 'auth/google/callback', | ||||
|   }, | ||||
|   function(accessToken, refreshToken, profile, cb) { | ||||
|     winston.info(profile); | ||||
|   //function(accessToken, refreshToken, profile, cb) { | ||||
|   function( accessToken, refreshToken, params, profile, cb){ | ||||
|     if (! params.id_token ){ | ||||
|       winston.error("no id_token in response") | ||||
|       return | ||||
|     } | ||||
|     var jwtObject = jwt.decode(params.id_token) | ||||
|     if(! (jwtObject && jwtObject.hd && matchDomain(jwtObject.hd)) ){ | ||||
|       // domain doesn't validate | ||||
|       winston.info("domain does not validate") | ||||
|       return cb('Your domain is not permitted') | ||||
|     } | ||||
|     return cb(null, profile); | ||||
|   } | ||||
| )); | ||||
| @@ -187,6 +197,10 @@ router.get('/users/me', ensureAuthenticatedAPI, function(req, res, next) { | ||||
|   return res.json(req.user); | ||||
| }); | ||||
|  | ||||
| function matchDomain(domain){ | ||||
|   var pattern = new RegExp(config.restrict_domain) | ||||
|   return pattern.test(domain) | ||||
| } | ||||
| function ensureAuthenticatedWeb(req, res, next) { | ||||
|   if (req.isAuthenticated()) { | ||||
|     return next(); | ||||
|   | ||||
							
								
								
									
										81
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						
									
										81
									
								
								yarn.lock
									
									
									
									
									
								
							| @@ -118,6 +118,10 @@ balanced-match@^1.0.0: | ||||
|   version "1.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" | ||||
|  | ||||
| base64url@2.0.0, base64url@^2.0.0: | ||||
|   version "2.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" | ||||
|  | ||||
| bcrypt-pbkdf@^1.0.0: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" | ||||
| @@ -192,6 +196,10 @@ browser-stdout@1.3.0: | ||||
|   version "1.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" | ||||
|  | ||||
| buffer-equal-constant-time@1.0.1: | ||||
|   version "1.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" | ||||
|  | ||||
| busboy@0.2.14: | ||||
|   version "0.2.14" | ||||
|   resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" | ||||
| @@ -458,6 +466,13 @@ ecc-jsbn@~0.1.1: | ||||
|   dependencies: | ||||
|     jsbn "~0.1.0" | ||||
|  | ||||
| ecdsa-sig-formatter@1.0.9: | ||||
|   version "1.0.9" | ||||
|   resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" | ||||
|   dependencies: | ||||
|     base64url "^2.0.0" | ||||
|     safe-buffer "^5.0.1" | ||||
|  | ||||
| ee-first@1.1.1: | ||||
|   version "1.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" | ||||
| @@ -999,6 +1014,21 @@ jsonify@~0.0.0: | ||||
|   version "0.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" | ||||
|  | ||||
| jsonwebtoken@^8.1.0: | ||||
|   version "8.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.1.0.tgz#c6397cd2e5fd583d65c007a83dc7bb78e6982b83" | ||||
|   dependencies: | ||||
|     jws "^3.1.4" | ||||
|     lodash.includes "^4.3.0" | ||||
|     lodash.isboolean "^3.0.3" | ||||
|     lodash.isinteger "^4.0.4" | ||||
|     lodash.isnumber "^3.0.3" | ||||
|     lodash.isplainobject "^4.0.6" | ||||
|     lodash.isstring "^4.0.1" | ||||
|     lodash.once "^4.0.0" | ||||
|     ms "^2.0.0" | ||||
|     xtend "^4.0.1" | ||||
|  | ||||
| jsprim@^1.2.2: | ||||
|   version "1.4.1" | ||||
|   resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" | ||||
| @@ -1008,6 +1038,23 @@ jsprim@^1.2.2: | ||||
|     json-schema "0.2.3" | ||||
|     verror "1.10.0" | ||||
|  | ||||
| jwa@^1.1.4: | ||||
|   version "1.1.5" | ||||
|   resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" | ||||
|   dependencies: | ||||
|     base64url "2.0.0" | ||||
|     buffer-equal-constant-time "1.0.1" | ||||
|     ecdsa-sig-formatter "1.0.9" | ||||
|     safe-buffer "^5.0.1" | ||||
|  | ||||
| jws@^3.1.4: | ||||
|   version "3.1.4" | ||||
|   resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" | ||||
|   dependencies: | ||||
|     base64url "^2.0.0" | ||||
|     jwa "^1.1.4" | ||||
|     safe-buffer "^5.0.1" | ||||
|  | ||||
| kind-of@^3.0.2: | ||||
|   version "3.2.2" | ||||
|   resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" | ||||
| @@ -1072,6 +1119,10 @@ lodash.defaults@^3.1.2: | ||||
|     lodash.assign "^3.0.0" | ||||
|     lodash.restparam "^3.0.0" | ||||
|  | ||||
| lodash.includes@^4.3.0: | ||||
|   version "4.3.0" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" | ||||
|  | ||||
| lodash.isarguments@^3.0.0: | ||||
|   version "3.1.0" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" | ||||
| @@ -1080,6 +1131,26 @@ lodash.isarray@^3.0.0: | ||||
|   version "3.0.4" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" | ||||
|  | ||||
| lodash.isboolean@^3.0.3: | ||||
|   version "3.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" | ||||
|  | ||||
| lodash.isinteger@^4.0.4: | ||||
|   version "4.0.4" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" | ||||
|  | ||||
| lodash.isnumber@^3.0.3: | ||||
|   version "3.0.3" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" | ||||
|  | ||||
| lodash.isplainobject@^4.0.6: | ||||
|   version "4.0.6" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" | ||||
|  | ||||
| lodash.isstring@^4.0.1: | ||||
|   version "4.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" | ||||
|  | ||||
| lodash.keys@^3.0.0: | ||||
|   version "3.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" | ||||
| @@ -1088,6 +1159,10 @@ lodash.keys@^3.0.0: | ||||
|     lodash.isarguments "^3.0.0" | ||||
|     lodash.isarray "^3.0.0" | ||||
|  | ||||
| lodash.once@^4.0.0: | ||||
|   version "4.1.1" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" | ||||
|  | ||||
| lodash.restparam@^3.0.0: | ||||
|   version "3.6.1" | ||||
|   resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" | ||||
| @@ -1192,7 +1267,7 @@ mocha@*: | ||||
|     mkdirp "0.5.1" | ||||
|     supports-color "4.4.0" | ||||
|  | ||||
| ms@2.0.0: | ||||
| ms@2.0.0, ms@^2.0.0: | ||||
|   version "2.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" | ||||
|  | ||||
| @@ -1999,6 +2074,10 @@ xdg-basedir@^3.0.0: | ||||
|   version "3.0.0" | ||||
|   resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" | ||||
|  | ||||
| xtend@^4.0.1: | ||||
|   version "4.0.1" | ||||
|   resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" | ||||
|  | ||||
| yallist@^2.1.2: | ||||
|   version "2.1.2" | ||||
|   resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user