Пример #1
0
class TestEncrypted(models.TransientModel):
    _name = 'encrypted_fields.test'

    encrypted = fields.Encrypted()
    encrypted_password = fields.Encrypted()
    boolean = fields.Boolean(encrypt='encrypted')
    integer = fields.Integer(encrypt='encrypted')
    float = fields.Float(encrypt='encrypted')
    char = fields.Char(encrypt='encrypted')
    password = fields.Char(encrypt='encrypted_password')
    selection = fields.Selection(selection=[('one', 'One'), ('two', 'Two')],
                                 encrypt='encrypted')
    html = fields.Html(encrypt='encrypted')
    partner = fields.Many2one('res.partner', encrypt='encrypted')
Пример #2
0
class EncryptedVaultHistory(models.Model):
    _name = 'encrypted.vault.history'
    _order = 'create_date desc'

    encrypted_data = fields.Encrypted()

    name = fields.Char(
        string="Name",
        related="vault_id.name",
    )
    username = fields.Char(
        string="Username",
        required=True,
        encrypt="encrypted_data",
    )
    password = fields.Char(
        string="Password",
        required=True,
        encrypt="encrypted_data",
    )
    uri = fields.Char(
        string="URI",
        required=True,
        encrypt="encrypted_data",
    )
    create_date = fields.Datetime(
        comodel_name='Create Date',
        readonly=True
    )
    user_id = fields.Many2one(
        comodel_name='res.users',
        string='Modified by',
        readonly=True,
    )

    vault_id = fields.Many2one(
        comodel_name="encrypted.vault",
        string="Vault",
        required=True,
        ondelete="cascade",
    )

    @api.multi
    def restore(self):
        self.ensure_one()
        self.vault_id.write({
            'username': self.username,
            'password': self.password,
            'uri': self.uri,
        })
Пример #3
0
class IFIEmployee(models.Model):

    _inherit = "hr.employee"

    encrypted = fields.Encrypted()
    # name = fields.Char(related='resource_id.name', store=True, oldname='name_related', readonly=False, encrypt='encrypted')
    birthday = fields.Date('Date of Birth', groups="hr.group_hr_user")
    # skype = fields.Char(string='Skype', encrypt='encrypted')
    skype = fields.Char(string='Skype')
    job_title = fields.Char("Job Title", required=True)
    work_email = fields.Char('Work Email')
    department_id = fields.Many2one('hr.department',
                                    string='Department',
                                    required=True)
    staff_id = fields.Char(string='Staff ID')
    state = fields.Selection([
        ('working', 'Working'),
        ('resigning', 'Resigning'),
        ('terminated', 'Terminated'),
        ('permanent', 'Permanent'),
        ('maternity', 'Maternity'),
    ],
                             string="State",
                             default='working',
                             track_visibility='onchange')
    employment_status = fields.Selection([('internship', 'Internship'),
                                          ('probation', 'Probation'),
                                          ('permanent', 'Permanent')],
                                         default='permanent',
                                         track_visibility='onchange')
    staff_code = fields.Char()

    @api.model
    def create(self, vals):
        res = super(IFIEmployee, self).create(vals)
        if not vals.get('user_id', False):
            # user_id = self.env['res.users'].create({'name': res.name, 'login': res.work_email})
            user_id = self.with_context(
                default_customer=False).env['res.users'].create({
                    'name':
                    res.name,
                    'login':
                    res.work_email
                })
            if user_id:
                res.user_id = user_id
                res.work_email = user_id.login
                user_id.partner_id.email = user_id.login
        return res
Пример #4
0
class EncryptedVaultCustomField(models.Model):
    _name = 'encrypted.vault.custom.field'

    encrypted_data = fields.Encrypted()
    name = fields.Char(
        string="Name",
        required=True,
        encrypt="encrypted_data",
    )

    type = fields.Selection(
        selection=FIELD_TYPES,
        string="Type",
        default='text',
        required=True,
        encrypt="encrypted_data"
    )
    vault_id = fields.Many2one(
        comodel_name="encrypted.vault",
        string="Vault",
        required=True,
        ondelete="cascade",
    )

    text = fields.Char(
        string="Value",
        encrypt="encrypted_data"
    )
    hidden = fields.Char(
        string="Value",
        encrypt="encrypted_data"
    )
    boolean = fields.Boolean(
        string="Value",
        encrypt="encrypted_data"
    )

    @api.onchange("type")
    def _on_type_change(self):
        for record in self:
            if not record.type:
                continue
            for t in FIELD_TYPES:
                if record.type != t[0]:
                    record[record.type] = False
Пример #5
0
class EncryptedVault(models.Model):
    _name = 'encrypted.vault'

    @api.model
    def random_password(self, pass_len=False):
        get_param = self.env['ir.config_parameter'].sudo().get_param
        pass_len = pass_len if pass_len else literal_eval(
            get_param('encrypted_vault.encrypted_vault_password_length'))
        characters = ""
        use_digits = literal_eval(
            get_param('encrypted_vault.encrypted_vault_use_digits'))
        use_letters = literal_eval(
            get_param('encrypted_vault.encrypted_vault_use_letters'))
        use_special = literal_eval(
            get_param('encrypted_vault.encrypted_vault_use_special'))
        if use_digits:
            characters += digits
        if use_special:
            characters += "!@#$%^&*()="
        if use_letters:
            characters += ascii_letters
        if not characters:
            characters += ascii_letters + digits
        password = ''.join(choice(characters) for x in range(pass_len))
        return password

    encrypted_data = fields.Encrypted()
    name = fields.Char(required=True, )
    username = fields.Char(required=False, )
    password = fields.Char(required=False,
                           encrypt="encrypted_data",
                           default=random_password)
    uri = fields.Char(
        string="URI",
        required=False,
    )
    notes = fields.Text(encrypt="encrypted_data", )

    # This will be implemented in future.
    # uri_ids = fields.One2many(
    #     comodel_name="encrypted.vault.uri",
    #     inverse_name="vault_id",
    #     string="URIs",
    #     required=False,
    # )

    history_ids = fields.One2many(
        comodel_name="encrypted.vault.history",
        inverse_name="vault_id",
        string="History",
        required=False,
    )

    history_count = fields.Integer(compute='_compute_history_count', )
    custom_field_ids = fields.One2many(
        comodel_name="encrypted.vault.custom.field",
        inverse_name="vault_id",
        string="Custom Fields",
        required=False,
        copy=True,
    )

    @api.multi
    def _compute_history_count(self):
        for vault in self:
            vault.history_count = len(vault.history_ids)

    @api.multi
    def write(self, vals):
        if any(key in vals for key in self.get_history_fields()):
            for record in self:
                self.env["encrypted.vault.history"].sudo() \
                    .create(self.prepare_history_vals(record))
        return super(EncryptedVault, self).write(vals)

    @api.model
    def get_history_fields(self):
        return ["username", "password", "uri"]

    @api.model
    def prepare_history_vals(self, record):
        return {
            "user_id": self.env.uid,
            "vault_id": record.id,
            "username": record.username,
            "password": record.password,
            "uri": record.uri,
        }

    @api.multi
    def random_password_button(self):
        self.ensure_one()
        self.password = self.random_password()