summaryrefslogtreecommitdiff
path: root/addons/web/controllers/main.py
diff options
context:
space:
mode:
authorAntony Lesuisse <al@openerp.com>2015-07-31 00:33:47 +0200
committerAntony Lesuisse <al@openerp.com>2015-08-01 18:04:14 +0200
commit3cba55d7a7e1f01150f87f806546e10526b10219 (patch)
tree442923b0c39d5bed1ef4c111fbf69715954c7cb4 /addons/web/controllers/main.py
parent4b330f3173eb0a3d82b743c73de6cf5c9ecd0178 (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.py150
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):