ensure that database.rules.json has rules key (#196)

This commit is contained in:
Lauren Long
2016-08-02 15:36:49 -07:00
committed by GitHub
parent 4313539816
commit 964bd6a8cf
2 changed files with 18 additions and 1 deletions

View File

@@ -15,6 +15,8 @@ var parseBoltRules = require('./parseBoltRules');
var prompt = require('./prompt');
var resolveProjectPath = require('./resolveProjectPath');
var utils = require('./utils');
var validateJsonRules = require('./validateJsonRules');
var logger = require('./logger');
var Config = function(src, options) {
this.options = options || {};
@@ -117,7 +119,13 @@ Config.prototype._parseFile = function(target, filePath) {
if (target === 'database') {
this.notes.databaseRules = 'json';
} else if (target === 'database.rules') {
return fs.readFileSync(fullPath, 'utf8');
var rules = fs.readFileSync(fullPath, 'utf8');
if (validateJsonRules(rules)) {
return rules;
}
utils.logWarning(chalk.bold.yellow('database: ') + chalk.bold(filePath) + ' must have an outer ' + chalk.bold('rules') + ' key, for example:');
logger.warn('\n{\n\t"rules": {".read": false, ".write": false}\n}');
throw new FirebaseError('Database security rules are not correctly formatted', {exit: 1});
}
return loadCJSON(fullPath);
/* istanbul ignore-next */

9
lib/validateJsonRules.js Normal file
View File

@@ -0,0 +1,9 @@
'use strict';
var cjson = require('cjson');
var _ = require('lodash');
module.exports = function(rules) {
var parsed = cjson.parse(rules);
return _.has(parsed, 'rules');
};