diff --git a/auth_signup_verify_email/README.rst b/auth_signup_verify_email/README.rst new file mode 100755 index 0000000..fa44e6d --- /dev/null +++ b/auth_signup_verify_email/README.rst @@ -0,0 +1,106 @@ +====================== +Verify email at signup +====================== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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/13.0/auth_signup_verify_email + :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-13-0/server-auth-13-0-auth_signup_verify_email + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/251/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of public sign up to force users to +provide a valid email address. + +To achieve this, users are not required to provide a password at +sign up: they are asked for only at first login attempt. + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +* Install `email_validator `_ + with ``pip install email_validator`` or equivalent. + +Configuration +============= + +To configure this module, you need to: + +* `Properly configure your outgoing email server(s) + `_. +* Go to *Settings > General Settings -> General settings*, search for + the *Users* section and enable *Free sign up* in *Customer account*. + +Usage +===== + +To use this module, you need to: + +* Log out. +* `Sign up `_ with a valid email. + +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Antiun Ingeniería S.L. +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* Rafael Blasco +* Jairo Llopis +* Simone Orsi +* Alexandre Díaz +* Eugene Molotov + +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 `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/auth_signup_verify_email/__init__.py b/auth_signup_verify_email/__init__.py new file mode 100755 index 0000000..54d1454 --- /dev/null +++ b/auth_signup_verify_email/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2015 Antiun Ingeniería, S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import controllers diff --git a/auth_signup_verify_email/__manifest__.py b/auth_signup_verify_email/__manifest__.py new file mode 100755 index 0000000..057bde7 --- /dev/null +++ b/auth_signup_verify_email/__manifest__.py @@ -0,0 +1,17 @@ +# Copyright 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": "14.0.1.0.0", + "category": "Authentication", + "website": "https://github.com/OCA/server-auth", + "author": "Antiun Ingeniería S.L., " + "Tecnativa, " + "Odoo Community Association (OCA)", + "license": "AGPL-3", + "depends": ["auth_signup"], + "external_dependencies": {"python": ["lxml", "email_validator"]}, + "data": ["views/signup.xml"], + "installable": True, +} diff --git a/auth_signup_verify_email/controllers/__init__.py b/auth_signup_verify_email/controllers/__init__.py new file mode 100755 index 0000000..437ebe4 --- /dev/null +++ b/auth_signup_verify_email/controllers/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2015 Antiun Ingeniería, S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +from . import main diff --git a/auth_signup_verify_email/controllers/main.py b/auth_signup_verify_email/controllers/main.py new file mode 100755 index 0000000..a655b32 --- /dev/null +++ b/auth_signup_verify_email/controllers/main.py @@ -0,0 +1,78 @@ +# Copyright 2015 Antiun Ingeniería, S.L. +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). + +import logging + +from email_validator import EmailSyntaxError, EmailUndeliverableError, validate_email + +from odoo import _ +from odoo.http import request, route + +from odoo.addons.auth_signup.controllers.main import AuthSignupHome + +_logger = logging.getLogger(__name__) + + +class SignupVerifyEmail(AuthSignupHome): + @route() + def web_auth_signup(self, *args, **kw): + if request.params.get("login") and not request.params.get("password"): + return self.passwordless_signup() + return super().web_auth_signup(*args, **kw) + + def passwordless_signup(self): + values = request.params + qcontext = self.get_auth_signup_qcontext() + + # Check good format of e-mail + try: + validate_email(values.get("login", "")) + except EmailSyntaxError as error: + qcontext["error"] = getattr( + error, "message", _("That does not seem to be an email address."), + ) + return request.render("auth_signup.signup", qcontext) + except EmailUndeliverableError as error: + qcontext["error"] = str(error) + return request.render("auth_signup.signup", qcontext) + except Exception as error: + qcontext["error"] = str(error) + return request.render("auth_signup.signup", qcontext) + if not values.get("email"): + values["email"] = values.get("login") + + # preserve user lang + values["lang"] = request.context.get("lang", "") + + # remove values that could raise "Invalid field '*' on model 'res.users'" + values.pop("redirect", "") + values.pop("token", "") + + # Remove password + values["password"] = "" + sudo_users = request.env["res.users"].with_context(create_user=True).sudo() + + try: + with 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) + if ( + request.env["res.users"] + .sudo() + .search([("login", "=", qcontext.get("login"))]) + ): + qcontext["error"] = _( + "Another user is already registered using this email" " address." + ) + else: + # Agnostic message for security + qcontext["error"] = _( + "Something went wrong, please try again later or" " contact us." + ) + return request.render("auth_signup.signup", qcontext) + + qcontext["message"] = _("Check your email to activate your account!") + return request.render("auth_signup.reset_password", qcontext) diff --git a/auth_signup_verify_email/i18n/ar.po b/auth_signup_verify_email/i18n/ar.po new file mode 100755 index 0000000..e12988d --- /dev/null +++ b/auth_signup_verify_email/i18n/ar.po @@ -0,0 +1,42 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2021-01-06 13:44+0000\n" +"Last-Translator: Rachid Al Assir \n" +"Language-Team: none\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 ? 4 : 5;\n" +"X-Generator: Weblate 4.3.2\n" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "هنالك مستخدم أخر مسجل بهذا البريد الإلكتروني." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, 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:0 +#, 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:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "لا يبدو أن هذا عنوان بريد إلكتروني." diff --git a/auth_signup_verify_email/i18n/auth_signup_verify_email.pot b/auth_signup_verify_email/i18n/auth_signup_verify_email.pot new file mode 100755 index 0000000..1f9903b --- /dev/null +++ b/auth_signup_verify_email/i18n/auth_signup_verify_email.pot @@ -0,0 +1,38 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.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_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, 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:0 +#, 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:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "" diff --git a/auth_signup_verify_email/i18n/de.po b/auth_signup_verify_email/i18n/de.po new file mode 100755 index 0000000..6c9bb2d --- /dev/null +++ b/auth_signup_verify_email/i18n/de.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +# Translators: +# Rudolf Schnapka , 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-09 12:31+0000\n" +"PO-Revision-Date: 2016-05-31 14:47+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: German (http://www.transifex.com/oca/OCA-server-tools-9-0/" +"language/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_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, 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:0 +#, 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:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Das schein keine Email-Adresse zu sein." diff --git a/auth_signup_verify_email/i18n/es.po b/auth_signup_verify_email/i18n/es.po new file mode 100755 index 0000000..ca65b6d --- /dev/null +++ b/auth_signup_verify_email/i18n/es.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +# Translators: +# Antonio Trueba, 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-09 12:31+0000\n" +"PO-Revision-Date: 2016-05-31 14:47+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Spanish (http://www.transifex.com/oca/OCA-server-tools-9-0/" +"language/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" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, 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:0 +#, 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:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Eso no parece una dirección de email válida." diff --git a/auth_signup_verify_email/i18n/fr.po b/auth_signup_verify_email/i18n/fr.po new file mode 100755 index 0000000..8428c6a --- /dev/null +++ b/auth_signup_verify_email/i18n/fr.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +# Translators: +# Alexandre Papin , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-03-18 02:19+0000\n" +"PO-Revision-Date: 2017-03-18 02:19+0000\n" +"Last-Translator: Alexandre Papin , 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_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Check your email to activate your account!" +msgstr "Un email vous à été envoyé pour activer votre compte." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Something went wrong, please try again later or contact us." +msgstr "" +"Une erreur est survenue, veuillez réessayer plus tard ou contactez nous." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Veuillez fournir une adresse email valide." diff --git a/auth_signup_verify_email/i18n/hr.po b/auth_signup_verify_email/i18n/hr.po new file mode 100755 index 0000000..a492917 --- /dev/null +++ b/auth_signup_verify_email/i18n/hr.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +# Translators: +# Bole , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-05-10 00:47+0000\n" +"PO-Revision-Date: 2019-11-13 17:34+0000\n" +"Last-Translator: Bole \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_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "Drugi korisnik je već registriran sa ovom mail adresom." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Check your email to activate your account!" +msgstr "Provjerite svoj e-mail za aktivaciu računa!" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Something went wrong, please try again later or contact us." +msgstr "Nešto nije u redu, molimo pokušajte ponovo ili nas kontaktirajte." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Ovo ne izgleda kao e-mail adresa." diff --git a/auth_signup_verify_email/i18n/hr_HR.po b/auth_signup_verify_email/i18n/hr_HR.po new file mode 100755 index 0000000..c8ccb2c --- /dev/null +++ b/auth_signup_verify_email/i18n/hr_HR.po @@ -0,0 +1,47 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +# Translators: +# Bole , 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-29 00:48+0000\n" +"PO-Revision-Date: 2016-06-13 08:38+0000\n" +"Last-Translator: Bole \n" +"Language-Team: Croatian (Croatia) (http://www.transifex.com/oca/OCA-server-" +"tools-9-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_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Check your email to activate your account!" +msgstr "Provjerite svoj mail za aktiviranje računa" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Something went wrong, please try again later or contact us." +msgstr "" +"Nešto nije u redu, molimo pokušajte se prijaviti kasnije ili nas " +"kontaktirajte." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Ovo ne izgleda kao valjana mail adresa." diff --git a/auth_signup_verify_email/i18n/it.po b/auth_signup_verify_email/i18n/it.po new file mode 100755 index 0000000..586489e --- /dev/null +++ b/auth_signup_verify_email/i18n/it.po @@ -0,0 +1,46 @@ +# 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 (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-09 12:31+0000\n" +"PO-Revision-Date: 2016-05-31 14:47+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Italian (http://www.transifex.com/oca/OCA-server-tools-9-0/" +"language/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" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, 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:0 +#, 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:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Questo non sembra essere un indirizzo email valido." diff --git a/auth_signup_verify_email/i18n/pt_BR.po b/auth_signup_verify_email/i18n/pt_BR.po new file mode 100755 index 0000000..95c1a62 --- /dev/null +++ b/auth_signup_verify_email/i18n/pt_BR.po @@ -0,0 +1,47 @@ +# 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: 2019-09-03 03:23+0000\n" +"Last-Translator: Rodrigo Macedo \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-server-" +"tools-8-0/language/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 3.8\n" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "Outro usuário já está registrado usando este endereço de email." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Check your email to activate your account!" +msgstr "Verifique seu e-mail para ativar sua conta!" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Something went wrong, please try again later or contact us." +msgstr "Ocorreu um erro. Tente novamente mais tarde ou entre em contato." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Esse não parece ser um endereço de email." + +#~ msgid "email" +#~ msgstr "email" diff --git a/auth_signup_verify_email/i18n/ro.po b/auth_signup_verify_email/i18n/ro.po new file mode 100755 index 0000000..abab65a --- /dev/null +++ b/auth_signup_verify_email/i18n/ro.po @@ -0,0 +1,45 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +# Translators: +# Daniel Schweiger , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-06-22 01:11+0000\n" +"PO-Revision-Date: 2017-06-22 01:11+0000\n" +"Last-Translator: Daniel Schweiger , 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_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Check your email to activate your account!" +msgstr "Ati primit un email pentru activarea acestui cont!" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Something went wrong, please try again later or contact us." +msgstr "" +"Sa produs o eroare, va rugam sa incercati mai tarziu sau contacteaza-ne." + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Nu ati introdus o directie email corespunzatoare." diff --git a/auth_signup_verify_email/i18n/sl.po b/auth_signup_verify_email/i18n/sl.po new file mode 100755 index 0000000..13a28a0 --- /dev/null +++ b/auth_signup_verify_email/i18n/sl.po @@ -0,0 +1,46 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +# Translators: +# Matjaž Mozetič , 2015 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-09 12:31+0000\n" +"PO-Revision-Date: 2016-05-31 14:47+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-server-tools-9-0/" +"language/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_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, 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:0 +#, 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:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Kaže, da to ni e-poštni naslov." diff --git a/auth_signup_verify_email/i18n/tr.po b/auth_signup_verify_email/i18n/tr.po new file mode 100755 index 0000000..539151e --- /dev/null +++ b/auth_signup_verify_email/i18n/tr.po @@ -0,0 +1,44 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * auth_signup_verify_email +# +# Translators: +# Ahmet Altınışık , 2016 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (9.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-06-09 12:31+0000\n" +"PO-Revision-Date: 2016-05-31 14:47+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: Turkish (http://www.transifex.com/oca/OCA-server-tools-9-0/" +"language/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" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, python-format +msgid "Another user is already registered using this email address." +msgstr "" + +#. module: auth_signup_verify_email +#: code:addons/auth_signup_verify_email/controllers/main.py:0 +#, 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:0 +#, 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:0 +#, python-format +msgid "That does not seem to be an email address." +msgstr "Bu bir e-posta adresi gözükmüyor." diff --git a/auth_signup_verify_email/readme/CONFIGURE.rst b/auth_signup_verify_email/readme/CONFIGURE.rst new file mode 100755 index 0000000..1c071f8 --- /dev/null +++ b/auth_signup_verify_email/readme/CONFIGURE.rst @@ -0,0 +1,6 @@ +To configure this module, you need to: + +* `Properly configure your outgoing email server(s) + `_. +* Go to *Settings > General Settings -> General settings*, search for + the *Users* section and enable *Free sign up* in *Customer account*. diff --git a/auth_signup_verify_email/readme/CONTRIBUTORS.rst b/auth_signup_verify_email/readme/CONTRIBUTORS.rst new file mode 100755 index 0000000..db6c44e --- /dev/null +++ b/auth_signup_verify_email/readme/CONTRIBUTORS.rst @@ -0,0 +1,5 @@ +* Rafael Blasco +* Jairo Llopis +* Simone Orsi +* Alexandre Díaz +* Eugene Molotov diff --git a/auth_signup_verify_email/readme/DESCRIPTION.rst b/auth_signup_verify_email/readme/DESCRIPTION.rst new file mode 100755 index 0000000..0611813 --- /dev/null +++ b/auth_signup_verify_email/readme/DESCRIPTION.rst @@ -0,0 +1,5 @@ +This module extends the functionality of public sign up to force users to +provide a valid email address. + +To achieve this, users are not required to provide a password at +sign up: they are asked for only at first login attempt. diff --git a/auth_signup_verify_email/readme/INSTALL.rst b/auth_signup_verify_email/readme/INSTALL.rst new file mode 100755 index 0000000..647c3b7 --- /dev/null +++ b/auth_signup_verify_email/readme/INSTALL.rst @@ -0,0 +1,2 @@ +* Install `email_validator `_ + with ``pip install email_validator`` or equivalent. diff --git a/auth_signup_verify_email/readme/USAGE.rst b/auth_signup_verify_email/readme/USAGE.rst new file mode 100755 index 0000000..dbb9ad0 --- /dev/null +++ b/auth_signup_verify_email/readme/USAGE.rst @@ -0,0 +1,4 @@ +To use this module, you need to: + +* Log out. +* `Sign up `_ with a valid email. diff --git a/auth_signup_verify_email/static/description/icon.png b/auth_signup_verify_email/static/description/icon.png new file mode 100755 index 0000000..52e1b17 Binary files /dev/null and b/auth_signup_verify_email/static/description/icon.png differ diff --git a/auth_signup_verify_email/static/description/icon.svg b/auth_signup_verify_email/static/description/icon.svg new file mode 100755 index 0000000..ea6e7c2 --- /dev/null +++ b/auth_signup_verify_email/static/description/icon.svg @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + Openclipart + + + + 2007-02-06T06:13:53 + Thumbtack note with message "E-mail!" + https://openclipart.org/detail/3040/thumbtack-note-email-by-zeimusu + + + zeimusu + + + + + bulletin + email + memo + note + thumbtack + thumbtack note + + + + + + + + + + + diff --git a/auth_signup_verify_email/static/description/index.html b/auth_signup_verify_email/static/description/index.html new file mode 100755 index 0000000..8e872db --- /dev/null +++ b/auth_signup_verify_email/static/description/index.html @@ -0,0 +1,454 @@ + + + + + + +Verify email at signup + + + +
+

Verify email at signup

+ + +

Beta License: AGPL-3 OCA/server-auth Translate me on Weblate Try me on Runbot

+

This module extends the functionality of public sign up to force users to +provide a valid email address.

+

To achieve this, users are not required to provide a password at +sign up: they are asked for only at first login attempt.

+

Table of contents

+ +
+

Installation

+
    +
  • Install email_validator +with pip install email_validator or equivalent.
  • +
+
+
+

Configuration

+

To configure this module, you need to:

+ +
+
+

Usage

+

To use this module, you need to:

+
    +
  • Log out.
  • +
  • Sign up with a valid email.
  • +
+
+
+

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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Antiun Ingeniería S.L.
  • +
  • Tecnativa
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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 project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + diff --git a/auth_signup_verify_email/tests/__init__.py b/auth_signup_verify_email/tests/__init__.py new file mode 100755 index 0000000..f658c7d --- /dev/null +++ b/auth_signup_verify_email/tests/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2016 Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import test_verify_email diff --git a/auth_signup_verify_email/tests/test_verify_email.py b/auth_signup_verify_email/tests/test_verify_email.py new file mode 100755 index 0000000..8bb3060 --- /dev/null +++ b/auth_signup_verify_email/tests/test_verify_email.py @@ -0,0 +1,49 @@ +# Copyright 2016 Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from lxml.html import document_fromstring +from mock import patch + +from odoo.tests.common import HttpCase +from odoo.tools.misc import mute_logger + +from odoo.addons.mail.models import mail_template + + +class UICase(HttpCase): + def setUp(self): + super().setUp() + if "website" in self.env: + # Enable public signup in website if it is installed; otherwise + # tests here would fail + current_website = self.env["website"].get_current_website() + current_website.auth_signup_uninvited = "b2c" + self.env["ir.config_parameter"].set_param("auth_signup.invitation_scope", "b2c") + self.data = { + "csrf_token": self.csrf_token(), + "name": "Somebody", + } + + def html_doc(self, url="/web/signup", data=None, timeout=30): + """Get an HTML LXML document.""" + with patch(mail_template.__name__ + ".MailTemplate.send_mail"): + resp = self.url_open(url, data=data, timeout=timeout) + return document_fromstring(resp.content) + + def csrf_token(self): + """Get a valid CSRF token.""" + doc = self.html_doc() + return doc.xpath("//input[@name='csrf_token']")[0].get("value") + + def test_bad_email(self): + """Test rejection of bad emails.""" + self.data["login"] = "bad email" + doc = self.html_doc(data=self.data) + self.assertTrue(doc.xpath('//p[@class="alert alert-danger"]')) + + @mute_logger("odoo.addons.auth_signup_verify_email.controllers.main") + def test_good_email(self): + """Test acceptance of good emails.""" + self.data["login"] = "good@example.com" + doc = self.html_doc(data=self.data) + self.assertTrue(doc.xpath('//p[@class="alert alert-success"]')) diff --git a/auth_signup_verify_email/views/signup.xml b/auth_signup_verify_email/views/signup.xml new file mode 100755 index 0000000..49b44e7 --- /dev/null +++ b/auth_signup_verify_email/views/signup.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/ct_client_backup/__init__.py b/ct_client_backup/__init__.py new file mode 100755 index 0000000..aee8895 --- /dev/null +++ b/ct_client_backup/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizards diff --git a/ct_client_backup/__manifest__.py b/ct_client_backup/__manifest__.py new file mode 100755 index 0000000..4fd9309 --- /dev/null +++ b/ct_client_backup/__manifest__.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Clients Periodic Backups | SaaS", + + 'summary': """ + Take Periodic Backups of Client Instances""", + + 'description': """ + Take Periodic Backups of Client Instances""", + + 'author': "Muhammad Awais", + 'website': "https://codetuple.io", + 'category': 'Uncategorized', + 'version': '2.0.0', + + # any module necessary for this one to work correctly + 'depends': ['base', 'kk_odoo_saas','queue_job'], + + # always loaded + 'data': [ + # "security/security.xml", + 'security/ir.model.access.csv', + 'wizards/backup_restore.xml', + 'views/views.xml', + 'views/app_views.xml', + 'data/backup_ignite_cron.xml', + ], + "application": True, + +} diff --git a/ct_client_backup/controllers/__init__.py b/ct_client_backup/controllers/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/ct_client_backup/data/backup_ignite_cron.xml b/ct_client_backup/data/backup_ignite_cron.xml new file mode 100755 index 0000000..6d3bbb7 --- /dev/null +++ b/ct_client_backup/data/backup_ignite_cron.xml @@ -0,0 +1,14 @@ + + + + + SaaS: Backup Process Ignite Cron + + code + model.ignite_backup_server_cron() + 1 + days + -1 + + + \ No newline at end of file diff --git a/ct_client_backup/models/__init__.py b/ct_client_backup/models/__init__.py new file mode 100644 index 0000000..7a90c9f --- /dev/null +++ b/ct_client_backup/models/__init__.py @@ -0,0 +1,2 @@ +from . import saas_app +from . import models diff --git a/ct_client_backup/models/models.py b/ct_client_backup/models/models.py new file mode 100644 index 0000000..486af4a --- /dev/null +++ b/ct_client_backup/models/models.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- +import os + +from odoo import models, fields, api, _ +from odoo.exceptions import UserError, MissingError +import requests +import xmlrpc +import logging +import base64 + +_logger = logging.getLogger(__name__) + + +class SaaSAppBackup(models.Model): + _name = 'kk_odoo_saas.app.backup' + _description = 'SaaS App Backup' + + name = fields.Char() + app = fields.Many2one('kk_odoo_saas.app', 'SaaS App') + file_name = fields.Char(string="File Name") + file_path = fields.Char(string="File Path") + url = fields.Char(string="Url") + backup_date_time = fields.Datetime(string="Backup Time (UTC)") + status = fields.Selection(string="Status", selection=[('failed', 'Failed'), ('success', 'Success')]) + message = fields.Char(string="Message") + file_size = fields.Char(string="File Size") + + def download_db_file(self): + """ + to download the database backup, it stores the file in attachment + :return: Action + """ + file_path = self.file_path + _logger.info("------------ %r ----------------" % file_path) + if self.url: + return { + 'type': 'ir.actions.act_url', + 'url': self.url, + 'target': 'new', + } + try: + with open(file_path, 'rb') as reader: + result = base64.b64encode(reader.read()) + except IOError as e: + raise MissingError('Unable to find File on the path') + attachment_obj = self.env['ir.attachment'].sudo() + name = self.file_name + attachment_id = attachment_obj.create({ + 'name': name, + 'datas': result, + 'public': False + }) + download_url = '/web/content/' + str(attachment_id.id) + '?download=true' + _logger.info("--- %r ----" % download_url) + self.url = download_url + return { + 'type': 'ir.actions.act_url', + 'url': download_url, + 'target': 'new', + } + + def action_restore_backup_to_instance(self, restore_to_id=False): + """ + it will restore the backup to a new instance, + the instance should be created manually, + and there should be no database at new_instance.com/web/database/selector + :param: restore_to_id is kk_saa_app object on which we have to restore backup + :return: False + """ + if self.app and restore_to_id: + restore_url = restore_to_id.get_url() + if self.file_path and os.path.exists(self.file_path) and requests.get(restore_url).status_code < 400: + db_list = [] + try: + db_list = xmlrpc.client.ServerProxy(restore_url + '/xmlrpc/db').list() + except xmlrpc.client.ProtocolError as e: + _logger.info("There is no database on Db selector") + + _logger.info("All Databases on Postgres Server -> {} <-".format(db_list)) + _logger.info("New Db name: {}".format(restore_to_id.app_name)) + if restore_to_id.app_name not in db_list: + self.restore_backup_to_client(self.file_path, restore_url, restore_to_id.app_name, + restore_to_id.backup_master_pass) + else: + raise UserError("Cant restore Backup, Database already existed, please delete it.") + else: + raise UserError("Cant restore Backup! the url is not accessible or backup file not exists.") + else: + _logger.error("Cant restore Backup, Backup Id, or Restore App Missing") + raise UserError("Cant restore Backup, Backup Id, or Restore App Missing") + + def restore_backup_to_client(self, file_path, restore_url, db_name, master_pwd): + if file_path and restore_url and db_name and master_pwd: + restore_url = restore_url + '/web/database/restore' + data = { + 'master_pwd': master_pwd, + 'name': db_name, + 'copy': 'true', + 'backup_file': '@' + file_path + } + backup = open(file_path, "rb") + try: + response = requests.post(restore_url, data=data, files={"backup_file": backup}) + if response.status_code == 200: + _logger.info("Restore Done, this is the response Code: {}".format(response.status_code)) + else: + _logger.info("Restore Done, this is the response Code: {}".format(response.status_code)) + + return { + 'success': True, + } + except Exception as e: + return { + 'success': False, + } + else: + _logger.error("Cant restore Db One of the parameter is Missing") + + @api.model + def create(self, vals): + vals['name'] = self.env['ir.sequence'].next_by_code('saas_app.backup') + res = super(SaaSAppBackup, self).create(vals) + return res + + def calc_backup_size(self): + if not os.path.exists(self.file_path): + return + # calculate file size in KB, MB, GB + + def convert_bytes(size): + """ Convert bytes to KB, or MB or GB""" + for x in ['bytes', 'KB', 'MB', 'GB', 'TB']: + if size < 1024.0: + return "%3.1f %s" % (size, x) + size /= 1024.0 + + self.file_size = convert_bytes(os.path.getsize(self.file_path)) diff --git a/ct_client_backup/models/saas_app.py b/ct_client_backup/models/saas_app.py new file mode 100755 index 0000000..a4efe7b --- /dev/null +++ b/ct_client_backup/models/saas_app.py @@ -0,0 +1,124 @@ +from datetime import timedelta + +import requests +from odoo import models, fields, api, _ +import logging +import os +_logger = logging.getLogger(__name__) + + +class SaaSApp(models.Model): + _inherit = 'kk_odoo_saas.app' + backup_db_name = fields.Char(string="Database Name", default=lambda a: a.client_db_name) + backup_master_pass = fields.Char(string="Master Password") + backups_enabled = fields.Boolean() + + backups = fields.Many2many(comodel_name='kk_odoo_saas.app.backup', string='Backups') + + def action_create_backup(self): + """ + It is being called from 2 locations + :return: + """ + for app in self: + response = self.backup_db() + backup = self.env['kk_odoo_saas.app.backup'].create({'backup_date_time': fields.Datetime.now(), + 'app': app.id, + 'file_name': response.get('filename'), + 'file_path': response.get('filepath'), + 'message': response.get('message') + }) + if response.get('success'): + backup.write({'status': 'success'}) + else: + backup.write({'status': 'failed'}) + app.write({'backups': [(4, backup.id)]}) + + def action_delete_old_backup(self): + for app in self: + for backup in app.backups: + if backup.backup_date_time < fields.Datetime.now() - timedelta(days=7.0): + if os.path.exists(backup.file_path): + try: + os.remove(backup.file_path) + if backup.url: + # deleting the attachments related to this backup + att_id = backup.url.replace('?download=true', '').replace('/web/content/', '') + if att_id: + try: + attch_id = int(att_id) + if attch_id: + self.env['ir.attachment'].browse([attch_id]).unlink() + except ValueError as e: + _logger.error(e) + backup.unlink() + except OSError as e: + _logger.error("Error while deleting file: %s - %s." % (e.filename, e.strerror)) + else: + _logger.error("The file does not exist") + + def backup_db(self): + """ + Actual Backup function + :return: + """ + # get the creds for db manager + data = { + 'master_pwd': self.backup_master_pass, + 'name': self.backup_db_name, + 'backup_format': 'zip' + } + + client_url = 'https://{0}{1}'.format(self.sub_domain_name, self.domain_name) + msg = '' + + # where we want to store backups, in the linux user, with which the odoo-service is running + backup_dir = os.path.join(os.path.expanduser('~'), 'client_backups') + if not os.path.exists(backup_dir): + os.mkdir(backup_dir) + + backup_dir = os.path.join(backup_dir, self.sub_domain_name) + if not os.path.exists(backup_dir): + os.mkdir(backup_dir) + + client_url += '/web/database/backup' + # Without Streaming method + # response = requests.post(client_url, data=data) + # Streaming zip, so that everything is not stored in RAM. + + try: + filename = self.backup_db_name + '-' + fields.Datetime.now().strftime("%m-%d-%Y-%H-%M") + '.zip' + backed_up_file_path = os.path.join(backup_dir, filename) + with requests.post(client_url, data=data, stream=True) as response: + response.raise_for_status() + with open(os.path.join(backup_dir, filename), 'wb') as file: + for chunk in response.iter_content(chunk_size=1024): + if chunk: + file.write(chunk) + msg = 'Database backup Successful at ' + fields.Datetime.now().strftime("%m-%d-%Y-%H:%M:%S") + return { + 'success': True, + 'msg': msg, + 'filename': filename, + 'filepath': backed_up_file_path + } + except Exception as e: + msg = 'Failed at ' + fields.Datetime.now().strftime("%m-%d-%Y-%H:%M:%S") + ' ' + str(e) + return { + 'success': False, + 'msg': msg + } + + @api.model + def ignite_backup_server_cron(self): + """ + A Scheduled Action which will take new backups and del old + :return: False + """ + # search for saas instance in lanched and modified states and backups enabled + apps = self.env['kk_odoo_saas.app'].sudo().search( + [('status', 'in', ['l', 'm']), ('backups_enabled', '=', True)]) + + for app in apps: + app.action_create_backup() + app.action_delete_old_backup() diff --git a/ct_client_backup/security/ir.model.access.csv b/ct_client_backup/security/ir.model.access.csv new file mode 100755 index 0000000..f1bfcb1 --- /dev/null +++ b/ct_client_backup/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_saas_app_backups,access_saas_app_backups,model_kk_odoo_saas_app_backup,kk_odoo_saas.group_saas_manager,1,1,1,1 +access_saas_app_backup_restore_wizard,SaaS Manager Backup Restore Permissions,model_saas_client_backup_restore_wizard,kk_odoo_saas.group_saas_manager,1,1,1,1 diff --git a/ct_client_backup/static/description/icon.png b/ct_client_backup/static/description/icon.png new file mode 100755 index 0000000..1026a0f Binary files /dev/null and b/ct_client_backup/static/description/icon.png differ diff --git a/ct_client_backup/views/app_views.xml b/ct_client_backup/views/app_views.xml new file mode 100755 index 0000000..f7e1ed2 --- /dev/null +++ b/ct_client_backup/views/app_views.xml @@ -0,0 +1,37 @@ + + + + + + SaaS App inherit for Backups + kk_odoo_saas.app + + + + + + + + + + + +