48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import _, models
|
||
|
from collections import defaultdict
|
||
|
|
||
|
|
||
|
class AuthTotpDevice(models.Model):
|
||
|
_inherit = "auth_totp.device"
|
||
|
|
||
|
def unlink(self):
|
||
|
""" Notify users when trusted devices are removed from their account. """
|
||
|
removed_devices_by_user = self._classify_by_user()
|
||
|
for user, removed_devices in removed_devices_by_user.items():
|
||
|
user._notify_security_setting_update(
|
||
|
_("Security Update: Device Removed"),
|
||
|
_(
|
||
|
"A trusted device has just been removed from your account: %(device_names)s",
|
||
|
device_names=', '.join([device.name for device in removed_devices])
|
||
|
),
|
||
|
)
|
||
|
|
||
|
return super().unlink()
|
||
|
|
||
|
def _generate(self, scope, name):
|
||
|
""" Notify users when trusted devices are added onto their account.
|
||
|
We override this method instead of 'create' as those records are inserted directly into the
|
||
|
database using raw SQL. """
|
||
|
|
||
|
res = super()._generate(scope, name)
|
||
|
|
||
|
self.env.user._notify_security_setting_update(
|
||
|
_("Security Update: Device Added"),
|
||
|
_(
|
||
|
"A trusted device has just been added to your account: %(device_name)s",
|
||
|
device_name=name
|
||
|
),
|
||
|
)
|
||
|
|
||
|
return res
|
||
|
|
||
|
def _classify_by_user(self):
|
||
|
devices_by_user = defaultdict(lambda: self.env['auth_totp.device'])
|
||
|
for device in self:
|
||
|
devices_by_user[device.user_id] |= device
|
||
|
|
||
|
return devices_by_user
|