privacy_lookup/models/privacy_log.py

49 lines
2.0 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class PrivacyLog(models.Model):
_name = 'privacy.log'
_description = 'Privacy Log'
_rec_name = 'user_id'
date = fields.Datetime(default=fields.Datetime.now, required=True)
anonymized_name = fields.Char(required=True)
anonymized_email = fields.Char(required=True)
user_id = fields.Many2one(
'res.users', string="Handled By", required=True,
default=lambda self: self.env.user)
execution_details = fields.Text()
records_description = fields.Text(string="Found Records")
additional_note = fields.Text()
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
vals['anonymized_name'] = self._anonymize_name(vals['anonymized_name'])
vals['anonymized_email'] = self._anonymize_email(vals['anonymized_email'])
return super().create(vals_list)
def _anonymize_name(self, label):
if not label:
return ''
if '@' in label:
return self._anonymize_email(label)
return ' '.join(e[0] + '*' * (len(e) - 1) for e in label.split(' ') if e)
def _anonymize_email(self, label):
def _anonymize_user(label):
return '.'.join(e[0] + '*' * (len(e) - 1) for e in label.split('.') if e)
def _anonymize_domain(label):
if label in ['gmail.com', 'hotmail.com', 'yahoo.com']: # More than half of addresses domains
return label
split_domain = label.split('.')
return '.'.join([e[0] + '*' * (len(e) - 1) for e in split_domain[:-1] if e] + [split_domain[-1]])
if not label or '@' not in label:
return UserError(_('This email address is not valid (%s)', label))
user, domain = label.split('@')
return '{}@{}'.format(_anonymize_user(user), _anonymize_domain(domain))