Initial commit: OCA Server Auth packages (29 packages)

This commit is contained in:
Ernad Husremovic 2025-08-29 15:43:06 +02:00
commit 3ed80311c4
1325 changed files with 127292 additions and 0 deletions

75
README.md Normal file
View file

@ -0,0 +1,75 @@
# OCA Server Auth
This repository contains **29** OCA packages for server auth.
## Packages Included (29 packages)
- **odoo-bringout-oca-server-auth-auth_admin_passkey** - From server: auth_auth_admin_passkey
- **odoo-bringout-oca-server-auth-auth_api_key** - From server: auth_auth_api_key
- **odoo-bringout-oca-server-auth-auth_api_key_group** - From server: auth_auth_api_key_group
- **odoo-bringout-oca-server-auth-auth_api_key_server_env** - From server: auth_auth_api_key_server_env
- **odoo-bringout-oca-server-auth-auth_jwt** - From server: auth_auth_jwt
- **odoo-bringout-oca-server-auth-auth_jwt_demo** - From server: auth_auth_jwt_demo
- **odoo-bringout-oca-server-auth-auth_jwt_server_env** - From server: auth_auth_jwt_server_env
- **odoo-bringout-oca-server-auth-auth_ldaps** - From server: auth_auth_ldaps
- **odoo-bringout-oca-server-auth-auth_oauth_autologin** - From server: auth_auth_oauth_autologin
- **odoo-bringout-oca-server-auth-auth_oauth_filter_by_domain** - From server: auth_auth_oauth_filter_by_domain
- **odoo-bringout-oca-server-auth-auth_oauth_multi_token** - From server: auth_auth_oauth_multi_token
- **odoo-bringout-oca-server-auth-auth_oauth_ropc** - From server: auth_auth_oauth_ropc
- **odoo-bringout-oca-server-auth-auth_oidc** - From server: auth_auth_oidc
- **odoo-bringout-oca-server-auth-auth_oidc_environment** - From server: auth_auth_oidc_environment
- **odoo-bringout-oca-server-auth-auth_saml** - From server: auth_auth_saml
- **odoo-bringout-oca-server-auth-auth_session_timeout** - From server: auth_auth_session_timeout
- **odoo-bringout-oca-server-auth-auth_signup_verify_email** - From server: auth_auth_signup_verify_email
- **odoo-bringout-oca-server-auth-auth_user_case_insensitive** - From server: auth_auth_user_case_insensitive
- **odoo-bringout-oca-server-auth-base_user_show_email** - From server: auth_base_user_show_email
- **odoo-bringout-oca-server-auth-cross_connect_client** - From server: auth_cross_connect_client
- **odoo-bringout-oca-server-auth-cross_connect_server** - From server: auth_cross_connect_server
- **odoo-bringout-oca-server-auth-impersonate_login** - From server: auth_impersonate_login
- **odoo-bringout-oca-server-auth-password_security** - From server: auth_password_security
- **odoo-bringout-oca-server-auth-user_log_view** - From server: auth_user_log_view
- **odoo-bringout-oca-server-auth-users_ldap_groups** - From server: auth_users_ldap_groups
- **odoo-bringout-oca-server-auth-users_ldap_mail** - From server: auth_users_ldap_mail
- **odoo-bringout-oca-server-auth-users_ldap_populate** - From server: auth_users_ldap_populate
- **odoo-bringout-oca-server-auth-vault** - From server: auth_vault
- **odoo-bringout-oca-server-auth-vault_share** - From server: auth_vault_share
## Installation
Install any package from this category:
```bash
# Install from local directory
pip install packages/oca-server-auth/PACKAGE_NAME/
# Install in development mode
pip install -e packages/oca-server-auth/PACKAGE_NAME/
# Using uv (recommended for speed)
uv add packages/oca-server-auth/PACKAGE_NAME/
```
## Repository Structure
Each package in this repository follows the standard Odoo addon structure:
```
oca-server-auth/
├── odoo-bringout-oca-PROJECT-ADDON/
│ ├── ADDON_NAME/ # Complete addon code
│ │ ├── __init__.py
│ │ ├── __manifest__.py
│ │ └── ... (models, views, etc.)
│ ├── pyproject.toml # Python package configuration
│ └── README.md # Package documentation
└── ...
```
## Contributing
These packages are maintained as part of the [OCA (Odoo Community Association)](https://github.com/OCA) ecosystem.
## License
Each package maintains its original license as specified in the OCA repositories.

View file

@ -0,0 +1,46 @@
# Authentification - System Administrator Passkey
Odoo addon: auth_admin_passkey
## Installation
```bash
pip install odoo-bringout-oca-server-auth-auth_admin_passkey
```
## Dependencies
This addon depends on:
- mail
## Manifest Information
- **Name**: Authentification - System Administrator Passkey
- **Version**: 16.0.1.0.0
- **Category**: base
- **License**: AGPL-3
- **Installable**: True
## Source
Based on [OCA/server-auth](https://github.com/OCA/server-auth) branch 16.0, addon `auth_admin_passkey`.
## License
This package maintains the original AGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,131 @@
===============================================
Authentification - System Administrator Passkey
===============================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5747081959f948bc3969ac96543ca8e56a01418bff23687907352ae112298d85
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--auth-lightgray.png?logo=github
:target: https://github.com/OCA/server-auth/tree/16.0/auth_admin_passkey
:alt: OCA/server-auth
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-auth-16-0/server-auth-16-0-auth_admin_passkey
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-auth&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
This module extends the functionality of users module to support loging in
with an extra system administrator password in other user accounts.
* System Administrator has now the possibility to login in with any login
* According to the configuration, Odoo will send a mail to user and admin to
indicate them
* According to the configuration, password can be stored encrypted in
configuration file
**Table of contents**
.. contents::
:local:
Configuration
=============
To enable this feature, once the module installed, you have to add the
following keys in your ``odoo.cfg`` configuration file.
* ``auth_admin_passkey_password``. The password that allows user to logging in
with any login. If not set, the feature is disabled.
* ``auth_admin_passkey_password_sha512_encrypted`` (default False), if enabled,
auth_admin_passkey_password should be the password encrypted with sha512.
On linux, this can be done using this command:
``echo -n YOUR_PASSWORD_AUTH_ADMIN_PASSKEY | sha512sum``
* ``auth_admin_passkey_send_to_user`` (default True), if enabled, an email
will be send to the user, if his account has been used by the
System Administrator.
* ``auth_admin_passkey_sysadmin_email``. If set, an email will be sent to this
mail.
* ``auth_admin_passkey_sysadmin_lang``. the language (exemple en_US), used for
the mail sent to the System Administrator. If not set, the language of the
SUPERUSER_ID user will be used.
**typical Dev / Test configuration section**
No keys to add.
**typical Production configuration section**
.. code-block:: ini
auth_admin_passkey_password = PASSKEY_PASSWORD
auth_admin_passkey_password_sha512_encrypted = True
auth_admin_passkey_send_to_user = True
auth_admin_passkey_sysadmin_email = SYSADMIN_EMAIL
auth_admin_passkey_sysadmin_lang = SYSADMIN_LANG
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-auth/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-auth/issues/new?body=module:%20auth_admin_passkey%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* GRAP
Contributors
~~~~~~~~~~~~
* Eugen Don <eugen.don@don-systems.de>
* Alexandre Papin (https://twitter.com/Fenkiou)
* Sylvain LE GAL (https://twitter.com/legalsylvain)
* Dhara Solanki <dhara.solanki@initos.com> (http://www.initos.com)
* Zina Rasoamanana <zina.rasoamanana@acsone.eu>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
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.
This module is part of the `OCA/server-auth <https://github.com/OCA/server-auth/tree/16.0/auth_admin_passkey>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1 @@
from . import models

View file

@ -0,0 +1,15 @@
# Copyright (C) 2013-Today GRAP (http://www.grap.coop)
# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
{
"name": "Authentification - System Administrator Passkey",
"summary": "Allows system administrator to authenticate with any account",
"version": "16.0.1.0.0",
"category": "base",
"author": "GRAP,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/server-auth",
"license": "AGPL-3",
"depends": ["mail"],
"installable": True,
}

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-12 03:50+0000\n"
"PO-Revision-Date: 2017-01-11 15:36+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Arabic (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/ar/)\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "المستخدمون"

View file

@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""

View file

@ -0,0 +1,41 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Korišten ključ"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr "Korisnik"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-17 07:51+0000\n"
"PO-Revision-Date: 2015-09-18 13:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: Catalan (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/ca/)\n"
"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Usuaris"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-03-18 02:08+0000\n"
"PO-Revision-Date: 2015-09-18 13:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: Danish (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/da/)\n"
"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Brugere"

View file

@ -0,0 +1,103 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-01 02:43+0000\n"
"PO-Revision-Date: 2017-08-01 02:43+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Verwendeter PassKey"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr ""
#~ "<pre>Benutzer mit Anmeldename '%s' hat das gleiche Passwort wie Sie.</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "Admin-Benutzer hat seinen PassKey verwendet, um sich als '%s' "
#~ "anzumelden.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technische Information folgt : \n"
#~ "\n"
#~ "- Login-Datum: %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "PassKey"
#~ msgid "Send email to admin user."
#~ msgstr "Sende Email an Admin-Benutzer."
#~ msgid "Send email to user."
#~ msgstr "Sende Email an Benutzer"
#~ msgid "Users"
#~ msgstr "Benutzer"
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the account user."
#~ msgstr ""
#~ "Wenn der Administrator sein Passwort verwendet, um sich mit anderem Konto "
#~ "anzumelden, sendet das System dem Kontoinhaber eine Email."
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the admin user."
#~ msgstr ""
#~ "Wenn der Administrator sein Passwort verwendet, um sich als anderer "
#~ "Benutzer anzumelden, wird Oddoeine entsprechende Email an den Admin-"
#~ "Nutzer senden."
#, python-format
#~ msgid "[WARNING] Odoo Security Risk"
#~ msgstr "[Warnung] Odoo Sicherheitsrisiko"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-12 03:50+0000\n"
"PO-Revision-Date: 2015-09-18 13:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: Greek (Greece) (http://www.transifex.com/oca/OCA-server-"
"tools-8-0/language/el_GR/)\n"
"Language: el_GR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Χρήστες"

View file

@ -0,0 +1,118 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
# enjolras <yo@miguelrevilla.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-02 18:39+0000\n"
"PO-Revision-Date: 2023-10-15 19:36+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Clave de acceso utilizada"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
"El usuario administrador del sistema utilizó su clave de acceso para "
"conectarse con %(login)s.\n"
"\n"
"\n"
"\n"
"Información técnica \n"
"\n"
"- Fecha de conexión : %(login_date)s\n"
"\n"
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr "Usuario"
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr ""
#~ "<pre>El usuario con identificador '%s' tiene la misma contraseña que "
#~ "usted.</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "El usuario administrador ha usado su contraseña para acceder a '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Datos técnicos a continuación : \n"
#~ "\n"
#~ "- Fecha de acceso : %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "Clave de acceso"
#~ msgid "Send email to admin user."
#~ msgstr "Enviar email al usuario administrador."
#~ msgid "Send email to user."
#~ msgstr "Enviar email al usuario."
#~ msgid "Users"
#~ msgstr "Usuarios"
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the account user."
#~ msgstr ""
#~ "Cuando el administrador usa su contraseña para iniciar sesión con una "
#~ "cuenta diferente, Odoo enviará un correo electrónico al usuario de la "
#~ "cuenta."
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the admin user."
#~ msgstr ""
#~ "Cuando el administrador usa su contraseña para iniciar sesión con una "
#~ "cuenta diferente, Odoo enviará un correo electrónico al usuario "
#~ "administrador."
#, python-format
#~ msgid "[WARNING] Odoo Security Risk"
#~ msgstr "[ADVERTENCIA] Riesgo de seguridad de Odoo"
#~ msgid "base.config.settings"
#~ msgstr "base.config.settings"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-12 03:50+0000\n"
"PO-Revision-Date: 2015-09-18 13:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: Spanish (Spain) (http://www.transifex.com/oca/OCA-server-"
"tools-8-0/language/es_ES/)\n"
"Language: es_ES\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Usuarios"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-04-14 07:01+0000\n"
"PO-Revision-Date: 2016-04-04 11:03+0000\n"
"Last-Translator: Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>\n"
"Language-Team: Finnish (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/fi/)\n"
"Language: fi\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Käyttäjät"

View file

@ -0,0 +1,107 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
# Nicolas JEUDY <njeudy@panda-chi.io>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:09+0000\n"
"PO-Revision-Date: 2017-12-01 02:09+0000\n"
"Last-Translator: Nicolas JEUDY <njeudy@panda-chi.io>, 2017\n"
"Language-Team: French (https://www.transifex.com/oca/teams/23907/fr/)\n"
"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Mot de passe \"bris de glace\" utilisé"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr ""
#~ "<pre>L'utilisateur dont l'identifiant est '%s' a le même mot de passe que "
#~ "vous.</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "L'administrateur a utilisé son mot de passe \"bris de glace\" pour "
#~ "s'identifier avec l'identifiant '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Informations techniques ci-dessous : \n"
#~ "\n"
#~ "- Date d'authentification : %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "Mot de passe \"bris de glace\""
#~ msgid "Send email to admin user."
#~ msgstr "Envoyer un email à l'administrateur."
#~ msgid "Send email to user."
#~ msgstr "Envoyer un email à l'utilisateur."
#~ msgid "Users"
#~ msgstr "Utilisateurs"
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the account user."
#~ msgstr ""
#~ "Quand l'administrateur utilise son mot de passe pour s'authentifier avec "
#~ "un compte différent, Odoo lui enverra un mail."
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the admin user."
#~ msgstr ""
#~ "Quand l'administrateur utilise son mot de passe pour s'authentifier avec "
#~ "un compte différent, Odoo enverra un mail à l'utilisateur."
#, python-format
#~ msgid "[WARNING] Odoo Security Risk"
#~ msgstr "[WARNING] Faille de sécurité sur Odoo"
#~ msgid "base.config.settings"
#~ msgstr "base.config.settings"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-30 14:52+0000\n"
"PO-Revision-Date: 2015-09-18 13:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: French (Switzerland) (http://www.transifex.com/oca/OCA-server-"
"tools-8-0/language/fr_CH/)\n"
"Language: fr_CH\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Utilisateurs"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# Aurel <theaurel60@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-01 02:43+0000\n"
"PO-Revision-Date: 2017-08-01 02:43+0000\n"
"Last-Translator: Aurel <theaurel60@gmail.com>, 2017\n"
"Language-Team: French (France) (https://www.transifex.com/oca/teams/23907/"
"fr_FR/)\n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Utilsateurs"

View file

@ -0,0 +1,106 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
# Bole <bole@dajmi5.com>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-03-02 18:39+0000\n"
"PO-Revision-Date: 2019-11-13 17:34+0000\n"
"Last-Translator: Bole <bole@dajmi5.com>\n"
"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n"
"Language: hr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
"X-Generator: Weblate 3.8\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Korišten ključ"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr "<pre>Korisnik '%s' ima istu zaporku kao i Vi.</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "Administrator je koristio svoj ključ za prijavu kao '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Tehničke informacije : \n"
#~ "\n"
#~ "- Datum prijave : %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "Ključ"
#~ msgid "Send email to admin user."
#~ msgstr "Pošalji mail administratoru."
#~ msgid "Send email to user."
#~ msgstr "Pošalji mail korisniku."
#~ msgid "Users"
#~ msgstr "Korisnici"
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the account user."
#~ msgstr ""
#~ "Kas administrator koristi svoju zaporku za prijavu kao drugi korisnik, "
#~ "odoo će korisniku poslati email obavijest o tome."
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the admin user."
#~ msgstr ""
#~ "Kas administrator koristi svoju zaporku za prijavu kao drugi korisnik, "
#~ "odoo će administratoru poslati email obavijest o tome."
#, python-format
#~ msgid "[WARNING] Odoo Security Risk"
#~ msgstr "[UPOZORENJE] Odoo sigurnosni rizik"
#~ msgid "base.config.settings"
#~ msgstr "base.config.settings"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-12 03:50+0000\n"
"PO-Revision-Date: 2017-01-11 15:38+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>\n"
"Language-Team: Croatian (Croatia) (http://www.transifex.com/oca/OCA-server-"
"tools-8-0/language/hr_HR/)\n"
"Language: hr_HR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Korisnici"

View file

@ -0,0 +1,96 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-01 02:43+0000\n"
"PO-Revision-Date: 2024-01-03 14:33+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Chiave di accesso utilizzata"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
"L'utente amministratore di sistemaha usato la sua passkey per accedere con "
"%(login)s.\n"
"\n"
"\n"
"\n"
"Informazioni tecniche di seguito: \n"
"\n"
"- Data accesso : %(login_date)s\n"
"\n"
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr "Utente"
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr "<pre>La password è identica a quella dell'utente \"%s\".</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "L'utente amministratore ha usato la sua chiave per accedere con l'utente "
#~ "'%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Informazioni tecniche qui sotto : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "Chiave di accesso"
#~ msgid "Send email to admin user."
#~ msgstr "Invia email all'utente amministratore."
#~ msgid "Send email to user."
#~ msgstr "Invia email all'utente."
#~ msgid "Users"
#~ msgstr "Utenti"
#~ msgid "base.config.settings"
#~ msgstr "base.config.settings"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-12 03:50+0000\n"
"PO-Revision-Date: 2015-09-18 13:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: Dutch (http://www.transifex.com/oca/OCA-server-tools-8-0/"
"language/nl/)\n"
"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Gebruikers"

View file

@ -0,0 +1,56 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# Peter Hageman <hageman.p@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-01 02:09+0000\n"
"PO-Revision-Date: 2017-12-01 02:09+0000\n"
"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Send email to user."
#~ msgstr "Stuur email naar gebruiker."
#~ msgid "Users"
#~ msgstr "Gebruikers"
#~ msgid "base.config.settings"
#~ msgstr "base.config.settings"

View file

@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# Pedro Castro Silva <pedrocs@sossia.pt>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-01 02:43+0000\n"
"PO-Revision-Date: 2018-07-30 17:15+0000\n"
"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
"Language-Team: Portuguese (https://www.transifex.com/oca/teams/23907/pt/)\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Weblate 3.1.1\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Chave-mestra utilizada"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr "<pre>A palavra-passe do utilizador '%s' é igual à sua.</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "O utilizador Admin usou a sua chave-mestra para iniciar sessão com '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Informação técnica em baixo : \n"
#~ "\n"
#~ "- Data de início de sessão : %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "Chave-mestra"
#~ msgid "Send email to admin user."
#~ msgstr "Enviar email para o utilizador admin."
#~ msgid "Send email to user."
#~ msgstr "Enviar email para o utilizador."
#~ msgid "Users"
#~ msgstr "Utilizadores"
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the account user."
#~ msgstr ""
#~ "Quando o administrador usar a sua palavra-passe para iniciar sessão com "
#~ "uma conta diferente, o Odoo enviará um email para o utilizador da conta."
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the admin user."
#~ msgstr ""
#~ "Quando o administrador usar a sua palavra-passe para iniciar sessão com "
#~ "uma conta diferente, o Odoo enviará um email para o utilizador admin."
#, python-format
#~ msgid "[WARNING] Odoo Security Risk"
#~ msgstr "[AVISO] Risco de Segurança do Odoo"

View file

@ -0,0 +1,115 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-01 02:43+0000\n"
"PO-Revision-Date: 2024-05-22 11:37+0000\n"
"Last-Translator: Rodrigo Macedo <sottomaiormacedotec@users.noreply."
"translation.odoo-community.org>\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/"
"23907/pt_BR/)\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Passkey usada"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
"O usuário administrador do sistema usou sua senha para fazer login com "
"%(login)s.\n"
"\n"
"\n"
"\n"
"Informações técnicas abaixo:\n"
"\n"
"- Data de login: %(login_date)s\n"
"\n"
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr "Usuário"
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr "<pre>Usuário com login '%s' tem a mesma senha que você.</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "O usuário administrador usou sua senha para fazer login com '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Informações técnicas abaixo:\n"
#~ "\n"
#~ "- Data de login : %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "Chave de acesso"
#~ msgid "Send email to admin user."
#~ msgstr "Enviar e-mail para usuário administrador."
#~ msgid "Send email to user."
#~ msgstr "Enviar email para usuário."
#~ msgid "Users"
#~ msgstr "Usuários"
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the account user."
#~ msgstr ""
#~ "Quando o administrador usa sua senha para dar login com uma conta "
#~ "diferente, OPENERP irá enviar um email para a conta do usuário."
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the admin user."
#~ msgstr ""
#~ "Quando o administrador usa sua senha para dar login com uma conta "
#~ "diferente, OPENERP irá enviar um email para a conta do administrador."
#, python-format
#~ msgid "[WARNING] Odoo Security Risk"
#~ msgstr "[AVISO] Odoo Risco de Segurança"
#~ msgid "base.config.settings"
#~ msgstr "base.config.settings"

View file

@ -0,0 +1,50 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# Daniel Schweiger <danielcccasle@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-01 02:43+0000\n"
"PO-Revision-Date: 2017-08-01 02:43+0000\n"
"Last-Translator: Daniel Schweiger <danielcccasle@gmail.com>, 2017\n"
"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
"2:1));\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Utilizatori"

View file

@ -0,0 +1,101 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-01 02:43+0000\n"
"PO-Revision-Date: 2017-08-01 02:43+0000\n"
"Last-Translator: OCA Transbot <transbot@odoo-community.org>, 2017\n"
"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n"
"Language: sl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
"%100==4 ? 2 : 3);\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Uporabljen prijavni ključ"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr "<pre>Uporabnik '%s' ima enako geslo kot vi.</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "Administrator je uporabil svoj prijavni ključ za prijavo z '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Tehnični podatki : \n"
#~ "\n"
#~ "- Datum prijave : %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "Prijavni ključ"
#~ msgid "Send email to admin user."
#~ msgstr "Pošlji e-pošto administratorju."
#~ msgid "Send email to user."
#~ msgstr "Pošlji e-pošto uporabniku."
#~ msgid "Users"
#~ msgstr "Uporabniki"
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the account user."
#~ msgstr ""
#~ "Ko administrator uporabi svoje geslo za prijavo v drug račun, bo Odoo "
#~ "poslal e-pošto uporabniku računa."
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the admin user."
#~ msgstr ""
#~ "Ko administrator uporabi svoje geslo za prijavo v drug račun, bo Odoo "
#~ "poslal e-pošto administratorju."
#, python-format
#~ msgid "[WARNING] Odoo Security Risk"
#~ msgstr "[OPOZORILO] Odoo varnostno tveganje"

View file

@ -0,0 +1,110 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
# OCA Transbot <transbot@odoo-community.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-01 02:43+0000\n"
"PO-Revision-Date: 2025-02-19 13:06+0000\n"
"Last-Translator: İsmail Çağan Yılmaz <ismail.cagan.yilmaz@gmail.com>\n"
"Language-Team: Turkish (https://www.transifex.com/oca/teams/23907/tr/)\n"
"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Weblate 5.6.2\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr "Kullanılan parola"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
"Sistem Yöneticisi kullanıcısı %(login)s ile oturum açmak için parolasını "
"kullandı.\n"
"\n"
"\n"
"\n"
"Teknik bilgiler aşağıdadır: \n"
"\n"
"- Giriş tarihi : %(login_date)s\n"
"\n"
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr "Kullanıcı"
#, python-format
#~ msgid "<pre>User with login '%s' has the same password as you.</pre>"
#~ msgstr "<pre> '%s' kullanıcısının şifresi sizinkiyle aynı.</pre>"
#, python-format
#~ msgid ""
#~ "Admin user used his passkey to login with '%s'.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Technicals informations belows : \n"
#~ "\n"
#~ "- Login date : %s\n"
#~ "\n"
#~ msgstr ""
#~ "Yönetici şifresini kullanarak '%s'. kullanıcısıyla giriş yaptı.\n"
#~ "\n"
#~ "\n"
#~ "\n"
#~ "Teknik detaylar aşağıda : \n"
#~ "\n"
#~ "- Giriş zamanı : %s\n"
#~ "\n"
#~ msgid "Passkey"
#~ msgstr "Parola"
#~ msgid "Send email to admin user."
#~ msgstr "Yöneticiye e-posta gönder."
#~ msgid "Send email to user."
#~ msgstr "Kullanıcıya e-posta gönder."
#~ msgid "Users"
#~ msgstr "Kullanıcılar"
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the account user."
#~ msgstr ""
#~ "Yönetici farklı bir hesaba şifresiyle giriş yaparsa. Odoo hesap sahibine "
#~ "e-posta gönderecek."
#~ msgid ""
#~ "When the administrator use his password to login in with a different "
#~ "account, Odoo will send an email to the admin user."
#~ msgstr ""
#~ "Yönetici şifresiyle farklı bir kullanıcının hesabına giriş yaparsa, Odoo "
#~ "yöneticiye e-posta gönderir."
#, python-format
#~ msgid "[WARNING] Odoo Security Risk"
#~ msgstr "[UYARI] Odoo Güvenlik Riski"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-12-31 08:34+0000\n"
"PO-Revision-Date: 2015-09-18 13:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: Turkish (Turkey) (http://www.transifex.com/oca/OCA-server-"
"tools-8-0/language/tr_TR/)\n"
"Language: tr_TR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "Kullanıcılar"

View file

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_admin_passkey
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-01-12 03:50+0000\n"
"PO-Revision-Date: 2015-09-18 13:53+0000\n"
"Last-Translator: <>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/oca/OCA-server-"
"tools-8-0/language/zh_CN/)\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid "Passkey used"
msgstr ""
#. module: auth_admin_passkey
#. odoo-python
#: code:addons/auth_admin_passkey/models/res_users.py:0
#, python-format
msgid ""
"System Administrator user used his passkey to login with %(login)s.\n"
"\n"
"\n"
"\n"
"Technicals informations belows : \n"
"\n"
"- Login date : %(login_date)s\n"
"\n"
msgstr ""
#. module: auth_admin_passkey
#: model:ir.model,name:auth_admin_passkey.model_res_users
msgid "User"
msgstr ""
#~ msgid "Users"
#~ msgstr "用户"

View file

@ -0,0 +1 @@
from . import res_users

View file

@ -0,0 +1,79 @@
# Copyright (C) 2013-Today GRAP (http://www.grap.coop)
# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
import hashlib
import logging
from datetime import datetime
from odoo import SUPERUSER_ID, _, api, exceptions, models
from odoo.tools import config
logger = logging.getLogger(__name__)
class ResUsers(models.Model):
_inherit = "res.users"
@api.model
def _send_email_passkey(self, login_user):
"""Send a email to the system administrator and / or the user
to inform passkey use."""
MailMail = self.env["mail.mail"].with_user(SUPERUSER_ID)
admin_user = self.with_user(SUPERUSER_ID).browse(SUPERUSER_ID)
send_to_user = config.get("auth_admin_passkey_send_to_user", True)
sysadmin_email = config.get("auth_admin_passkey_sysadmin_email", False)
mails = []
if sysadmin_email:
lang = config.get("auth_admin_passkey_sysadmin_lang", admin_user.lang)
mails.append({"email": sysadmin_email, "lang": lang})
if send_to_user and login_user.email:
mails.append({"email": login_user.email, "lang": login_user.lang})
for mail in mails:
subject, body_html = self._prepare_email_passkey(login_user)
MailMail.create(
{"email_to": mail["email"], "subject": subject, "body_html": body_html}
)
@api.model
def _prepare_email_passkey(self, login_user):
subject = _("Passkey used")
body = _(
"System Administrator user used his passkey to login"
" with %(login)s."
"\n\n\n\n"
"Technicals informations belows : \n\n"
"- Login date : %(login_date)s\n\n"
) % {
"login": login_user.login,
"login_date": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
}
return subject, "<pre>%s</pre>" % body
def _check_credentials(self, password, env):
try:
return super(ResUsers, self)._check_credentials(password, env)
except exceptions.AccessDenied:
# Just be sure that parent methods aren't wrong
users = self.with_user(SUPERUSER_ID).search([("id", "=", self._uid)])
if not users:
raise
file_password = config.get("auth_admin_passkey_password", False)
password_encrypted = config.get(
"auth_admin_passkey_password_sha512_encrypted", False
)
if password_encrypted and password:
# password stored on config is encrypted
password = hashlib.sha512(password.encode()).hexdigest()
if password and file_password == password:
self._send_email_passkey(users[0])
else:
raise

View file

@ -0,0 +1,38 @@
To enable this feature, once the module installed, you have to add the
following keys in your ``odoo.cfg`` configuration file.
* ``auth_admin_passkey_password``. The password that allows user to logging in
with any login. If not set, the feature is disabled.
* ``auth_admin_passkey_password_sha512_encrypted`` (default False), if enabled,
auth_admin_passkey_password should be the password encrypted with sha512.
On linux, this can be done using this command:
``echo -n YOUR_PASSWORD_AUTH_ADMIN_PASSKEY | sha512sum``
* ``auth_admin_passkey_send_to_user`` (default True), if enabled, an email
will be send to the user, if his account has been used by the
System Administrator.
* ``auth_admin_passkey_sysadmin_email``. If set, an email will be sent to this
mail.
* ``auth_admin_passkey_sysadmin_lang``. the language (exemple en_US), used for
the mail sent to the System Administrator. If not set, the language of the
SUPERUSER_ID user will be used.
**typical Dev / Test configuration section**
No keys to add.
**typical Production configuration section**
.. code-block:: ini
auth_admin_passkey_password = PASSKEY_PASSWORD
auth_admin_passkey_password_sha512_encrypted = True
auth_admin_passkey_send_to_user = True
auth_admin_passkey_sysadmin_email = SYSADMIN_EMAIL
auth_admin_passkey_sysadmin_lang = SYSADMIN_LANG

View file

@ -0,0 +1,5 @@
* Eugen Don <eugen.don@don-systems.de>
* Alexandre Papin (https://twitter.com/Fenkiou)
* Sylvain LE GAL (https://twitter.com/legalsylvain)
* Dhara Solanki <dhara.solanki@initos.com> (http://www.initos.com)
* Zina Rasoamanana <zina.rasoamanana@acsone.eu>

View file

@ -0,0 +1,10 @@
This module extends the functionality of users module to support loging in
with an extra system administrator password in other user accounts.
* System Administrator has now the possibility to login in with any login
* According to the configuration, Odoo will send a mail to user and admin to
indicate them
* According to the configuration, password can be stored encrypted in
configuration file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

View file

@ -0,0 +1,465 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Authentification - System Administrator Passkey</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="authentification-system-administrator-passkey">
<h1 class="title">Authentification - System Administrator Passkey</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:5747081959f948bc3969ac96543ca8e56a01418bff23687907352ae112298d85
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-auth/tree/16.0/auth_admin_passkey"><img alt="OCA/server-auth" src="https://img.shields.io/badge/github-OCA%2Fserver--auth-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-auth-16-0/server-auth-16-0-auth_admin_passkey"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-auth&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>This module extends the functionality of users module to support loging in
with an extra system administrator password in other user accounts.</p>
<ul class="simple">
<li>System Administrator has now the possibility to login in with any login</li>
<li>According to the configuration, Odoo will send a mail to user and admin to
indicate them</li>
<li>According to the configuration, password can be stored encrypted in
configuration file</li>
</ul>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p>To enable this feature, once the module installed, you have to add the
following keys in your <tt class="docutils literal">odoo.cfg</tt> configuration file.</p>
<ul class="simple">
<li><tt class="docutils literal">auth_admin_passkey_password</tt>. The password that allows user to logging in
with any login. If not set, the feature is disabled.</li>
<li><tt class="docutils literal">auth_admin_passkey_password_sha512_encrypted</tt> (default False), if enabled,
auth_admin_passkey_password should be the password encrypted with sha512.
On linux, this can be done using this command:
<tt class="docutils literal">echo <span class="pre">-n</span> YOUR_PASSWORD_AUTH_ADMIN_PASSKEY | sha512sum</tt></li>
<li><tt class="docutils literal">auth_admin_passkey_send_to_user</tt> (default True), if enabled, an email
will be send to the user, if his account has been used by the
System Administrator.</li>
<li><tt class="docutils literal">auth_admin_passkey_sysadmin_email</tt>. If set, an email will be sent to this
mail.</li>
<li><tt class="docutils literal">auth_admin_passkey_sysadmin_lang</tt>. the language (exemple en_US), used for
the mail sent to the System Administrator. If not set, the language of the
SUPERUSER_ID user will be used.</li>
</ul>
<p><strong>typical Dev / Test configuration section</strong></p>
<p>No keys to add.</p>
<p><strong>typical Production configuration section</strong></p>
<pre class="code ini literal-block">
<span class="na">auth_admin_passkey_password</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">PASSKEY_PASSWORD</span><span class="w">
</span><span class="na">auth_admin_passkey_password_sha512_encrypted</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">True</span><span class="w">
</span><span class="na">auth_admin_passkey_send_to_user</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">True</span><span class="w">
</span><span class="na">auth_admin_passkey_sysadmin_email</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">SYSADMIN_EMAIL</span><span class="w">
</span><span class="na">auth_admin_passkey_sysadmin_lang</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">SYSADMIN_LANG</span>
</pre>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-auth/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/server-auth/issues/new?body=module:%20auth_admin_passkey%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
<ul class="simple">
<li>GRAP</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
<ul class="simple">
<li>Eugen Don &lt;<a class="reference external" href="mailto:eugen.don&#64;don-systems.de">eugen.don&#64;don-systems.de</a>&gt;</li>
<li>Alexandre Papin (<a class="reference external" href="https://twitter.com/Fenkiou">https://twitter.com/Fenkiou</a>)</li>
<li>Sylvain LE GAL (<a class="reference external" href="https://twitter.com/legalsylvain">https://twitter.com/legalsylvain</a>)</li>
<li>Dhara Solanki &lt;<a class="reference external" href="mailto:dhara.solanki&#64;initos.com">dhara.solanki&#64;initos.com</a>&gt; (<a class="reference external" href="http://www.initos.com">http://www.initos.com</a>)</li>
<li>Zina Rasoamanana &lt;<a class="reference external" href="mailto:zina.rasoamanana&#64;acsone.eu">zina.rasoamanana&#64;acsone.eu</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-auth/tree/16.0/auth_admin_passkey">OCA/server-auth</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1,2 @@
from . import test_auth_admin_passkey
from . import test_ui

View file

@ -0,0 +1,77 @@
# Copyright (C) 2013-Today GRAP (http://www.grap.coop)
# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from odoo import exceptions
from odoo.tests import common, tagged
from odoo.tools import config
@tagged("post_install", "-at_install")
class TestAuthAdminPasskey(common.TransactionCase):
"""Tests for 'Auth Admin Passkey' Module"""
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.ResUsers = cls.env["res.users"]
cls.db = cls.env.cr.dbname
cls.user_login = "auth_admin_passkey_user"
cls.user_password = "Auth_admin_passkey_password*1"
cls.sysadmin_passkey = "SysAdminPasskeyPa$$w0rd"
# sysadmin_passkey encrypted with command:
# echo -n 'SysAdminPasskeyPa$$w0rd' | sha512sum
cls.sysadmin_passkey_encrypted = (
"364e3543996125e3408"
"4b8eca00e328d4acdff9d24126c53624101812f8ed411fd38ecc9"
"b64807adbf56b02d0315e209a61a193a85003488ca27af573801e65e"
)
cls.bad_password = "Bad_password*000001"
cls.bad_login = "bad_login"
user = cls.ResUsers.create(
{
"login": cls.user_login,
"password": cls.user_password,
"name": "auth_admin_passkey User",
}
)
cls.user = user.with_user(user)
def test_01_normal_login_succeed(self):
self.user._check_credentials(self.user_password, {"interactive": True})
def test_02_normal_login_fail(self):
with self.assertRaises(exceptions.AccessDenied):
self.user._check_credentials(self.bad_password, {"interactive": True})
def test_03_normal_login_passkey_fail(self):
# This should failed, because feature is disabled
config["auth_admin_passkey_password"] = False
config["auth_admin_passkey_password_sha512_encrypted"] = False
with self.assertRaises(exceptions.AccessDenied):
self.user._check_credentials(self.sysadmin_passkey, {"interactive": True})
def test_04_normal_login_passkey_succeed(self):
# This should succeed, because feature is enabled
config["auth_admin_passkey_password"] = self.sysadmin_passkey
config["auth_admin_passkey_password_sha512_encrypted"] = False
self.user._check_credentials(self.sysadmin_passkey, {"interactive": True})
def test_05_passkey_login_passkey_succeed(self):
"""[Bug #1319391]
Test the correct behaviour of login with 'bad_login' / 'admin'"""
with self.assertRaises(exceptions.AccessDenied):
self.ResUsers.authenticate(
self.db, self.bad_login, self.sysadmin_passkey, {}
)
def test_06_normal_login_passkey_succeed_encrypted_password(self):
# This should succeed, because feature is enabled
config["auth_admin_passkey_password"] = self.sysadmin_passkey_encrypted
config["auth_admin_passkey_password_sha512_encrypted"] = True
self.user._check_credentials(self.sysadmin_passkey, {"interactive": True})

View file

@ -0,0 +1,174 @@
# Copyright (C) 2013-Today GRAP (http://www.grap.coop)
# @author Sylvain LE GAL (https://twitter.com/legalsylvain)
# License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
from lxml import html
from werkzeug.test import Client
from werkzeug.wrappers import Response
from odoo import http
from odoo.tests import common, tagged
from odoo.tools import config
@tagged("post_install", "-at_install")
class TestUI(common.HttpCase):
@classmethod
def setUpClass(cls):
super().setUpClass()
cls.env = cls.env(context=dict(cls.env.context, tracking_disable=True))
cls.werkzeug_environ = {"REMOTE_ADDR": "127.0.0.1"}
cls.test_client = Client(http.root, Response)
cls.test_client.get("/web/session/logout")
def setUp(self):
super().setUp()
with self.registry.cursor() as test_cursor:
env = self.env(test_cursor)
self.user_login = "auth_admin_passkey_user"
self.user_password = "Auth_admin_passkey_password*1"
self.sysadmin_passkey = "SysAdminPasskeyPa$$w0rd"
# sysadmin_passkey encrypted with command:
# echo -n 'SysAdminPasskeyPa$$w0rd' | sha512sum
self.sysadmin_passkey_encrypted = (
"364e3543996125e3408"
"4b8eca00e328d4acdff9d24126c53624101812f8ed411fd38ecc9"
"b64807adbf56b02d0315e209a61a193a85003488ca27af573801e65e"
)
self.bad_password = "Bad_password*000001"
self.bad_login = "bad_login"
self.user = env["res.users"].create(
{
"login": self.user_login,
"password": self.user_password,
"name": "auth_admin_passkey User",
}
)
self.dbname = env.cr.dbname
def html_doc(self, response):
"""Get an HTML LXML document."""
return html.fromstring(response.data)
def csrf_token(self, response):
"""Get a valid CSRF token."""
doc = self.html_doc(response)
return doc.xpath("//input[@name='csrf_token']")[0].get("value")
def get_request(self, url, data=None):
return self.test_client.get(url, query_string=data, follow_redirects=True)
def post_request(self, url, data=None):
return self.test_client.post(
url, data=data, follow_redirects=True, environ_base=self.werkzeug_environ
)
def test_01_normal_login_succeed(self):
# Our user wants to go to backoffice part of Odoo
response = self.get_request("/web/", data={"db": self.dbname})
# He notices that his redirected to login page as not authenticated
self.assertIn("oe_login_form", response.data.decode("utf8"))
# He needs to enters his credentials and submit the form
data = {
"login": self.user_login,
"password": self.user_password,
"csrf_token": self.csrf_token(response),
"db": self.dbname,
}
response = self.post_request("/web/login/", data=data)
# He notices that his redirected to backoffice
self.assertNotIn("oe_login_form", response.data.decode("utf8"))
def test_02_normal_login_fail(self):
# Our user wants to go to backoffice part of Odoo
response = self.get_request("/web/", data={"db": self.dbname})
# He notices that he's redirected to login page as not authenticated
self.assertIn("oe_login_form", response.data.decode("utf8"))
# He needs to enter his credentials and submit the form
data = {
"login": self.user_login,
"password": self.bad_password,
"csrf_token": self.csrf_token(response),
"db": self.dbname,
}
response = self.post_request("/web/login/", data=data)
# He mistyped his password so he's redirected to login page again
self.assertIn("Wrong login/password", response.data.decode("utf8"))
def test_03_passkey_login_succeed(self):
# We enable auth_admin_passkey feature
config["auth_admin_passkey_password"] = self.sysadmin_passkey
config["auth_admin_passkey_password_sha512_encrypted"] = False
# Our passkey user wants to go to backoffice part of Odoo
response = self.get_request("/web/", data={"db": self.dbname})
# He notices that he's redirected to login page as not authenticated
self.assertIn("oe_login_form", response.data.decode("utf8"))
# He needs to enter his credentials and submit the form
data = {
"login": self.user_login,
"password": self.sysadmin_passkey,
"csrf_token": self.csrf_token(response),
"db": self.dbname,
}
response = self.post_request("/web/login/", data=data)
# He notices that his redirected to backoffice
self.assertNotIn("oe_login_form", response.data.decode("utf8"))
def test_04_passkey_login_fail(self):
# We disable auth_admin_passkey feature
config["auth_admin_passkey_password"] = False
config["auth_admin_passkey_password_sha512_encrypted"] = False
# Our passkey user wants to go to backoffice part of Odoo
response = self.get_request("/web/", data={"db": self.dbname})
# He notices that he's redirected to login page as not authenticated
self.assertIn("oe_login_form", response.data.decode("utf8"))
# He needs to enter his credentials and submit the form
data = {
"login": self.user_login,
"password": self.sysadmin_passkey,
"csrf_token": self.csrf_token(response),
"db": self.dbname,
}
response = self.post_request("/web/login/", data=data)
# Passkey feature is disabled so he's redirected to login page again
self.assertIn("Wrong login/password", response.data.decode("utf8"))
def test_05_passkey_login_encrypted_succeed(self):
# We enable auth_admin_passkey feature with encryption
config["auth_admin_passkey_password"] = self.sysadmin_passkey_encrypted
config["auth_admin_passkey_password_sha512_encrypted"] = True
# Our passkey user wants to go to backoffice part of Odoo
response = self.get_request("/web/", data={"db": self.dbname})
# He notices that he's redirected to login page as not authenticated
self.assertIn("oe_login_form", response.data.decode("utf8"))
# He needs to enter his credentials and submit the form
data = {
"login": self.user_login,
"password": self.sysadmin_passkey,
"csrf_token": self.csrf_token(response),
"db": self.dbname,
}
response = self.post_request("/web/login/", data=data)
# He notices that his redirected to backoffice
self.assertNotIn("oe_login_form", response.data.decode("utf8"))

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Auth_admin_passkey Module - auth_admin_passkey
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for auth_admin_passkey. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,5 @@
# Dependencies
This addon depends on:
- [mail](../../odoo-bringout-oca-ocb-mail)

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon auth_admin_passkey or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-server-auth-auth_admin_passkey"
# or
uv pip install odoo-bringout-oca-server-auth-auth_admin_passkey"
```

View file

@ -0,0 +1,12 @@
# Models
Detected core models and extensions in auth_admin_passkey.
```mermaid
classDiagram
class res_users
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: auth_admin_passkey. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon auth_admin_passkey
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,8 @@
# Security
This module does not define custom security rules or access controls beyond Odoo defaults.
Default Odoo security applies:
- Base user access through standard groups
- Model access inherited from dependencies
- No custom row-level security rules

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon auth_admin_passkey
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-server-auth-auth_admin_passkey"
version = "16.0.0"
description = "Authentification - System Administrator Passkey - Allows system administrator to authenticate with any account"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"odoo-bringout-oca-ocb-mail>=16.0.0",
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["auth_admin_passkey"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,46 @@
# Auth Api Key
Odoo addon: auth_api_key
## Installation
```bash
pip install odoo-bringout-oca-server-auth-auth_api_key
```
## Dependencies
This addon depends on:
## Manifest Information
- **Name**: Auth Api Key
- **Version**: 16.0.1.0.1
- **Category**: N/A
- **License**: LGPL-3
- **Installable**: False
## Source
Based on [OCA/server-auth](https://github.com/OCA/server-auth) branch 16.0, addon `auth_api_key`.
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,114 @@
.. image:: https://odoo-community.org/readme-banner-image
:target: https://odoo-community.org/get-involved?utm_source=readme
:alt: Odoo Community Association
============
Auth Api Key
============
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:1d519ddd25033f9a32033563edf36cc5df3ef91de4d6555d4889bf2f44c62cb9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--auth-lightgray.png?logo=github
:target: https://github.com/OCA/server-auth/tree/16.0/auth_api_key
:alt: OCA/server-auth
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-auth-16-0/server-auth-16-0-auth_api_key
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-auth&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
Authenticate http requests from an API key.
API keys are codes passed in (in the http header API-KEY)
by programs calling an API in order to identify -in this case- the calling program's user.
Take care while using this kind of mechanism since information into http headers are visible in clear.
Thus, use it only to authenticate requests from known sources.
For unknown sources, it is a good practice to filter out this header at proxy level.
**Table of contents**
.. contents::
:local:
Configuration
=============
The api key menu is available into Settings > Technical in debug mode.
By default, when you create an API key, the key is saved into the database.
If you want to manage them via serve environment settings use `auth_api_key_server_env`.
Usage
=====
To apply this authentication system to your http request you must set 'api_key'
as value for the 'auth' parameter of your route definition into your controller.
.. code-block:: python
class MyController(Controller):
@route('/my_service', auth='api_key', ...)
def my_service(self, *args, **kwargs):
pass
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-auth/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-auth/issues/new?body=module:%20auth_api_key%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* ACSONE SA/NV
Contributors
~~~~~~~~~~~~
* Denis Robinet <denis.robinet@acsone.eu>
* Laurent Mignon <laurent.mignon@acsone.eu>
* Quentin Groulard <quentin.groulard@acsone.eu>
* Sébastien Beau <sebastien.beau@akretion.com>
* Chafique Delli <chafique.delli@akretion.com>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
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.
This module is part of the `OCA/server-auth <https://github.com/OCA/server-auth/tree/16.0/auth_api_key>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1 @@
from . import models

View file

@ -0,0 +1,14 @@
# Copyright 2018 ACSONE SA/NV
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
{
"name": "Auth Api Key",
"summary": """
Authenticate http requests from an API key""",
"version": "16.0.1.0.1",
"license": "LGPL-3",
"author": "ACSONE SA/NV,Odoo Community Association (OCA)",
"website": "https://github.com/OCA/server-auth",
"development_status": "Beta",
"data": ["security/ir.model.access.csv", "views/auth_api_key.xml"],
}

View file

@ -0,0 +1,113 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_api_key
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: auth_api_key
#: model:ir.model,name:auth_api_key.model_auth_api_key
msgid "API Key"
msgstr ""
#. module: auth_api_key
#: model:ir.model.constraint,message:auth_api_key.constraint_auth_api_key_name_uniq
msgid "Api Key name must be unique."
msgstr ""
#. module: auth_api_key
#: model:ir.actions.act_window,name:auth_api_key.auth_api_key_act_window
#: model:ir.ui.menu,name:auth_api_key.auth_api_key_menu
msgid "Auth Api Key"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__create_uid
msgid "Created by"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__create_date
msgid "Created on"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__display_name
msgid "Display Name"
msgstr ""
#. module: auth_api_key
#: model:ir.model,name:auth_api_key.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__id
msgid "ID"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__key
msgid "Key"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key____last_update
msgid "Last Modified on"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__write_uid
msgid "Last Updated by"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__write_date
msgid "Last Updated on"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__name
msgid "Name"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,help:auth_api_key.field_auth_api_key__key
msgid ""
"The API key. Enter a dummy value in this field if it is\n"
" obtained from the server environment configuration."
msgstr ""
#. module: auth_api_key
#. odoo-python
#: code:addons/auth_api_key/models/auth_api_key.py:0
#, python-format
msgid "The key %s is not allowed"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,help:auth_api_key.field_auth_api_key__user_id
msgid ""
"The user used to process the requests authenticated by\n"
" the api key"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__user_id
msgid "User"
msgstr ""
#. module: auth_api_key
#. odoo-python
#: code:addons/auth_api_key/models/auth_api_key.py:0
#, python-format
msgid "User is not allowed"
msgstr ""

View file

@ -0,0 +1,113 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_api_key
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: auth_api_key
#: model:ir.model,name:auth_api_key.model_auth_api_key
msgid "API Key"
msgstr "API ključ"
#. module: auth_api_key
#: model:ir.model.constraint,message:auth_api_key.constraint_auth_api_key_name_uniq
msgid "Api Key name must be unique."
msgstr "Naziv API ključa mora biti jedinstven."
#. module: auth_api_key
#: model:ir.actions.act_window,name:auth_api_key.auth_api_key_act_window
#: model:ir.ui.menu,name:auth_api_key.auth_api_key_menu
msgid "Auth Api Key"
msgstr "Auth API ključ"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: auth_api_key
#: model:ir.model,name:auth_api_key.model_ir_http
msgid "HTTP Routing"
msgstr "HTTP usmjeravanje"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__id
msgid "ID"
msgstr "ID"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__key
msgid "Key"
msgstr "Ključ"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__name
msgid "Name"
msgstr "Naziv:"
#. module: auth_api_key
#: model:ir.model.fields,help:auth_api_key.field_auth_api_key__key
msgid ""
"The API key. Enter a dummy value in this field if it is\n"
" obtained from the server environment configuration."
msgstr ""
#. module: auth_api_key
#. odoo-python
#: code:addons/auth_api_key/models/auth_api_key.py:0
#, python-format
msgid "The key %s is not allowed"
msgstr "Ključ %s nije dozvoljen"
#. module: auth_api_key
#: model:ir.model.fields,help:auth_api_key.field_auth_api_key__user_id
msgid ""
"The user used to process the requests authenticated by\n"
" the api key"
msgstr ""
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__user_id
msgid "User"
msgstr "Korisnik"
#. module: auth_api_key
#. odoo-python
#: code:addons/auth_api_key/models/auth_api_key.py:0
#, python-format
msgid "User is not allowed"
msgstr "Korisnik nije dozvoljen"

View file

@ -0,0 +1,123 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_api_key
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 15.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-08-17 18:58+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 5.6.2\n"
#. module: auth_api_key
#: model:ir.model,name:auth_api_key.model_auth_api_key
msgid "API Key"
msgstr "Chiave API"
#. module: auth_api_key
#: model:ir.model.constraint,message:auth_api_key.constraint_auth_api_key_name_uniq
msgid "Api Key name must be unique."
msgstr "La chiave API deve essere univoca."
#. module: auth_api_key
#: model:ir.actions.act_window,name:auth_api_key.auth_api_key_act_window
#: model:ir.ui.menu,name:auth_api_key.auth_api_key_menu
msgid "Auth Api Key"
msgstr "Chiave API di autenticazione"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__create_date
msgid "Created on"
msgstr "Creato il"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: auth_api_key
#: model:ir.model,name:auth_api_key.model_ir_http
msgid "HTTP Routing"
msgstr "Instradamento HTTP"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__id
msgid "ID"
msgstr "ID"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__key
msgid "Key"
msgstr "Chiave"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__name
msgid "Name"
msgstr "Nome"
#. module: auth_api_key
#: model:ir.model.fields,help:auth_api_key.field_auth_api_key__key
msgid ""
"The API key. Enter a dummy value in this field if it is\n"
" obtained from the server environment configuration."
msgstr ""
"Chiave API. Se viene acquisita dalla configurazione\n"
" ambiente del server, inserire nel campo un valore fittizio."
#. module: auth_api_key
#. odoo-python
#: code:addons/auth_api_key/models/auth_api_key.py:0
#, python-format
msgid "The key %s is not allowed"
msgstr "Chiave %s non autorizzata"
#. module: auth_api_key
#: model:ir.model.fields,help:auth_api_key.field_auth_api_key__user_id
msgid ""
"The user used to process the requests authenticated by\n"
" the api key"
msgstr ""
"Utente utilizzato per elaborare le richieste autenticate\n"
" dalla chiave API"
#. module: auth_api_key
#: model:ir.model.fields,field_description:auth_api_key.field_auth_api_key__user_id
msgid "User"
msgstr "Utente"
#. module: auth_api_key
#. odoo-python
#: code:addons/auth_api_key/models/auth_api_key.py:0
#, python-format
msgid "User is not allowed"
msgstr "Utente non autorizzato"
#~ msgid "Server Env Defaults"
#~ msgstr "Variabili ambiente predefinite del server"

View file

@ -0,0 +1,2 @@
from . import ir_http
from . import auth_api_key

View file

@ -0,0 +1,63 @@
# Copyright 2018 ACSONE SA/NV
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from odoo import _, api, fields, models, tools
from odoo.exceptions import AccessError, ValidationError
from odoo.tools import consteq
class AuthApiKey(models.Model):
_name = "auth.api.key"
_description = "API Key"
name = fields.Char(required=True)
key = fields.Char(
required=True,
help="""The API key. Enter a dummy value in this field if it is
obtained from the server environment configuration.""",
)
user_id = fields.Many2one(
comodel_name="res.users",
string="User",
required=True,
help="""The user used to process the requests authenticated by
the api key""",
)
_sql_constraints = [("name_uniq", "unique(name)", "Api Key name must be unique.")]
@api.model
def _retrieve_api_key(self, key):
return self.browse(self._retrieve_api_key_id(key))
@api.model
@tools.ormcache("key")
def _retrieve_api_key_id(self, key):
if not self.env.user.has_group("base.group_system"):
raise AccessError(_("User is not allowed"))
for api_key in self.search([]):
if api_key.key and consteq(key, api_key.key):
return api_key.id
raise ValidationError(_("The key %s is not allowed") % key)
@api.model
@tools.ormcache("key")
def _retrieve_uid_from_api_key(self, key):
return self._retrieve_api_key(key).user_id.id
def _clear_key_cache(self):
self._retrieve_api_key_id.clear_cache(self.env[self._name])
self._retrieve_uid_from_api_key.clear_cache(self.env[self._name])
@api.model_create_multi
def create(self, vals_list):
records = super(AuthApiKey, self).create(vals_list)
if any(["key" in vals or "user_id" in vals for vals in vals_list]):
self._clear_key_cache()
return records
def write(self, vals):
super(AuthApiKey, self).write(vals)
if "key" in vals or "user_id" in vals:
self._clear_key_cache()
return True

View file

@ -0,0 +1,37 @@
# Copyright 2018 ACSONE SA/NV
# Copyright 2017 Akretion (http://www.akretion.com).
# @author Sébastien BEAU <sebastien.beau@akretion.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
import logging
from werkzeug.exceptions import Unauthorized
from odoo import models
from odoo.http import request
_logger = logging.getLogger(__name__)
class IrHttp(models.AbstractModel):
_inherit = "ir.http"
@classmethod
def _auth_method_api_key(cls):
headers = request.httprequest.environ
api_key = headers.get("HTTP_API_KEY")
if api_key:
request.update_env(user=1)
auth_api_key = request.env["auth.api.key"]._retrieve_api_key(api_key)
if auth_api_key:
# reset _env on the request since we change the uid...
# the next call to env will instantiate an new
# odoo.api.Environment with the user defined on the
# auth.api_key
request._env = None
request.update_env(user=auth_api_key.user_id.id)
request.auth_api_key = api_key
request.auth_api_key_id = auth_api_key.id
return True
_logger.error("Wrong HTTP_API_KEY, access denied")
raise Unauthorized()

View file

@ -0,0 +1,4 @@
The api key menu is available into Settings > Technical in debug mode.
By default, when you create an API key, the key is saved into the database.
If you want to manage them via serve environment settings use `auth_api_key_server_env`.

View file

@ -0,0 +1,5 @@
* Denis Robinet <denis.robinet@acsone.eu>
* Laurent Mignon <laurent.mignon@acsone.eu>
* Quentin Groulard <quentin.groulard@acsone.eu>
* Sébastien Beau <sebastien.beau@akretion.com>
* Chafique Delli <chafique.delli@akretion.com>

View file

@ -0,0 +1,9 @@
Authenticate http requests from an API key.
API keys are codes passed in (in the http header API-KEY)
by programs calling an API in order to identify -in this case- the calling program's user.
Take care while using this kind of mechanism since information into http headers are visible in clear.
Thus, use it only to authenticate requests from known sources.
For unknown sources, it is a good practice to filter out this header at proxy level.

View file

@ -0,0 +1,10 @@
To apply this authentication system to your http request you must set 'api_key'
as value for the 'auth' parameter of your route definition into your controller.
.. code-block:: python
class MyController(Controller):
@route('/my_service', auth='api_key', ...)
def my_service(self, *args, **kwargs):
pass

View file

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_auth_api_key,access_auth_api_key,model_auth_api_key,base.group_system,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_auth_api_key access_auth_api_key model_auth_api_key base.group_system 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View file

@ -0,0 +1,458 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>README.rst</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic, pre.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document">
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
</a>
<div class="section" id="auth-api-key">
<h1>Auth Api Key</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:1d519ddd25033f9a32033563edf36cc5df3ef91de4d6555d4889bf2f44c62cb9
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/license-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-auth/tree/16.0/auth_api_key"><img alt="OCA/server-auth" src="https://img.shields.io/badge/github-OCA%2Fserver--auth-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-auth-16-0/server-auth-16-0-auth_api_key"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-auth&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>Authenticate http requests from an API key.</p>
<p>API keys are codes passed in (in the http header API-KEY)
by programs calling an API in order to identify -in this case- the calling programs user.</p>
<p>Take care while using this kind of mechanism since information into http headers are visible in clear.
Thus, use it only to authenticate requests from known sources.</p>
<p>For unknown sources, it is a good practice to filter out this header at proxy level.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-3">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-4">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-5">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-6">Contributors</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-7">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h2><a class="toc-backref" href="#toc-entry-1">Configuration</a></h2>
<p>The api key menu is available into Settings &gt; Technical in debug mode.
By default, when you create an API key, the key is saved into the database.</p>
<p>If you want to manage them via serve environment settings use <cite>auth_api_key_server_env</cite>.</p>
</div>
<div class="section" id="usage">
<h2><a class="toc-backref" href="#toc-entry-2">Usage</a></h2>
<p>To apply this authentication system to your http request you must set api_key
as value for the auth parameter of your route definition into your controller.</p>
<pre class="code python literal-block">
<span class="k">class</span><span class="w"> </span><span class="nc">MyController</span><span class="p">(</span><span class="n">Controller</span><span class="p">):</span><span class="w">
</span> <span class="nd">&#64;route</span><span class="p">(</span><span class="s1">'/my_service'</span><span class="p">,</span> <span class="n">auth</span><span class="o">=</span><span class="s1">'api_key'</span><span class="p">,</span> <span class="o">...</span><span class="p">)</span><span class="w">
</span> <span class="k">def</span><span class="w"> </span><span class="nf">my_service</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span><span class="w">
</span> <span class="k">pass</span>
</pre>
</div>
<div class="section" id="bug-tracker">
<h2><a class="toc-backref" href="#toc-entry-3">Bug Tracker</a></h2>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-auth/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/server-auth/issues/new?body=module:%20auth_api_key%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h2><a class="toc-backref" href="#toc-entry-4">Credits</a></h2>
<div class="section" id="authors">
<h3><a class="toc-backref" href="#toc-entry-5">Authors</a></h3>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<div class="section" id="contributors">
<h3><a class="toc-backref" href="#toc-entry-6">Contributors</a></h3>
<ul class="simple">
<li>Denis Robinet &lt;<a class="reference external" href="mailto:denis.robinet&#64;acsone.eu">denis.robinet&#64;acsone.eu</a>&gt;</li>
<li>Laurent Mignon &lt;<a class="reference external" href="mailto:laurent.mignon&#64;acsone.eu">laurent.mignon&#64;acsone.eu</a>&gt;</li>
<li>Quentin Groulard &lt;<a class="reference external" href="mailto:quentin.groulard&#64;acsone.eu">quentin.groulard&#64;acsone.eu</a>&gt;</li>
<li>Sébastien Beau &lt;<a class="reference external" href="mailto:sebastien.beau&#64;akretion.com">sebastien.beau&#64;akretion.com</a>&gt;</li>
<li>Chafique Delli &lt;<a class="reference external" href="mailto:chafique.delli&#64;akretion.com">chafique.delli&#64;akretion.com</a>&gt;</li>
</ul>
</div>
<div class="section" id="maintainers">
<h3><a class="toc-backref" href="#toc-entry-7">Maintainers</a></h3>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org">
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
</a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-auth/tree/16.0/auth_api_key">OCA/server-auth</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</div>
</body>
</html>

View file

@ -0,0 +1 @@
from . import test_auth_api_key

View file

@ -0,0 +1,45 @@
# Copyright 2018 ACSONE SA/NV
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from odoo.exceptions import AccessError, ValidationError
from odoo.tests.common import TransactionCase
class TestAuthApiKey(TransactionCase):
@classmethod
def setUpClass(cls, *args, **kwargs):
super().setUpClass(*args, **kwargs)
cls.AuthApiKey = cls.env["auth.api.key"]
cls.demo_user = cls.env.ref("base.user_demo")
cls.api_key_good = cls.AuthApiKey.create(
{"name": "good", "user_id": cls.demo_user.id, "key": "api_key"}
)
def test_lookup_key_from_db(self):
demo_user = self.env.ref("base.user_demo")
self.assertEqual(
self.env["auth.api.key"]._retrieve_uid_from_api_key("api_key"), demo_user.id
)
def test_wrong_key(self):
with self.assertRaises(ValidationError), self.env.cr.savepoint():
self.env["auth.api.key"]._retrieve_uid_from_api_key("api_wrong_key")
def test_user_not_allowed(self):
# only system users can check for key
with self.assertRaises(AccessError), self.env.cr.savepoint():
self.env["auth.api.key"].with_user(
user=self.demo_user
)._retrieve_uid_from_api_key("api_wrong_key")
def test_cache_invalidation(self):
self.assertEqual(
self.env["auth.api.key"]._retrieve_uid_from_api_key("api_key"),
self.demo_user.id,
)
self.api_key_good.write({"key": "updated_key"})
self.assertEqual(
self.env["auth.api.key"]._retrieve_uid_from_api_key("updated_key"),
self.demo_user.id,
)
with self.assertRaises(ValidationError):
self.env["auth.api.key"]._retrieve_uid_from_api_key("api_key")

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8" ?>
<!-- Copyright 2019 ACSONE SA/NV
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<record model="ir.ui.view" id="auth_api_key_form_view">
<field name="name">auth.api.key.form (in auth_api_key)</field>
<field name="model">auth.api.key</field>
<field name="arch" type="xml">
<form create="false" edit="false">
<sheet>
<label for="name" class="oe_edit_only" />
<h1>
<field name="name" class="oe_inline" />
</h1>
<group name="config" colspan="4" col="4">
<field name="user_id" colspan="4" />
<field name="key" colspan="4" />
</group>
</sheet>
</form>
</field>
</record>
<record model="ir.ui.view" id="auth_api_key_tree_view">
<field name="name">auth.api.key.tree (in auth_api_key)</field>
<field name="model">auth.api.key</field>
<field name="arch" type="xml">
<tree>
<field name="name" />
<field name="user_id" />
</tree>
</field>
</record>
<record model="ir.actions.act_window" id="auth_api_key_act_window">
<field name="name">Auth Api Key</field>
<field name="res_model">auth.api.key</field>
<field name="view_mode">tree,form</field>
<field name="domain">[]</field>
<field name="context">{}</field>
</record>
<record model="ir.ui.menu" id="auth_api_key_menu">
<field name="name">Auth Api Key</field>
<field name="parent_id" ref="base.menu_custom" />
<field name="action" ref="auth_api_key_act_window" />
<field name="sequence" eval="100" />
</record>
</odoo>

View file

@ -0,0 +1,32 @@
# Architecture
```mermaid
flowchart TD
U[Users] -->|HTTP| V[Views and QWeb Templates]
V --> C[Controllers]
V --> W[Wizards Transient Models]
C --> M[Models and ORM]
W --> M
M --> R[Reports]
DX[Data XML] --> M
S[Security ACLs and Groups] -. enforces .-> M
subgraph Auth_api_key Module - auth_api_key
direction LR
M:::layer
W:::layer
C:::layer
V:::layer
R:::layer
S:::layer
DX:::layer
end
classDef layer fill:#eef8ff,stroke:#6ea8fe,stroke-width:1px
```
Notes
- Views include tree/form/kanban templates and report templates.
- Controllers provide website/portal routes when present.
- Wizards are UI flows implemented with `models.TransientModel`.
- Data XML loads data/demo records; Security defines groups and access.

View file

@ -0,0 +1,3 @@
# Configuration
Refer to Odoo settings for auth_api_key. Configure related models, access rights, and options as needed.

View file

@ -0,0 +1,3 @@
# Controllers
This module does not define custom HTTP controllers.

View file

@ -0,0 +1,3 @@
# Dependencies
No explicit module dependencies declared.

View file

@ -0,0 +1,4 @@
# FAQ
- Q: Which Odoo version? A: 16.0 (OCA/OCB packaged).
- Q: How to enable? A: Start server with --addon auth_api_key or install in UI.

View file

@ -0,0 +1,7 @@
# Install
```bash
pip install odoo-bringout-oca-server-auth-auth_api_key"
# or
uv pip install odoo-bringout-oca-server-auth-auth_api_key"
```

View file

@ -0,0 +1,13 @@
# Models
Detected core models and extensions in auth_api_key.
```mermaid
classDiagram
class auth_api_key
class ir_http
```
Notes
- Classes show model technical names; fields omitted for brevity.
- Items listed under _inherit are extensions of existing models.

View file

@ -0,0 +1,6 @@
# Overview
Packaged Odoo addon: auth_api_key. Provides features documented in upstream Odoo 16 under this addon.
- Source: OCA/OCB 16.0, addon auth_api_key
- License: LGPL-3

View file

@ -0,0 +1,3 @@
# Reports
This module does not define custom reports.

View file

@ -0,0 +1,34 @@
# Security
Access control and security definitions in auth_api_key.
## Access Control Lists (ACLs)
Model access permissions defined in:
- **[ir.model.access.csv](../auth_api_key/security/ir.model.access.csv)**
- 1 model access rules
## Record Rules
Row-level security rules defined in:
```mermaid
graph TB
subgraph "Security Layers"
A[Users] --> B[Groups]
B --> C[Access Control Lists]
C --> D[Models]
B --> E[Record Rules]
E --> F[Individual Records]
end
```
Security files overview:
- **[ir.model.access.csv](../auth_api_key/security/ir.model.access.csv)**
- Model access permissions (CRUD rights)
Notes
- Access Control Lists define which groups can access which models
- Record Rules provide row-level security (filter records by user/group)
- Security groups organize users and define permission sets
- All security is enforced at the ORM level by Odoo

View file

@ -0,0 +1,5 @@
# Troubleshooting
- Ensure Python and Odoo environment matches repo guidance.
- Check database connectivity and logs if startup fails.
- Validate that dependent addons listed in DEPENDENCIES.md are installed.

View file

@ -0,0 +1,7 @@
# Usage
Start Odoo including this addon (from repo root):
```bash
python3 scripts/nix_odoo_web_server.py --db-name mydb --addon auth_api_key
```

View file

@ -0,0 +1,3 @@
# Wizards
This module does not include UI wizards.

View file

@ -0,0 +1,42 @@
[project]
name = "odoo-bringout-oca-server-auth-auth_api_key"
version = "16.0.0"
description = "Auth Api Key -
Authenticate http requests from an API key"
authors = [
{ name = "Ernad Husremovic", email = "hernad@bring.out.ba" }
]
dependencies = [
"requests>=2.25.1"
]
readme = "README.md"
requires-python = ">= 3.11"
classifiers = [
"Development Status :: 5 - Production/Stable",
"Intended Audience :: Developers",
"License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Topic :: Office/Business",
]
[project.urls]
homepage = "https://github.com/bringout/0"
repository = "https://github.com/bringout/0"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.metadata]
allow-direct-references = true
[tool.hatch.build.targets.wheel]
packages = ["auth_api_key"]
[tool.rye]
managed = true
dev-dependencies = [
"pytest>=8.4.1",
]

View file

@ -0,0 +1,46 @@
# Auth API key group
Odoo addon: auth_api_key_group
## Installation
```bash
pip install odoo-bringout-oca-server-auth-auth_api_key_group
```
## Dependencies
This addon depends on:
- auth_api_key
## Manifest Information
- **Name**: Auth API key group
- **Version**: 16.0.1.0.0
- **Category**: N/A
- **License**: LGPL-3
- **Installable**: False
## Source
Based on [OCA/server-auth](https://github.com/OCA/server-auth) branch 16.0, addon `auth_api_key_group`.
## License
This package maintains the original LGPL-3 license from the upstream Odoo project.
## Documentation
- Overview: doc/OVERVIEW.md
- Architecture: doc/ARCHITECTURE.md
- Models: doc/MODELS.md
- Controllers: doc/CONTROLLERS.md
- Wizards: doc/WIZARDS.md
- Reports: doc/REPORTS.md
- Security: doc/SECURITY.md
- Install: doc/INSTALL.md
- Usage: doc/USAGE.md
- Configuration: doc/CONFIGURATION.md
- Dependencies: doc/DEPENDENCIES.md
- Troubleshooting: doc/TROUBLESHOOTING.md
- FAQ: doc/FAQ.md

View file

@ -0,0 +1,87 @@
==================
Auth API key group
==================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:e231a34a3fe2c3a2a8c78305131ba9e90af3725f3cf0b0878d313439f511f6fe
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--auth-lightgray.png?logo=github
:target: https://github.com/OCA/server-auth/tree/16.0/auth_api_key_group
:alt: OCA/server-auth
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-auth-16-0/server-auth-16-0-auth_api_key_group
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-auth&target_branch=16.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
Allow grouping API keys together.
Grouping per se does nothing. This feature is supposed to be used by other modules
to limit access to services or records based on groups of keys.
**Table of contents**
.. contents::
:local:
Bug Tracker
===========
Bugs are tracked on `GitHub Issues <https://github.com/OCA/server-auth/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-auth/issues/new?body=module:%20auth_api_key_group%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
~~~~~~~
* Camptcamp
Contributors
~~~~~~~~~~~~
* Simone Orsi <simone.orsi@camptocamp.com>
Maintainers
~~~~~~~~~~~
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
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.
.. |maintainer-simahawk| image:: https://github.com/simahawk.png?size=40px
:target: https://github.com/simahawk
:alt: simahawk
Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
|maintainer-simahawk|
This module is part of the `OCA/server-auth <https://github.com/OCA/server-auth/tree/16.0/auth_api_key_group>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View file

@ -0,0 +1 @@
from . import models

View file

@ -0,0 +1,24 @@
# Copyright 2021 Camptcamp SA
# @author: Simone Orsi <simone.orsi@camptocamp.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
{
"name": "Auth API key group",
"summary": """
Allow grouping API keys together.
Grouping per se does nothing. This feature is supposed to be used by other modules
to limit access to services or records based on groups of keys.
""",
"version": "16.0.1.0.0",
"license": "LGPL-3",
"website": "https://github.com/OCA/server-auth",
"author": "Camptcamp,Odoo Community Association (OCA)",
"maintainers": ["simahawk"],
"depends": ["auth_api_key"],
"data": [
"security/ir.model.access.csv",
"views/auth_api_key_view.xml",
"views/auth_api_key_group_view.xml",
],
}

View file

@ -0,0 +1,85 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_api_key_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: auth_api_key_group
#: model:ir.model,name:auth_api_key_group.model_auth_api_key
msgid "API Key"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model,name:auth_api_key_group.model_auth_api_key_group
msgid "API Key auth group"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__auth_api_key_ids
msgid "API Keys"
msgstr ""
#. module: auth_api_key_group
#: model:ir.actions.act_window,name:auth_api_key_group.auth_api_key_group_act_window
#: model:ir.ui.menu,name:auth_api_key_group.auth_api_key_group_menu
msgid "Auth Api Key Groups"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key__auth_api_key_group_ids
msgid "Auth Groups"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__code
msgid "Code"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__create_uid
msgid "Created by"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__create_date
msgid "Created on"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__display_name
msgid "Display Name"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__id
msgid "ID"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group____last_update
msgid "Last Modified on"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__write_uid
msgid "Last Updated by"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__write_date
msgid "Last Updated on"
msgstr ""
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__name
msgid "Name"
msgstr ""

View file

@ -0,0 +1,85 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_api_key_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: auth_api_key_group
#: model:ir.model,name:auth_api_key_group.model_auth_api_key
msgid "API Key"
msgstr "API ključ"
#. module: auth_api_key_group
#: model:ir.model,name:auth_api_key_group.model_auth_api_key_group
msgid "API Key auth group"
msgstr "API ključ auth grupa"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__auth_api_key_ids
msgid "API Keys"
msgstr "API ključevi"
#. module: auth_api_key_group
#: model:ir.actions.act_window,name:auth_api_key_group.auth_api_key_group_act_window
#: model:ir.ui.menu,name:auth_api_key_group.auth_api_key_group_menu
msgid "Auth Api Key Groups"
msgstr "Auth API ključ grupe"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key__auth_api_key_group_ids
msgid "Auth Groups"
msgstr "Auth grupe"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__code
msgid "Code"
msgstr "Šifra"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__create_uid
msgid "Created by"
msgstr "Kreirao"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__create_date
msgid "Created on"
msgstr "Kreirano"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__display_name
msgid "Display Name"
msgstr "Prikazani naziv"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__id
msgid "ID"
msgstr "ID"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group____last_update
msgid "Last Modified on"
msgstr "Zadnje mijenjano"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__write_uid
msgid "Last Updated by"
msgstr "Zadnji ažurirao"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__write_date
msgid "Last Updated on"
msgstr "Zadnje ažurirano"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__name
msgid "Name"
msgstr "Naziv:"

View file

@ -0,0 +1,88 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_api_key_group
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"PO-Revision-Date: 2024-04-03 12:43+0000\n"
"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: auth_api_key_group
#: model:ir.model,name:auth_api_key_group.model_auth_api_key
msgid "API Key"
msgstr "Chiave API"
#. module: auth_api_key_group
#: model:ir.model,name:auth_api_key_group.model_auth_api_key_group
msgid "API Key auth group"
msgstr "Gruppo autorizzazione chiave API"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__auth_api_key_ids
msgid "API Keys"
msgstr "Chiavi API"
#. module: auth_api_key_group
#: model:ir.actions.act_window,name:auth_api_key_group.auth_api_key_group_act_window
#: model:ir.ui.menu,name:auth_api_key_group.auth_api_key_group_menu
msgid "Auth Api Key Groups"
msgstr "Gruppi autorizzazione chiave API"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key__auth_api_key_group_ids
msgid "Auth Groups"
msgstr "Gruppi autorizzazione"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__code
msgid "Code"
msgstr "Codice"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__create_uid
msgid "Created by"
msgstr "Creato da"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__create_date
msgid "Created on"
msgstr "Creato il"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__display_name
msgid "Display Name"
msgstr "Nome visualizzato"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__id
msgid "ID"
msgstr "ID"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group____last_update
msgid "Last Modified on"
msgstr "Ultima modifica il"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__write_uid
msgid "Last Updated by"
msgstr "Ultimo aggiornamento di"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__write_date
msgid "Last Updated on"
msgstr "Ultimo aggiornamento il"
#. module: auth_api_key_group
#: model:ir.model.fields,field_description:auth_api_key_group.field_auth_api_key_group__name
msgid "Name"
msgstr "Nome"

View file

@ -0,0 +1,2 @@
from . import auth_api_key
from . import auth_api_key_group

View file

@ -0,0 +1,19 @@
# Copyright 2021 Camptcamp SA
# @author: Simone Orsi <simone.orsi@camptocamp.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from odoo import fields, models
class AuthApiKey(models.Model):
_inherit = "auth.api.key"
auth_api_key_group_ids = fields.Many2many(
comodel_name="auth.api.key.group",
relation="auth_api_key_group_rel",
column1="key_id",
column2="group_id",
string="Auth Groups",
)

View file

@ -0,0 +1,23 @@
# Copyright 2021 Camptcamp SA
# @author: Simone Orsi <simone.orsi@camptocamp.com>
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl).
from odoo import fields, models
class AuthApiKeyGroup(models.Model):
"""Group API keys together."""
_name = "auth.api.key.group"
_description = "API Key auth group"
name = fields.Char(required=True)
code = fields.Char(required=True)
auth_api_key_ids = fields.Many2many(
comodel_name="auth.api.key",
relation="auth_api_key_group_rel",
column1="group_id",
column2="key_id",
string="API Keys",
)

View file

@ -0,0 +1 @@
* Simone Orsi <simone.orsi@camptocamp.com>

View file

@ -0,0 +1,4 @@
Allow grouping API keys together.
Grouping per se does nothing. This feature is supposed to be used by other modules
to limit access to services or records based on groups of keys.

Some files were not shown because too many files have changed in this diff Show more