Validate API key in requests
							parent
							
								
									005b57106c
								
							
						
					
					
						commit
						948ff11030
					
				|  | @ -53,13 +53,35 @@ exports.restrict = (req, res, next) => { | |||
|     exports.checkLogin(req, res, next); | ||||
| }; | ||||
| 
 | ||||
| exports.checkLogin = (req, res, next) => { | ||||
| exports.checkLogin = async (req, res, next) => { | ||||
|     const db = req.app.db; | ||||
|     // if not protecting we check for public pages and don't checkLogin
 | ||||
|     if(req.session.needsSetup === true){ | ||||
|         res.redirect('/admin/setup'); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     // If API key, check for a user
 | ||||
|     if(req.headers.apikey){ | ||||
|         try{ | ||||
|             const user = await db.users.findOne({ | ||||
|                 apiKey: ObjectId(req.headers.apikey), | ||||
|                 isAdmin: true | ||||
|             }); | ||||
|             if(!user){ | ||||
|                 res.status(400).json({message: 'Access denied'}); | ||||
|                 return; | ||||
|             } | ||||
|             // Set API authenticated in the req
 | ||||
|             req.apiAuthenticated = true; | ||||
|             next(); | ||||
|             return; | ||||
|         }catch(ex){ | ||||
|             res.status(400).json({message: 'Access denied'}); | ||||
|             return; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if(req.session.user){ | ||||
|         next(); | ||||
|         return; | ||||
|  | @ -263,10 +285,18 @@ exports.getConfig = () => { | |||
| 
 | ||||
| exports.getPaymentConfig = () => { | ||||
|     let siteConfig = this.getConfig(); | ||||
|     const gateConfigFile = path.join(__dirname, '../config', `${siteConfig.paymentGateway}.json`); | ||||
| 
 | ||||
|     let config = []; | ||||
|     if(fs.existsSync(path.join(__dirname, '../config/' + siteConfig.paymentGateway + '.json'))){ | ||||
|         config = JSON.parse(fs.readFileSync(path.join(__dirname, '../config/' + siteConfig.paymentGateway + '.json'), 'utf8')); | ||||
|     if(fs.existsSync(gateConfigFile)){ | ||||
|         config = JSON.parse(fs.readFileSync(gateConfigFile, 'utf8')); | ||||
|     } | ||||
| 
 | ||||
|     // If a local config we combine the objects. Local configs are .gitignored
 | ||||
|     let localConfig = path.join(__dirname, '../config', `${siteConfig.paymentGateway}-local.json`); | ||||
|     if(fs.existsSync(localConfig)){ | ||||
|         const localConfigObj = JSON.parse(fs.readFileSync(localConfig, 'utf8')); | ||||
|         config = Object.assign(config, localConfigObj); | ||||
|     } | ||||
| 
 | ||||
|     return config; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue