Browse Source

[9.0][MIG][auth_signup_verify_email] Migration. (#436)

* Add module auth_signup_verify_email.

* Import module following guidelines.

* README typos.

* OCA Transbot updated translations from Transifex

* Credit creator.

* author name correction

* [9.0][MIG][auth_signup_verify_email] Migration.

Migrate to v9.

* [FIX] auth_signup_verify_email: Python library requirement

* Add tests, fix xml tags, fix credits.

* Fix test.
pull/320/merge
Yajo 9 years ago
committed by Moises Lopez - https://www.vauxoo.com/
parent
commit
c10789a9f5
  1. 87
      auth_signup_verify_email/README.rst
  2. 5
      auth_signup_verify_email/__init__.py
  3. 28
      auth_signup_verify_email/__openerp__.py
  4. 5
      auth_signup_verify_email/controllers/__init__.py
  5. 55
      auth_signup_verify_email/controllers/main.py
  6. 47
      auth_signup_verify_email/i18n/de.po
  7. 48
      auth_signup_verify_email/i18n/es.po
  8. 47
      auth_signup_verify_email/i18n/it.po
  9. 46
      auth_signup_verify_email/i18n/pt_BR.po
  10. 47
      auth_signup_verify_email/i18n/sl.po
  11. 47
      auth_signup_verify_email/i18n/tr.po
  12. BIN
      auth_signup_verify_email/static/description/icon.png
  13. 172
      auth_signup_verify_email/static/description/icon.svg
  14. 5
      auth_signup_verify_email/tests/__init__.py
  15. 72
      auth_signup_verify_email/tests/test_verify_email.py
  16. 20
      auth_signup_verify_email/views/signup.xml
  17. 1
      requirements.txt

87
auth_signup_verify_email/README.rst

@ -0,0 +1,87 @@
.. 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
======================
Verify email at signup
======================
This module extends the functionality of public sign up, and forces users to
provide a valid email address.
To achieve this requirement, the user does not need to provide a password at
sign up, but when logging in later for the first time.
Installation
============
* Install validate_email_ with ``pip install validate_email`` or equivalent.
Configuration
=============
To configure this module, you need to:
* `Properly configure your outgoing email server(s)
<https://www.odoo.com/es_ES/forum/help-1/question/how-to-configure-email-gateway-282#answer_290>`_.
* Go to *Settings > General Settings* and enable *Allow
external users to sign up*.
Usage
=====
To use this module, you need to:
* Log out.
* `Sign up </web/signup>`_ with a valid email.
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
:alt: Try me on Runbot
:target: https://runbot.odoo-community.org/runbot/149/9.0
Known issues / Roadmap
======================
* Remove calls to ``cr.commit()`` in tests when
https://github.com/odoo/odoo/issues/12237 gets fixed.
Bug Tracker
===========
Bugs are tracked on `GitHub Issues
<https://github.com/OCA/server-tools/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
=======
Icon
----
* https://openclipart.org/detail/3040/thumbtack-note-email
* https://openclipart.org/detail/202732/check-mark
Contributors
------------
* Rafael Blasco <rafaelbn@antiun.com>
* Jairo Llopis <yajo.sk8@gmail.com>
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.
.. _validate_email: https://pypi.python.org/pypi/validate_email

5
auth_signup_verify_email/__init__.py

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# © 2015 Antiun Ingeniería, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import controllers

28
auth_signup_verify_email/__openerp__.py

@ -0,0 +1,28 @@
# -*- coding: utf-8 -*-
# © 2015 Antiun Ingeniería, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
"name": "Verify email at signup",
"summary": "Force uninvited users to use a good email for signup",
"version": "9.0.1.0.0",
"category": "Authentication",
"website": "http://www.tecnativa.com",
"author": "Antiun Ingeniería S.L., "
"Tecnativa, "
"Odoo Community Association (OCA)",
"license": "AGPL-3",
"application": False,
"installable": True,
"external_dependencies": {
"python": [
"lxml",
"validate_email",
],
},
"depends": [
"auth_signup",
],
"data": [
"views/signup.xml",
],
}

5
auth_signup_verify_email/controllers/__init__.py

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# © 2015 Antiun Ingeniería, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import main

55
auth_signup_verify_email/controllers/main.py

@ -0,0 +1,55 @@
# -*- coding: utf-8 -*-
# © 2015 Antiun Ingeniería, S.L.
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
import logging
from openerp import _, http
from openerp.addons.auth_signup.controllers.main import AuthSignupHome
_logger = logging.getLogger(__name__)
try:
from validate_email import validate_email
except ImportError:
_logger.debug("Cannot import `validate_email`.")
class SignupVerifyEmail(AuthSignupHome):
@http.route()
def web_auth_signup(self, *args, **kw):
if (http.request.params.get("login") and
not http.request.params.get("password")):
return self.passwordless_signup(http.request.params)
else:
return super(SignupVerifyEmail, self).web_auth_signup(*args, **kw)
def passwordless_signup(self, values):
qcontext = self.get_auth_signup_qcontext()
# Check good format of e-mail
if not validate_email(values.get("login", "")):
qcontext["error"] = _("That does not seem to be an email address.")
return http.request.render("auth_signup.signup", qcontext)
elif not values.get("email"):
values["email"] = values.get("login")
# Remove password
values["password"] = False
sudo_users = (http.request.env["res.users"]
.with_context(create_user=True).sudo())
try:
with http.request.cr.savepoint():
sudo_users.signup(values, qcontext.get("token"))
sudo_users.reset_password(values.get("login"))
except Exception as error:
# Duplicate key or wrong SMTP settings, probably
_logger.exception(error)
# Agnostic message for security
qcontext["error"] = _(
"Something went wrong, please try again later or contact us.")
return http.request.render("auth_signup.signup", qcontext)
qcontext["message"] = _("Check your email to activate your account!")
return http.request.render("auth_signup.reset_password", qcontext)

47
auth_signup_verify_email/i18n/de.po

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_signup_verify_email
#
# Translators:
# Rudolf Schnapka <rs@techno-flex.de>, 2016
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-19 14:44+0000\n"
"PO-Revision-Date: 2016-01-18 13:24+0000\n"
"Last-Translator: Rudolf Schnapka <rs@techno-flex.de>\n"
"Language-Team: German (http://www.transifex.com/oca/OCA-server-tools-8-0/language/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:54
#, python-format
msgid "Check your email to activate your account!"
msgstr "Prüfen Sie Ihre Email, um Ihr Konto zu aktivieren."
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:50
#, python-format
msgid "Something went wrong, please try again later or contact us."
msgstr "Etwas ist schief gelaufen, bitte später nochmal versuchen oden an uns wenden."
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:31
#, python-format
msgid "That does not seem to be an email address."
msgstr "Das schein keine Email-Adresse zu sein."
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "email"
msgstr "EMail"
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "only_passwords"
msgstr ""

48
auth_signup_verify_email/i18n/es.po

@ -0,0 +1,48 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_signup_verify_email
#
# Translators:
# Antonio Trueba, 2016
# Antonio Trueba, 2016
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-19 14:44+0000\n"
"PO-Revision-Date: 2016-02-16 15:15+0000\n"
"Last-Translator: Antonio Trueba\n"
"Language-Team: Spanish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:54
#, python-format
msgid "Check your email to activate your account!"
msgstr "Revise su correo para activar su cuenta."
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:50
#, python-format
msgid "Something went wrong, please try again later or contact us."
msgstr "Algo ha ido mal, por favor inténtelo de nuevo más tarde o contáctenos."
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:31
#, python-format
msgid "That does not seem to be an email address."
msgstr "Eso no parece una dirección de email válida."
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "email"
msgstr "email"
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "only_passwords"
msgstr ""

47
auth_signup_verify_email/i18n/it.po

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_signup_verify_email
#
# Translators:
# Paolo Valier, 2016
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-03-17 15:36+0000\n"
"PO-Revision-Date: 2016-03-13 08:59+0000\n"
"Last-Translator: Paolo Valier\n"
"Language-Team: Italian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:54
#, python-format
msgid "Check your email to activate your account!"
msgstr "Controlla la tua email per attivare il tuo account!"
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:50
#, python-format
msgid "Something went wrong, please try again later or contact us."
msgstr "Qualcosa non è funzionato, prego provare più tardi altrimenti mettiti in contatto con noi."
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:31
#, python-format
msgid "That does not seem to be an email address."
msgstr "Questo non sembra essere un indirizzo email valido."
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "email"
msgstr "email"
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "only_passwords"
msgstr ""

46
auth_signup_verify_email/i18n/pt_BR.po

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_signup_verify_email
#
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-11-27 14:01+0000\n"
"PO-Revision-Date: 2015-11-12 20:16+0000\n"
"Last-Translator: <>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-server-tools-8-0/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:54
#, python-format
msgid "Check your email to activate your account!"
msgstr ""
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:50
#, python-format
msgid "Something went wrong, please try again later or contact us."
msgstr ""
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:31
#, python-format
msgid "That does not seem to be an email address."
msgstr ""
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "email"
msgstr "email"
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "only_passwords"
msgstr ""

47
auth_signup_verify_email/i18n/sl.po

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_signup_verify_email
#
# Translators:
# Matjaž Mozetič <m.mozetic@matmoz.si>, 2015
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2015-11-27 14:01+0000\n"
"PO-Revision-Date: 2015-11-13 11:44+0000\n"
"Last-Translator: Matjaž Mozetič <m.mozetic@matmoz.si>\n"
"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/sl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: sl\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_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:54
#, python-format
msgid "Check your email to activate your account!"
msgstr "Preverite svojo e-pošto za aktiviranje računa!"
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:50
#, python-format
msgid "Something went wrong, please try again later or contact us."
msgstr "Nekaj je narobe. Ponovno poskusite kasneje ali pa stopite v stik z nami."
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:31
#, python-format
msgid "That does not seem to be an email address."
msgstr "Kaže, da to ni e-poštni naslov."
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "email"
msgstr "e-pošta"
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "only_passwords"
msgstr "only_passwords"

47
auth_signup_verify_email/i18n/tr.po

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * auth_signup_verify_email
#
# Translators:
# Ahmet Altınışık <aaltinisik@altinkaya.com.tr>, 2016
msgid ""
msgstr ""
"Project-Id-Version: server-tools (8.0)\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-01-19 14:44+0000\n"
"PO-Revision-Date: 2016-01-31 14:58+0000\n"
"Last-Translator: Ahmet Altınışık <aaltinisik@altinkaya.com.tr>\n"
"Language-Team: Turkish (http://www.transifex.com/oca/OCA-server-tools-8-0/language/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Language: tr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:54
#, python-format
msgid "Check your email to activate your account!"
msgstr "Hesabınızı aktive etmek için e-postanızı kontrol edin!"
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:50
#, python-format
msgid "Something went wrong, please try again later or contact us."
msgstr "Bişeyler ters gitti. Lütfen sonra tekrar deneyin ya da bize ulaşın."
#. module: auth_signup_verify_email
#: code:addons/auth_signup_verify_email/controllers/main.py:31
#, python-format
msgid "That does not seem to be an email address."
msgstr "Bu bir e-posta adresi gözükmüyor."
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "email"
msgstr "eposta"
#. module: auth_signup_verify_email
#: view:website:auth_signup.fields
msgid "only_passwords"
msgstr "sadece_parolalar"

BIN
auth_signup_verify_email/static/description/icon.png

After

Width: 100  |  Height: 100  |  Size: 10 KiB

172
auth_signup_verify_email/static/description/icon.svg
File diff suppressed because it is too large
View File

5
auth_signup_verify_email/tests/__init__.py

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
# © 2016 Jairo Llopis <jairo.llopis@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from . import test_verify_email

72
auth_signup_verify_email/tests/test_verify_email.py

@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
# © 2016 Jairo Llopis <jairo.llopis@tecnativa.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from urllib import urlencode
from lxml.html import document_fromstring
from openerp import _
from openerp.tests.common import HttpCase
class UICase(HttpCase):
def setUp(self):
super(UICase, self).setUp()
self.icp = self.env["ir.config_parameter"]
self.old_allow_uninvited = self.icp.get_param(
"auth_signup.allow_uninvited")
self.icp.set_param("auth_signup.allow_uninvited", "True")
# Workaround https://github.com/odoo/odoo/issues/12237
self.cr.commit()
self.data = {
"csrf_token": self.csrf_token(),
"name": "Somebody",
}
self.msg = {
"badmail": _("That does not seem to be an email address."),
"failure": _(
"Something went wrong, please try again later or contact us."),
"success": _("Check your email to activate your account!"),
}
def tearDown(self):
"""Workaround https://github.com/odoo/odoo/issues/12237."""
super(UICase, self).tearDown()
self.icp.set_param(
"auth_signup.allow_uninvited", self.old_allow_uninvited)
self.cr.commit()
def html_doc(self, url="/web/signup", data=None, timeout=10):
"""Get an HTML LXML document."""
if data:
data = bytes(urlencode(data))
return document_fromstring(self.url_open(url, data, timeout).read())
def csrf_token(self):
"""Get a valid CSRF token."""
doc = self.html_doc()
return doc.xpath("//input[@name='csrf_token']")[0].get("value")
def search_text(self, doc, text):
"""Search for any element containing the text."""
return doc.xpath("//*[contains(text(), '%s')]" % text)
def test_bad_email(self):
"""Test rejection of bad emails."""
self.data["login"] = "bad email"
doc = self.html_doc(data=self.data)
self.assertTrue(self.search_text(doc, self.msg["badmail"]))
def test_good_email(self):
"""Test acceptance of good emails.
This test could lead to success if your SMTP settings are correct, or
to failure otherwise. Any case is expected, since tests usually run
under unconfigured demo instances.
"""
self.data["login"] = "good@example.com"
doc = self.html_doc(data=self.data)
self.assertTrue(
self.search_text(doc, self.msg["failure"]) or
self.search_text(doc, self.msg["success"]))

20
auth_signup_verify_email/views/signup.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- © 2016 Jairo Llopis <jairo.llopis@tecnativa.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<template id="signup_fields" inherit_id="auth_signup.fields">
<xpath expr="//div[@class='form-group field-password']"
position="attributes">
<attribute name="t-if">only_passwords</attribute>
</xpath>
<xpath expr="//div[@class='form-group field-confirm_password']"
position="attributes">
<attribute name="t-if">only_passwords</attribute>
</xpath>
<xpath expr="//input[@name='login']" position="attributes">
<attribute name="type">email</attribute>
</xpath>
</template>
</odoo>

1
requirements.txt

@ -2,3 +2,4 @@ python-ldap
unidecode
acme_tiny
IPy
validate_email
Loading…
Cancel
Save