diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..153a9e3
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,2 @@
+# -*- coding: utf-8 -*-
+from . import controllers
diff --git a/__manifest__.py b/__manifest__.py
new file mode 100644
index 0000000..7319f38
--- /dev/null
+++ b/__manifest__.py
@@ -0,0 +1,17 @@
+{
+ 'name': "Password Policy support for Signup",
+ 'depends': ['auth_password_policy', 'auth_signup'],
+ 'category': 'Hidden/Tools',
+ 'auto_install': True,
+ 'data': [
+ 'views/signup_templates.xml',
+ ],
+ 'assets': {
+ 'web.assets_frontend': [
+ 'auth_password_policy_signup/static/src/public/**/*',
+ 'auth_password_policy/static/src/password_meter.js',
+ 'auth_password_policy/static/src/password_policy.js',
+ ],
+ },
+ 'license': 'LGPL-3',
+}
diff --git a/controllers.py b/controllers.py
new file mode 100644
index 0000000..278ac20
--- /dev/null
+++ b/controllers.py
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+
+from odoo.http import request
+from odoo.addons.auth_signup.controllers.main import AuthSignupHome
+
+class AddPolicyData(AuthSignupHome):
+ def get_auth_signup_config(self):
+ d = super(AddPolicyData, self).get_auth_signup_config()
+ d['password_minimum_length'] = request.env['ir.config_parameter'].sudo().get_param('auth_password_policy.minlength')
+ return d
diff --git a/i18n/auth_password_policy_signup.pot b/i18n/auth_password_policy_signup.pot
new file mode 100644
index 0000000..06d842d
--- /dev/null
+++ b/i18n/auth_password_policy_signup.pot
@@ -0,0 +1,15 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:55+0000\n"
+"PO-Revision-Date: 2023-10-26 21:55+0000\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"
diff --git a/static/src/public/components/password_meter/password_meter.js b/static/src/public/components/password_meter/password_meter.js
new file mode 100644
index 0000000..834b6f7
--- /dev/null
+++ b/static/src/public/components/password_meter/password_meter.js
@@ -0,0 +1,35 @@
+/** @odoo-module */
+
+import { Meter } from "@auth_password_policy/password_meter";
+import { ConcretePolicy, recommendations } from "@auth_password_policy/password_policy";
+import { Component, useExternalListener, useState, xml } from "@odoo/owl";
+import { registry } from "@web/core/registry";
+
+class PasswordMeter extends Component {
+ static template = xml`
+ `;
+ static components = { Meter };
+ static props = {
+ selector: String,
+ };
+
+ setup() {
+ const inputEl = document.querySelector(this.props.selector);
+ useExternalListener(inputEl, "input", (e) => {
+ this.state.password = e.target.value || "";
+ });
+
+ const minlength = Number(inputEl.getAttribute("minlength"));
+ this.hasMinlength = !isNaN(minlength);
+ this.state = useState({
+ password: inputEl.value || "",
+ });
+ this.required = new ConcretePolicy({ minlength });
+ this.recommended = recommendations;
+ }
+}
+
+registry.category("public_components").add("password_meter", PasswordMeter);
diff --git a/static/src/public/components/password_meter/password_meter.xml b/static/src/public/components/password_meter/password_meter.xml
new file mode 100644
index 0000000..2aba44b
--- /dev/null
+++ b/static/src/public/components/password_meter/password_meter.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/static/src/public/scss/signup_policy.scss b/static/src/public/scss/signup_policy.scss
new file mode 100644
index 0000000..1b22a12
--- /dev/null
+++ b/static/src/public/scss/signup_policy.scss
@@ -0,0 +1,6 @@
+.field-password {
+ position: relative;
+ meter.o_password_meter {
+ bottom: calc(#{$input-height} / 2 - 7px);
+ }
+}
diff --git a/views/signup_templates.xml b/views/signup_templates.xml
new file mode 100644
index 0000000..f797da3
--- /dev/null
+++ b/views/signup_templates.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+