You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
# coding: utf-8 # Copyright 2014 David BEAL @ Akretion <david.beal@akretion.com> # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from openerp import _, models, fields, api from openerp.exceptions import Warning as UserError from openerp.tools.config import config
def _get_authorized_password(): """ You can define your own authorized keys
"""
return [config.get("secure_uninstall"), config.get("admin_passwd")]
class BaseModuleUpgrade(models.TransientModel): _inherit = 'base.module.upgrade'
uninstall_password = fields.Char( string='Password', help="'secure_uninstall' value from Odoo configuration file ")
@api.multi def upgrade_module(self): for elm in self: if not config.get("secure_uninstall"): self.rollback_state_modules() raise UserError(_( "Missing configuration key\n--------------------\n" "'secure_uninstall' configuration key " "is not set in \n" "your Odoo server configuration file: " "please set it a value")) if elm.uninstall_password not in _get_authorized_password(): self.rollback_state_modules() raise UserError(_( "Password Error\n--------------------\n" "Provided password '%s' doesn't match with " "'Master Password'\n('secure_uninstall' key) found in " "the Odoo server configuration file ." "\n\nResolution\n-------------\n" "Please check your password and retry or cancel") % elm.uninstall_password) # keep this password in db is insecure, then we remove it elm.uninstall_password = False return super(BaseModuleUpgrade, self).upgrade_module()
def rollback_state_modules(self): modules = self.env['ir.module.module'].browse( self._context.get('active_ids')) if modules: module_ids = modules.downstream_dependencies( exclude_states=['uninstalled', 'uninstallable']) module_ids = module_ids + list(modules._ids) self.env['ir.module.module'].browse( module_ids).button_uninstall_cancel() self._cr.commit() return True
|