diff --git a/users_ldap_mail/README.rst b/users_ldap_mail/README.rst new file mode 100644 index 000000000..1c1819275 --- /dev/null +++ b/users_ldap_mail/README.rst @@ -0,0 +1,67 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +=============== +Users LDAP Mail +=============== + +This module extends the functionality of the auth_ldap module to support mail +from LDAP and to allow you to get an e-mail address from LDAP accounts to Odoo +users. + +Usage +===== + +To use this module, you need to: + +#. Open Odoo in your browser +#. Go to Settings +#. Go to General Settings +#. In The General Settings form go to LDAP Parameters +#. In a LDAP Parameters item there are two new fields: mail and name, the name + These items will correspond with a new user that is created, when a user + logs in via LDAP in Odoo. + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/repo/149 + +.. repo_id is available in https://github.com/OCA/maintainer-tools/blob/master/tools/repos_with_ids.txt +.. branch is "8.0" for example + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Daniel Reis (https://launchpad.com/~dreis-pt), + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/users_ldap_mail/__init__.py b/users_ldap_mail/__init__.py index 1956c281a..a0bd913cd 100644 --- a/users_ldap_mail/__init__.py +++ b/users_ldap_mail/__init__.py @@ -1,22 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2013 Daniel Reis. -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © Daniel Reis (https://launchpad.com/~dreis-pt) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/gpl.html). + +from . import models -from . import users_ldap_model diff --git a/users_ldap_mail/__manifest__.py b/users_ldap_mail/__manifest__.py index 4876e0332..ffcd4daf3 100644 --- a/users_ldap_mail/__manifest__.py +++ b/users_ldap_mail/__manifest__.py @@ -1,27 +1,10 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2013 Daniel Reis (https://launchpad.com/~dreis-pt) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# © Daniel Reis (https://launchpad.com/~dreis-pt) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/gpl.html). { 'name': "LDAP mapping for user name and e-mail", - 'version': "9.0.1.0.0", + 'version': "10.0.1.0.0", 'depends': ["auth_ldap"], 'author': "Daniel Reis (https://launchpad.com/~dreis-pt)," "Odoo Community Association (OCA)", @@ -36,7 +19,7 @@ AD also supports the "mail" attribute, so it can be mapped into OpenERP. """, 'category': "Tools", 'data': [ - 'users_ldap_view.xml', + 'views/users_ldap_view.xml', ], - 'installable': False, + 'installable': True, } diff --git a/users_ldap_mail/models/__init__.py b/users_ldap_mail/models/__init__.py new file mode 100644 index 000000000..22a446617 --- /dev/null +++ b/users_ldap_mail/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © Daniel Reis (https://launchpad.com/~dreis-pt) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/gpl.html). + +from . import users_ldap_model + diff --git a/users_ldap_mail/models/users_ldap_model.py b/users_ldap_mail/models/users_ldap_model.py new file mode 100644 index 000000000..1d625a3dc --- /dev/null +++ b/users_ldap_mail/models/users_ldap_model.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +# © Daniel Reis (https://launchpad.com/~dreis-pt) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/gpl.html). + +from odoo import models, fields + +import logging +_log = logging.getLogger(__name__) + + +class CompanyLDAP(models.Model): + _inherit = 'res.company.ldap' + + name_attribute = fields.Char( + 'Name Attribute', _defaults='cn', + help="By default 'cn' is used. " + "For ActiveDirectory you might use 'displayName' instead.") + mail_attribute = fields.Char( + 'E-mail attribute', _defaults='mail', + help="LDAP attribute to use to retrieve em-mail address.") + + def get_ldap_dicts(self): + """ + Copy of auth_ldap's funtion, changing only the SQL, so that it returns + all fields in the table. + """ + return self.sudo().search([('ldap_server', '!=', False)], + order='sequence').read([]) + + def map_ldap_attributes(self, conf, login, ldap_entry): + values = super(CompanyLDAP, self).map_ldap_attributes(conf, login, + ldap_entry) + mapping = [ + ('name', 'name_attribute'), + ('email', 'mail_attribute'), + ] + for value_key, conf_name in mapping: + try: + if conf[conf_name]: + values[value_key] = ldap_entry[1][conf[conf_name]][0] + except KeyError: + _log.warning('No LDAP attribute "%s" found for login "%s"' % ( + conf.get(conf_name), values.get('login'))) + return values diff --git a/users_ldap_mail/users_ldap_model.py b/users_ldap_mail/users_ldap_model.py deleted file mode 100644 index 731e7c6bb..000000000 --- a/users_ldap_mail/users_ldap_model.py +++ /dev/null @@ -1,77 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# This module copyright (C) 2013 Daniel Reis -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import fields, orm - -import logging -_log = logging.getLogger(__name__) - - -class CompanyLDAP(orm.Model): - _inherit = 'res.company.ldap' - _columns = { - 'name_attribute': fields.char( - 'Name Attribute', size=64, - help="By default 'cn' is used. " - "For ActiveDirectory you might use 'displayName' instead."), - 'mail_attribute': fields.char( - 'E-mail attribute', size=64, - help="LDAP attribute to use to retrieve em-mail address."), - } - - _defaults = { - 'name_attribute': 'cn', - 'mail_attribute': 'mail', - } - - def get_ldap_dicts(self, cr, ids=None): - """ - Copy of auth_ldap's funtion, changing only the SQL, so that it returns - all fields in the table. - """ - if ids: - id_clause = 'AND id IN (%s)' - args = [tuple(ids)] - else: - id_clause = '' - args = [] - cr.execute(""" - SELECT * - FROM res_company_ldap - WHERE ldap_server != '' """ + id_clause + """ ORDER BY sequence - """, args) - return cr.dictfetchall() - - def map_ldap_attributes(self, cr, uid, conf, login, ldap_entry): - values = super(CompanyLDAP, self).map_ldap_attributes( - cr, uid, conf, login, ldap_entry) - mapping = [ - ('name', 'name_attribute'), - ('email', 'mail_attribute'), - ] - for value_key, conf_name in mapping: - try: - if conf[conf_name]: - values[value_key] = ldap_entry[1][conf[conf_name]][0] - except KeyError: - _log.warning('No LDAP attribute "%s" found for login "%s"' % ( - conf.get(conf_name), values.get('login'))) - return values diff --git a/users_ldap_mail/users_ldap_view.xml b/users_ldap_mail/users_ldap_view.xml deleted file mode 100644 index 9395e602f..000000000 --- a/users_ldap_mail/users_ldap_view.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - res.company.form.inherit.users_ldap_mail - res.company - - - - - - - - - - - - diff --git a/users_ldap_mail/views/users_ldap_view.xml b/users_ldap_mail/views/users_ldap_view.xml new file mode 100644 index 000000000..44fc9b733 --- /dev/null +++ b/users_ldap_mail/views/users_ldap_view.xml @@ -0,0 +1,14 @@ + + + + Add name and email attributes to ldap view + base.config.settings + + + + + + + + +