diff --git a/password_reset_manager/README.rst b/password_reset_manager/README.rst
new file mode 100644
index 000000000..0e615ccc6
--- /dev/null
+++ b/password_reset_manager/README.rst
@@ -0,0 +1,46 @@
+.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg
+ :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+ :alt: License: AGPL-3
+
+Password Reset Manager
+======================
+This module helps users to reset and change their password.
+
+Configuration
+=============
+* No additional configurations needed
+
+Company
+-------
+* `Cybrosys Techno Solutions `__
+
+License
+-------
+General Public License, Version 3 (AGPL v3).
+(http://www.gnu.org/licenses/agpl-3.0-standalone.html)
+
+Credits
+-------
+* Developers: Version 16: Vishnu V
+
+Contacts
+--------
+* Mail Contact : odoo@cybrosys.com
+* Website : https://cybrosys.com
+
+Bug Tracker
+-----------
+Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported.
+
+Maintainer
+==========
+.. image:: https://cybrosys.com/images/logo.png
+ :target: https://cybrosys.com
+
+This module is maintained by Cybrosys Technologies.
+
+For support and more information, please visit `Our Website `__
+
+Further information
+===================
+HTML Description: ``__
diff --git a/password_reset_manager/__init__.py b/password_reset_manager/__init__.py
index 7b4bf8780..c81e9076e 100755
--- a/password_reset_manager/__init__.py
+++ b/password_reset_manager/__init__.py
@@ -3,19 +3,19 @@
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2022-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions ()
#
# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+# GNU LESSER GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
+# (AGPL v3) along with this program
# If not, see .
#
#############################################################################
diff --git a/password_reset_manager/__manifest__.py b/password_reset_manager/__manifest__.py
index 71910b8f3..988e230cb 100755
--- a/password_reset_manager/__manifest__.py
+++ b/password_reset_manager/__manifest__.py
@@ -3,32 +3,34 @@
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2022-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions ()
#
# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+# GNU LESSER GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
+# (AGPL v3) along with this program
# If not, see .
#
#############################################################################
+# """manifest"""
{
'name': "Password Reset Manager",
- 'version': '16.0.1.0.0',
- 'summary': """User Password Reset Manager""",
- 'description': """User Password Reset Manager""",
- 'category': 'Technical',
+ 'version': '16.0.1.0.1',
+ 'category': 'Extra Tools',
+ 'summary': "User Password Reset Manager",
+ 'description': "This module helps users to change and reset forgotten "
+ "password. ",
'author': "Cybrosys Techno Solutions",
- 'website': "https://www.cybrosys.com",
'company': 'Cybrosys Techno Solutions',
'maintainer': 'Cybrosys Techno Solutions',
+ 'website': "https://www.cybrosys.com",
'depends': ['auth_signup', 'web'],
'data': [
'views/reset_password.xml',
@@ -36,5 +38,6 @@
'images': ['static/description/banner.png'],
'license': "AGPL-3",
'installable': True,
+ 'auto_install': False,
'application': True,
}
diff --git a/password_reset_manager/controllers/__init__.py b/password_reset_manager/controllers/__init__.py
index 5ab2c146b..12d3cfe1d 100644
--- a/password_reset_manager/controllers/__init__.py
+++ b/password_reset_manager/controllers/__init__.py
@@ -3,21 +3,22 @@
#
# Cybrosys Technologies Pvt. Ltd.
#
-# Copyright (C) 2022-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions ()
#
# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
#
# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
+# GNU LESSER GENERAL PUBLIC LICENSE (AGPL v3) for more details.
#
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
+# (AGPL v3) along with this program
# If not, see .
#
#############################################################################
-from . import main
\ No newline at end of file
+from . import auth_signup
+from . import web
diff --git a/password_reset_manager/controllers/auth_signup.py b/password_reset_manager/controllers/auth_signup.py
new file mode 100644
index 000000000..e7e0626a6
--- /dev/null
+++ b/password_reset_manager/controllers/auth_signup.py
@@ -0,0 +1,104 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# 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 LESSER GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program
+# If not, see .
+#
+#############################################################################
+
+import odoo
+from odoo import http, _
+from odoo.exceptions import UserError
+from odoo.http import request, dispatch_rpc
+
+from odoo.addons.auth_signup.controllers.main import AuthSignupHome
+
+
+class AuthSignupHomeInherit(AuthSignupHome):
+ @http.route('/web/forgot_password', type='http', auth='public',
+ website=True, sitemap=False, csrf=False)
+ def forgot_password(self):
+ """
+ Handle the "Forgot Password" functionality.
+
+ :return: A response containing the "forgot_password" template with the
+ context data.
+ """
+ qcontext = self.get_auth_signup_qcontext()
+ response = request.render('password_reset_manager.forgot_password',
+ qcontext)
+ return response
+
+ @http.route('/web/reset_password/direct', type='http', auth='public',
+ website=True, sitemap=False, csrf=False, )
+ def web_auth_reset_password_direct(self):
+ """
+ Handle the direct reset password functionality for web authentication.
+
+ :return: A response containing the "reset_password_direct" template
+ with the context data.
+ """
+ qcontext = self.get_auth_signup_qcontext()
+ response = request.render(
+ 'password_reset_manager.reset_password_direct', qcontext)
+ return response
+
+ @http.route('/web/reset_password/submit', type='http',
+ methods=['POST'], auth="public", website=True, csrf=False)
+ def change_password(self, **kw):
+ """
+ Handle the password change functionality for a user.
+
+ :param kw: Keyword arguments received from the request.
+
+ :return: A redirect to the login page with a success message or an
+ error message.
+ """
+ values = {}
+
+ # Check if the new password and confirm new password match.
+ if kw['confirm_new_password'] == kw['new_password']:
+ try:
+ # Authenticate the user session with the provided old password
+ uid = request.session.authenticate(request.session.db,
+ kw['user_name'],
+ kw['old_password'])
+ user = request.env['res.users'].search([('id', '=', uid)])
+ is_user_public = request.env.user.has_group(
+ 'base.group_public')
+ if not is_user_public:
+ # Update the user's password with the new password.
+ user.sudo().write({
+ 'password': kw['confirm_new_password']
+ })
+
+ # Redirect to the login page with a success message.
+ return request.redirect('/web/login?message=%s'
+ % _('Password Changed'))
+ else:
+ values['error'] = _(
+ "Public users can't change their password")
+ return request.render(
+ 'password_reset_manager.reset_password_direct', values)
+ except odoo.exceptions.AccessDenied as e:
+ values['error'] = _("Login or Password Is Incorrect")
+ return request.render(
+ 'password_reset_manager.reset_password_direct', values)
+ else:
+ values['error'] = _("Password Not Match")
+ return request.render(
+ 'password_reset_manager.reset_password_direct', values)
diff --git a/password_reset_manager/controllers/main.py b/password_reset_manager/controllers/main.py
deleted file mode 100644
index 6be6ca148..000000000
--- a/password_reset_manager/controllers/main.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# -*- coding: utf-8 -*-
-#############################################################################
-#
-# Cybrosys Technologies Pvt. Ltd.
-#
-# Copyright (C) 2022-TODAY Cybrosys Technologies()
-# Author: Cybrosys Techno Solutions()
-#
-# You can modify it under the terms of the GNU LESSER
-# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
-#
-# 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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
-#
-# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
-# (LGPL v3) along with this program.
-# If not, see .
-#
-#############################################################################
-
-import logging
-import odoo
-from odoo import http, _
-from odoo.exceptions import UserError
-from odoo.http import request, dispatch_rpc
-
-_logger = logging.getLogger(__name__)
-from odoo.addons.auth_signup.controllers.main import AuthSignupHome
-from odoo.addons.web.controllers.database import Database
-
-
-class DatabaseInherit(Database):
- @http.route('/web/rest_by_master_pass/submit', type='http', methods=['POST'], auth="public", website=True,
- csrf=False)
- def change_password_by_master(self, *args, **kw):
- values = {}
- if kw['confirm_new_password'] == kw['new_password']:
- if odoo.tools.config.verify_admin_password(kw['master_password']):
- user_valid = request.env['res.users'].sudo().search([('login', '=', kw['user_name'])])
- if user_valid:
- query = "update res_users set password='%s' where login='%s'" % (
- kw['confirm_new_password'], kw['user_name'])
- request.cr.execute(query)
- return request.redirect('/web/login?message=%s' % _('Password Changed'))
- else:
- values['error'] = _("User Name Is Not Valid")
- return request.render('password_reset_manager.forgot_password', values)
-
- else:
- values['error'] = _("Master Password Is Incorrect")
- return request.render('password_reset_manager.forgot_password', values)
-
- else:
- values['error'] = _("Password Not Matched")
- return request.render('password_reset_manager.forgot_password', values)
-
-
-class AuthSignupHomeInherit(AuthSignupHome):
-
- @http.route('/web/forgot_password', type='http', auth='public', website=True, sitemap=False,
- csrf=False, )
- def forgot_password(self, *args, **kw):
- qcontext = self.get_auth_signup_qcontext()
- response = request.render('password_reset_manager.forgot_password', qcontext)
- return response
-
- @http.route('/web/reset_password/direct', type='http', auth='public', website=True, sitemap=False, csrf=False, )
- def web_auth_reset_password_direct(self, *args, **kw):
- qcontext = self.get_auth_signup_qcontext()
- response = request.render('password_reset_manager.reset_password_direct', qcontext)
- return response
-
- @http.route('/web/reset_password/submit', type='http', methods=['POST'], auth="public", website=True, csrf=False)
- def change_password(self, *args, **kw):
- values = {}
- if kw['confirm_new_password'] == kw['new_password']:
- try:
- uid = request.session.authenticate(request.session.db, kw['user_name'],
- kw['old_password'])
- user = request.env['res.users'].search([('id', '=', uid)])
- user.password = kw['confirm_new_password']
- return request.redirect('/web/login?message=%s' % _('Password Changed'))
-
- except odoo.exceptions.AccessDenied as e:
- values['error'] = _("Login or Password Is Incorrect")
- return request.render('password_reset_manager.reset_password_direct', values)
- else:
- values['error'] = _("Password Not Match")
- return request.render('password_reset_manager.reset_password_direct', values)
diff --git a/password_reset_manager/controllers/web.py b/password_reset_manager/controllers/web.py
new file mode 100644
index 000000000..5ca95e6ae
--- /dev/null
+++ b/password_reset_manager/controllers/web.py
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+#############################################################################
+#
+# Cybrosys Technologies Pvt. Ltd.
+#
+# Copyright (C) 2023-TODAY Cybrosys Technologies()
+# Author: Cybrosys Techno Solutions ()
+#
+# You can modify it under the terms of the GNU LESSER
+# GENERAL PUBLIC LICENSE (AGPL v3), Version 3.
+#
+# 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 LESSER GENERAL PUBLIC LICENSE (AGPL v3) for more details.
+#
+# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
+# (AGPL v3) along with this program
+# If not, see .
+#
+#############################################################################
+
+import odoo
+from odoo import http, _
+from odoo.http import request, dispatch_rpc
+
+from odoo.addons.web.controllers.database import Database
+
+
+class DatabaseInherit(Database):
+ @http.route('/web/reset_by_master_pass/submit', type='http',
+ methods=['POST'], auth="public", website=True, csrf=False)
+ def change_password_by_master(self, **kw):
+ """
+ Endpoint to change a user's password by a master password.
+
+ :param kw: Keyword arguments received from the request.
+
+ :return: A redirect to the login page with a success message or an
+ error message.
+ """
+ values = {}
+
+ # Check if the new password and confirm new password match.
+ if kw['confirm_new_password'] == kw['new_password']:
+ # Verify the master password using Odoo's config.
+ if odoo.tools.config.verify_admin_password(kw['master_password']):
+ # Search for a user with the provided user_name.
+ user_valid = request.env['res.users'].sudo().search([
+ ('login', '=', kw['user_name'])])
+ if user_valid:
+ # Update the user's password with the new password.
+ user_valid.sudo().write({
+ 'password': kw['confirm_new_password']
+ })
+ # Redirect to the login page with a success message.
+ return request.redirect('/web/login?message=%s'
+ % _('Password Changed'))
+ else:
+ values['error'] = _("User Name Is Not Valid")
+ return request.render(
+ 'password_reset_manager.forgot_password', values)
+ else:
+ values['error'] = _("Master Password Is Incorrect")
+ return request.render('password_reset_manager.forgot_password',
+ values)
+
+ else:
+ values['error'] = _("Password Not Matched")
+ return request.render('password_reset_manager.forgot_password',
+ values)
diff --git a/password_reset_manager/doc/RELEASE_NOTES.md b/password_reset_manager/doc/RELEASE_NOTES.md
index 160a70f03..72ad2f167 100644
--- a/password_reset_manager/doc/RELEASE_NOTES.md
+++ b/password_reset_manager/doc/RELEASE_NOTES.md
@@ -3,3 +3,4 @@
#### 21.12.2022
#### Version 16.0.1.0.0
#### ADD
+Initial Commit for Password Reset Manager
diff --git a/password_reset_manager/static/description/index.html b/password_reset_manager/static/description/index.html
index be7821274..0dcc06c23 100644
--- a/password_reset_manager/static/description/index.html
+++ b/password_reset_manager/static/description/index.html
@@ -548,4 +548,4 @@
-
\ No newline at end of file
+
diff --git a/password_reset_manager/views/reset_password.xml b/password_reset_manager/views/reset_password.xml
index f9e134ffb..a351bb2c7 100644
--- a/password_reset_manager/views/reset_password.xml
+++ b/password_reset_manager/views/reset_password.xml
@@ -3,7 +3,7 @@
-