This module allows you to store credentials of external systems.
By default, passwords are encrypted with a key stored in Odoo config. It's far from an ideal password storage setup, but it's way better than password in clear text in the database. It can be easily replaced by another system. See "Security" chapter below.
Accounts may be: market places (Amazon, Cdiscount, ...), carriers (Laposte, UPS, ...) or any third party system called from Odoo.
This module is aimed for developers. The logic to choose between accounts will be achieved in dependent modules.
Possible use case for deliveries: you need multiple accounts for the same carrier. It can be for instance due to carrier restrictions (immutable sender address), or business rules (each warehouse use a different account).
After the installation of this module, you need to add some entries in Odoo's config file: (etc/openerp.cfg)
> keychain_key = fyeMIx9XVPBBky5XZeLDxVc9dFKy7Uzas3AoyMarHPA=
You can generate keys with python -c 'from cryptography.fernet import Fernet; print Fernet.generate_key()'.
This key is used to encrypt account passwords.
If you plan to use environments, you should add a key per environment:
> keychain_key_dev = 8H_qFvwhxv6EeO9bZ8ww7BUymNt3xtQKYEq9rjAPtrc=
> keychain_key_prod = y5z-ETtXkVI_ADoFEZ5CHLvrNjwOPxsx-htSVbDbmRc=
keychain_key is used for encryption when no environment is set.
class LaposteAccount(models.Model):
_inherit = 'keychain.account'
namespace = fields.Selection(
selection_add=[('roulier_laposte', 'Laposte')])
class LaposteAccount(models.Model):
# ...
def _roulier_laposte_init_data(self):
return {
"agencyCode": "",
"recommandationLevel": "R1"
}
class LaposteAccount(models.Model):
# ...
def _roulier_laposte_validate_data(self, data):
return len(data.get("agencyCode") > 3)
import random
def _get_auth(self):
keychain = self.env['keychain.account']
if self.env.user.has_group('stock.group_stock_user'):
retrieve = keychain.suspend_security().retrieve
else:
retrieve = keychain.retrieve
accounts = retrieve(
[['namespace', '=', 'roulier_laposte']])
account = random.choice(accounts)
return {
'login': account.login,
'password': account.get_password()
}
In this example, an account is randomly picked. Usually this is set according to rules specific for each client.
You have to restrict user access of your methods with suspend_security().
Warning: _init_data and _validate_data should be prefixed with your namespace! Choose python naming function compatible name.
You may adopt one of the following strategies:
Note: only the password field is unreadable without the proper key, login and data fields are available on all environments.
You may also use a same technical_name and different environment for choosing at runtime between accounts.
Go to settings / keychain, create a record with the following
This discussion: https://github.com/OCA/server-tools/pull/644 may help you decide if this module is suitable for your needs or not.
Common sense: Odoo is not a safe place for storing sensitive data. But sometimes you don't have any other possibilities. This module is designed to store credentials of data like carrier account, smtp, api keys... but definitively not for credits cards number, medical records, etc.
By default, passwords are stored encrypted in the db using symetric encryption Fernet. The encryption key is stored in openerp.tools.config.
Threats even with this module installed:
If your dev server is compromised, hacker can't decrypt your prod passwords since you have different keys between dev and prod.
If you want something more secure: don't store any sensitive data in Odoo, use an external system as a proxy, you can still use this module for storing all other data related to your accounts.
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.
The development of this module has been financially supported by:
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.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。