diff options
| author | Antony Lesuisse <al@openerp.com> | 2015-07-31 00:33:47 +0200 |
|---|---|---|
| committer | Antony Lesuisse <al@openerp.com> | 2015-08-01 18:04:14 +0200 |
| commit | 3cba55d7a7e1f01150f87f806546e10526b10219 (patch) | |
| tree | 442923b0c39d5bed1ef4c111fbf69715954c7cb4 /addons/web/controllers/main.py | |
| parent | 4b330f3173eb0a3d82b743c73de6cf5c9ecd0178 (diff) | |
[IMP] web: web 1.0 database manager
Implement the database manager with plain HTML forms and HTTP controllers.
Diffstat (limited to 'addons/web/controllers/main.py')
| -rw-r--r-- | addons/web/controllers/main.py | 150 |
1 files changed, 62 insertions, 88 deletions
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 894faec7e51..911f42575d0 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -37,7 +37,6 @@ from openerp.tools import topological_sort from openerp.tools.translate import _ from openerp.tools import ustr from openerp import http - from openerp.http import request, serialize_exception as _serialize_exception from openerp.exceptions import AccessError @@ -679,118 +678,93 @@ class Proxy(http.Controller): class Database(http.Controller): - @http.route('/web/database/selector', type='http', auth="none") - def selector(self, **kw): + def _render_template(self, **d): + d.setdefault('manage',True) + d['insecure'] = openerp.tools.config['admin_passwd'] == 'admin' + d['list_db'] = openerp.tools.config['list_db'] + d['langs'] = openerp.service.db.exp_list_lang() + # databases list + d['databases'] = [] try: - dbs = http.db_list() - if not dbs: - return http.local_redirect('/web/database/manager') + d['databases'] = http.db_list() except openerp.exceptions.AccessDenied: - dbs = False - return env.get_template("database_selector.html").render({ - 'databases': dbs, - 'debug': request.debug, - 'error': kw.get('error') - }) + monodb = db_monodb() + if monodb: + d['databases'] = [monodb] + return env.get_template("database_manager.html").render(d) + + @http.route('/web/database/selector', type='http', auth="none") + def selector(self, **kw): + return self._render_template(manage=False) @http.route('/web/database/manager', type='http', auth="none") def manager(self, **kw): - # TODO: migrate the webclient's database manager to server side views - request.session.logout() - return env.get_template("database_manager.html").render({ - 'modules': simplejson.dumps(module_boot()), - }) + return self._render_template() - @http.route('/web/database/get_list', type='json', auth="none") - def get_list(self): - # TODO change js to avoid calling this method if in monodb mode + @http.route('/web/database/create', type='http', auth="none") + def create(self, master_pwd, name, lang, password, **post): try: - return http.db_list() - except openerp.exceptions.AccessDenied: - monodb = db_monodb() - if monodb: - return [monodb] - raise - - @http.route('/web/database/create', type='json', auth="none") - def create(self, fields): - params = dict(map(operator.itemgetter('name', 'value'), fields)) - db_created = request.session.proxy("db").create_database( - params['super_admin_pwd'], - params['db_name'], - bool(params.get('demo_data')), - params['db_lang'], - params['create_admin_pwd']) - if db_created: - request.session.authenticate(params['db_name'], 'admin', params['create_admin_pwd']) - return db_created - - @http.route('/web/database/duplicate', type='json', auth="none") - def duplicate(self, fields): - params = dict(map(operator.itemgetter('name', 'value'), fields)) - duplicate_attrs = ( - params['super_admin_pwd'], - params['db_original_name'], - params['db_name'], - ) - - return request.session.proxy("db").duplicate_database(*duplicate_attrs) - - @http.route('/web/database/drop', type='json', auth="none") - def drop(self, fields): - password, db = operator.itemgetter( - 'drop_pwd', 'drop_db')( - dict(map(operator.itemgetter('name', 'value'), fields))) + request.session.proxy("db").create_database(master_pwd, name, bool(post.get('demo')), lang, password) + request.session.authenticate(name, login, password) + return http.local_redirect('/web/') + except Exception, e: + error = "Database creation error: %s" % e + return self._render_template(error=error) + @http.route('/web/database/duplicate', type='http', auth="none") + def duplicate(self, master_pwd, name, new_name): try: - if request.session.proxy("db").drop(password, db): - return True - else: - return False - except openerp.exceptions.AccessDenied: - return {'error': 'AccessDenied', 'title': 'Drop Database'} - except Exception: - return {'error': _('Could not drop database !'), 'title': _('Drop Database')} + request.session.proxy("db").duplicate_database(master_pwd, name, new_name) + return http.local_redirect('/web/database/manager') + except Exception, e: + error = "Database duplication error: %s" % e + return self._render_template(error=error) + + @http.route('/web/database/drop', type='http', auth="none") + def drop(self, master_pwd, name): + try: + request.session.proxy("db").drop(master_pwd, name) + return http.local_redirect('/web/database/manager') + except Exception, e: + error = "Database deletion error: %s" % e + return self._render_template(error=error) @http.route('/web/database/backup', type='http', auth="none") - def backup(self, backup_db, backup_pwd, token, backup_format='zip'): + def backup(self, master_pwd, name, backup_format = 'zip'): try: - openerp.service.security.check_super(backup_pwd) + openerp.service.db.check_super(master_pwd) ts = datetime.datetime.utcnow().strftime("%Y-%m-%d_%H-%M-%S") - filename = "%s_%s.%s" % (backup_db, ts, backup_format) + filename = "%s_%s.%s" % (name, ts, backup_format) headers = [ ('Content-Type', 'application/octet-stream; charset=binary'), ('Content-Disposition', content_disposition(filename)), ] - dump_stream = openerp.service.db.dump_db(backup_db, None, backup_format) + dump_stream = openerp.service.db.dump_db(name, None, backup_format) response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True) - response.set_cookie('fileToken', token) return response except Exception, e: _logger.exception('Database.backup') - return simplejson.dumps([[],[{'error': openerp.tools.ustr(e), 'title': _('Backup Database')}]]) + error = "Database backup error: %s" % e + return self._render_template(error=error) @http.route('/web/database/restore', type='http', auth="none") - def restore(self, db_file, restore_pwd, new_db, mode): + def restore(self, master_pwd, backup_file, name, copy=False): try: - copy = mode == 'copy' - data = base64.b64encode(db_file.read()) - request.session.proxy("db").restore(restore_pwd, new_db, data, copy) - return '' - except openerp.exceptions.AccessDenied, e: - raise Exception("AccessDenied") - - @http.route('/web/database/change_password', type='json', auth="none") - def change_password(self, fields): - old_password, new_password = operator.itemgetter( - 'old_pwd', 'new_pwd')( - dict(map(operator.itemgetter('name', 'value'), fields))) + data = base64.b64encode(backup_file.read()) + request.session.proxy("db").restore(master_pwd, name, data, copy) + return http.local_redirect('/web/database/manager') + except Exception, e: + error = "Database restore error: %s" % e + return self._render_template(error=error) + + @http.route('/web/database/change_password', type='http', auth="none") + def change_password(self, master_pwd, master_pwd_new): try: - return request.session.proxy("db").change_admin_password(old_password, new_password) - except openerp.exceptions.AccessDenied: - return {'error': 'AccessDenied', 'title': _('Change Password')} - except Exception: - return {'error': _('Error, password not changed !'), 'title': _('Change Password')} + request.session.proxy("db").change_admin_password(master_pwd, master_pwd_new) + return http.local_redirect('/web/database/manager') + except Exception, e: + error = "Master password update error: %s" % e + return self._render_template(error=error) class Session(http.Controller): |
