summaryrefslogtreecommitdiff
path: root/addons/google_recaptcha/static
diff options
context:
space:
mode:
Diffstat (limited to 'addons/google_recaptcha/static')
-rw-r--r--addons/google_recaptcha/static/src/js/recaptcha.js60
-rw-r--r--addons/google_recaptcha/static/src/scss/recaptcha.scss5
-rw-r--r--addons/google_recaptcha/static/src/xml/recaptcha.xml14
3 files changed, 79 insertions, 0 deletions
diff --git a/addons/google_recaptcha/static/src/js/recaptcha.js b/addons/google_recaptcha/static/src/js/recaptcha.js
new file mode 100644
index 00000000..b4ae76fd
--- /dev/null
+++ b/addons/google_recaptcha/static/src/js/recaptcha.js
@@ -0,0 +1,60 @@
+odoo.define('google_recaptcha.ReCaptchaV3', function (require) {
+"use strict";
+
+const ajax = require('web.ajax');
+const Class = require('web.Class');
+const core = require('web.core');
+
+const _t = core._t;
+
+const ReCaptcha = Class.extend({
+ /**
+ * @override
+ */
+ init: function () {
+ this._publicKey = odoo.reCaptchaPublicKey;
+ },
+ /**
+ * Loads the recaptcha libraries.
+ *
+ * @returns {Promise|boolean} promise if libs are loading else false if the reCaptcha key is empty.
+ */
+ loadLibs: function () {
+ if (this._publicKey) {
+ this._recaptchaReady = ajax.loadJS(`https://www.recaptcha.net/recaptcha/api.js?render=${this._publicKey}`)
+ .then(() => new Promise(resolve => window.grecaptcha.ready(() => resolve())));
+ return this._recaptchaReady.then(() => !!document.querySelector('.grecaptcha-badge'));
+ }
+ return false;
+ },
+ /**
+ * Returns an object with the token if reCaptcha call succeeds
+ * If no key is set an object with a message is returned
+ * If an error occured an object with the error message is returned
+ *
+ * @param {string} action
+ * @returns {Promise|Object}
+ */
+ getToken: async function (action) {
+ if (!this._publicKey) {
+ return {
+ message: _t("No recaptcha site key set."),
+ };
+ }
+ await this._recaptchaReady;
+ try {
+ return {
+ token: await window.grecaptcha.execute(this._publicKey, {action: action})
+ };
+ } catch (e) {
+ return {
+ error: _t("The recaptcha site key is invalid."),
+ };
+ }
+ },
+});
+
+return {
+ ReCaptcha: ReCaptcha,
+};
+});
diff --git a/addons/google_recaptcha/static/src/scss/recaptcha.scss b/addons/google_recaptcha/static/src/scss/recaptcha.scss
new file mode 100644
index 00000000..1603d474
--- /dev/null
+++ b/addons/google_recaptcha/static/src/scss/recaptcha.scss
@@ -0,0 +1,5 @@
+// Hide google recaptcha V3 don't forget to add legal
+// https://developers.google.com/recaptcha/docs/faq#id-like-to-hide-the-recaptcha-badge.-what-is-allowed
+.grecaptcha-badge {
+ visibility: hidden;
+}
diff --git a/addons/google_recaptcha/static/src/xml/recaptcha.xml b/addons/google_recaptcha/static/src/xml/recaptcha.xml
new file mode 100644
index 00000000..4b7c23b4
--- /dev/null
+++ b/addons/google_recaptcha/static/src/xml/recaptcha.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+
+<t t-name="google_recaptcha.recaptcha_legal_terms">
+ <small class="o_recaptcha_legal_terms">
+ Protected by reCAPTCHA,
+ <a href="https://policies.google.com/privacy" target="_blank">Privacy Policy</a>
+ &amp;
+ <a href="https://policies.google.com/terms" target="_blank">Terms of Service</a>
+ apply.
+ </small>
+</t>
+
+</odoo>