First fix: No indication for bad configuration file loaded via the "Import" button in configuration page.

Added specific error handling for that part.
This commit is contained in:
maor.rayzin 2018-11-05 15:15:02 +02:00
parent 84c2a5fa51
commit bdda578920
3 changed files with 25 additions and 3 deletions

View File

@ -1,7 +1,7 @@
import json import json
import flask_restful import flask_restful
from flask import request, jsonify from flask import request, jsonify, abort
from cc.auth import jwt_required from cc.auth import jwt_required
from cc.services.config import ConfigService from cc.services.config import ConfigService
@ -20,5 +20,6 @@ class MonkeyConfiguration(flask_restful.Resource):
if 'reset' in config_json: if 'reset' in config_json:
ConfigService.reset_config() ConfigService.reset_config()
else: else:
ConfigService.update_config(config_json, should_encrypt=True) if not ConfigService.update_config(config_json, should_encrypt=True):
abort(400)
return self.get() return self.get()

View File

@ -977,9 +977,14 @@ class ConfigService:
@staticmethod @staticmethod
def update_config(config_json, should_encrypt): def update_config(config_json, should_encrypt):
if should_encrypt: if should_encrypt:
try:
ConfigService.encrypt_config(config_json) ConfigService.encrypt_config(config_json)
except KeyError as e:
logger.error('Bad configuration file was submitted.')
return False
mongo.db.config.update({'name': 'newconfig'}, {"$set": config_json}, upsert=True) mongo.db.config.update({'name': 'newconfig'}, {"$set": config_json}, upsert=True)
logger.info('monkey config was updated') logger.info('monkey config was updated')
return True
@staticmethod @staticmethod
def init_default_config(): def init_default_config():

View File

@ -50,6 +50,13 @@ class ConfigurePageComponent extends AuthComponent {
headers: {'Content-Type': 'application/json'}, headers: {'Content-Type': 'application/json'},
body: JSON.stringify(this.state.configuration) body: JSON.stringify(this.state.configuration)
}) })
.then(res => {
if (!res.ok)
{
throw Error()
}
return res;
})
.then(res => res.json()) .then(res => res.json())
.then(res => { .then(res => {
this.setState({ this.setState({
@ -58,6 +65,9 @@ class ConfigurePageComponent extends AuthComponent {
configuration: res.configuration configuration: res.configuration
}); });
this.props.onStatusChange(); this.props.onStatusChange();
}).catch(error => {
console.log('bad configuration');
this.setState({lastAction: 'invalid_configuration'});
}); });
}; };
@ -217,6 +227,12 @@ class ConfigurePageComponent extends AuthComponent {
Failed importing configuration. Invalid config file. Failed importing configuration. Invalid config file.
</div> </div>
: ''} : ''}
{ this.state.lastAction === 'invalid_configuration' ?
<div className="alert alert-danger">
<i className="glyphicon glyphicon-exclamation-sign" style={{'marginRight': '5px'}}/>
An invalid configuration file was imported and submitted, probably outdated.
</div>
: ''}
{ this.state.lastAction === 'import_success' ? { this.state.lastAction === 'import_success' ?
<div className="alert alert-success"> <div className="alert alert-success">
<i className="glyphicon glyphicon-ok-sign" style={{'marginRight': '5px'}}/> <i className="glyphicon glyphicon-ok-sign" style={{'marginRight': '5px'}}/>