From d1672083ba0de43d384a1bc41aee03ecf8eaf7be Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Tue, 6 Feb 2018 22:57:32 +0100 Subject: [PATCH] Add module partner_disable_gravatar --- partner_disable_gravatar/README.rst | 60 ++++++++++++++++++ partner_disable_gravatar/__init__.py | 3 + partner_disable_gravatar/__manifest__.py | 15 +++++ partner_disable_gravatar/models/__init__.py | 3 + partner_disable_gravatar/models/partner.py | 12 ++++ .../static/description/icon.png | Bin 0 -> 12068 bytes 6 files changed, 93 insertions(+) create mode 100644 partner_disable_gravatar/README.rst create mode 100644 partner_disable_gravatar/__init__.py create mode 100644 partner_disable_gravatar/__manifest__.py create mode 100644 partner_disable_gravatar/models/__init__.py create mode 100644 partner_disable_gravatar/models/partner.py create mode 100644 partner_disable_gravatar/static/description/icon.png diff --git a/partner_disable_gravatar/README.rst b/partner_disable_gravatar/README.rst new file mode 100644 index 000000000..46922629d --- /dev/null +++ b/partner_disable_gravatar/README.rst @@ -0,0 +1,60 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +======================== +Partner Disable Gravatar +======================== + +A new feature has been introduced in Odoo v10 in the *base* module: when you enter an email address in the form view of a partner, Odoo will send a query to `gravatar.com `_ to get a picture corresponding to the email address. + +`Gravatar `_, which stands for *Globally Recognized Avatar*, is a website where any user can open an account and register a correspondance between his email address and a picture. That way, his picture/avatar will be automatically set on all websites that are connected to gravatar.com: he won't have to manually configure his picture/avatar on every website. + +In Odoo, when you enter an email address in the form view of a partner (i.e. triggered via the *onchange* on the *email* field) and this partner doesn't have any image yet in Odoo, Odoo will automatically send an HTTPS query to `www.gravatar.com `_ with an MD5 hash of the email of the partner. If it receives an answer from gravatar.com in the form of a picture within the 5 seconds timeout, it will set this picture on the *image* field of the partner in Odoo. + +Some people may consider it as a cool feature to easily get picture on partners with no effort. + +But other people may consider this as an annoying feature that adds unnecessary network trafic or, worse, as a leak of information. With this feature, gravatar.com is notified of all the email addresses added in the Odoo database, so it may be considered as a leak of information to a third party company (gravatar.com is operated by `Automattic Inc. `_, an American company). The problem is that there is no way to disable this feature via a configuration parameter of Odoo. This module brings a solution to this problem: once installed, it disables the feature. + +Configuration +============= + +No configuration required. Installing the module will disable the automatic connection to gravatar.com. + +Usage +===== + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/134/10.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Contributors +------------ + +* Alexis de Lattre + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/partner_disable_gravatar/__init__.py b/partner_disable_gravatar/__init__.py new file mode 100644 index 000000000..cde864bae --- /dev/null +++ b/partner_disable_gravatar/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models diff --git a/partner_disable_gravatar/__manifest__.py b/partner_disable_gravatar/__manifest__.py new file mode 100644 index 000000000..eed486dd6 --- /dev/null +++ b/partner_disable_gravatar/__manifest__.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +# © 2018 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + 'name': 'Partner Disable Gravatar', + 'version': '10.0.1.0.0', + 'category': 'Tools', + 'license': 'AGPL-3', + 'summary': 'Disable automatic connection to gravatar.com', + 'author': 'Akretion,Odoo Community Association (OCA)', + 'website': 'https://odoo-community.org', + 'depends': ['base'], + 'installable': True, +} diff --git a/partner_disable_gravatar/models/__init__.py b/partner_disable_gravatar/models/__init__.py new file mode 100644 index 000000000..61cf8b222 --- /dev/null +++ b/partner_disable_gravatar/models/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import partner diff --git a/partner_disable_gravatar/models/partner.py b/partner_disable_gravatar/models/partner.py new file mode 100644 index 000000000..4691db803 --- /dev/null +++ b/partner_disable_gravatar/models/partner.py @@ -0,0 +1,12 @@ +# -*- coding: utf-8 -*- +# © 2018 Akretion (Alexis de Lattre ) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models + + +class ResPartner(models.Model): + _inherit = 'res.partner' + + def _get_gravatar_image(self, email): + return False diff --git a/partner_disable_gravatar/static/description/icon.png b/partner_disable_gravatar/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..314c244d678f4d435fee239e6bfaae5a71c98709 GIT binary patch literal 12068 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