67 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
# Copyright 2018-Today datenpol gmbh(<http://www.datenpol.at>)
 | 
						|
# License OPL-1 or later (https://www.odoo.com/documentation/user/11.0/legal/licenses/licenses.html#licenses).
 | 
						|
 | 
						|
import datetime
 | 
						|
import json
 | 
						|
import logging
 | 
						|
import os
 | 
						|
import sys
 | 
						|
 | 
						|
import jinja2
 | 
						|
import werkzeug
 | 
						|
from odoo.addons.web.controllers.main import DBNAME_PATTERN, db_monodb, Database
 | 
						|
 | 
						|
import odoo
 | 
						|
from odoo import http
 | 
						|
from odoo.http import content_disposition
 | 
						|
 | 
						|
_logger = logging.getLogger(__name__)
 | 
						|
 | 
						|
if hasattr(sys, 'frozen'):
 | 
						|
    # When running on compiled windows binary, we don't have access to package loader.
 | 
						|
    path = os.path.realpath(os.path.join(os.path.dirname(__file__), '..', 'views'))
 | 
						|
    loader = jinja2.FileSystemLoader(path)
 | 
						|
else:
 | 
						|
    loader = jinja2.PackageLoader('odoo.addons.dp_dump_anonym', "views")
 | 
						|
 | 
						|
env = jinja2.Environment(loader=loader, autoescape=True)
 | 
						|
env.filters["json"] = json.dumps
 | 
						|
 | 
						|
 | 
						|
class DatabaseExtended(Database):
 | 
						|
    def _render_template(self, **d):
 | 
						|
        d.setdefault('manage', True)
 | 
						|
        d['insecure'] = odoo.tools.config.verify_admin_password('admin')
 | 
						|
        d['list_db'] = odoo.tools.config['list_db']
 | 
						|
        d['langs'] = odoo.service.db.exp_list_lang()
 | 
						|
        d['countries'] = odoo.service.db.exp_list_countries()
 | 
						|
        d['pattern'] = DBNAME_PATTERN
 | 
						|
        # databases list
 | 
						|
        d['databases'] = []
 | 
						|
        try:
 | 
						|
            d['databases'] = http.db_list()
 | 
						|
            d['incompatible_databases'] = odoo.service.db.list_db_incompatible(d['databases'])
 | 
						|
        except odoo.exceptions.AccessDenied:
 | 
						|
            monodb = db_monodb()
 | 
						|
            if monodb:
 | 
						|
                d['databases'] = [monodb]
 | 
						|
        return env.get_template("database_manager.html").render(d)
 | 
						|
 | 
						|
    @http.route('/web/database/backup', type='http', auth="none", methods=['POST'], csrf=False)
 | 
						|
    def backup(self, master_pwd, name, backup_format='zip', raw=False):
 | 
						|
        try:
 | 
						|
            odoo.service.db.check_super(master_pwd)
 | 
						|
            ts = datetime.datetime.utcnow().strftime("%Y-%m-%d_%H-%M-%S")
 | 
						|
            filename = "%s_%s.%s" % (name, ts, backup_format)
 | 
						|
            headers = [
 | 
						|
                ('Content-Type', 'application/octet-stream; charset=binary'),
 | 
						|
                ('Content-Disposition', content_disposition(filename)),
 | 
						|
            ]
 | 
						|
            dump_stream = odoo.service.db.dump_db(name, None, backup_format, raw)
 | 
						|
            response = werkzeug.wrappers.Response(dump_stream, headers=headers, direct_passthrough=True)
 | 
						|
            return response
 | 
						|
        except Exception as e:
 | 
						|
            _logger.exception('Database.backup')
 | 
						|
            error = "Database backup error: %s" % (str(e) or repr(e))
 | 
						|
            return self._render_template(error=error)
 |