{"id":23642,"date":"2026-06-04T21:48:19","date_gmt":"2026-06-04T21:48:19","guid":{"rendered":"https:\/\/www.salvatorerobuschi.com\/reserved-area\/verifica-account\/"},"modified":"2026-06-05T08:29:03","modified_gmt":"2026-06-05T08:29:03","slug":"verify-account","status":"publish","type":"page","link":"https:\/\/www.salvatorerobuschi.com\/en\/reserved-area\/verify-account\/","title":{"rendered":"Verify account"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"23642\" class=\"elementor elementor-23642 elementor-23573\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7ca9b29 e-con-full e-flex e-con e-parent\" data-id=\"7ca9b29\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-116b31e elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-heading\" data-id=\"116b31e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><span style=\"color: #e4002b\">Verify<\/span> your account<\/h1>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-aef5264 e-con-full e-flex e-con e-child\" data-id=\"aef5264\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-58c5fb8 e-con-full e-flex e-con e-child\" data-id=\"58c5fb8\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9ed2cf3 elementor-widget elementor-widget-text-editor\" data-id=\"9ed2cf3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Enter the <span style=\"color: #e4002b;\">OTP code<\/span> we just sent you by <span style=\"color: #e4002b;\">email<\/span>.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b116be1 elementor-button-align-start elementor-mobile-button-align-start elementor-widget elementor-widget-form\" data-id=\"b116be1\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;step_next_label&quot;:&quot;Next&quot;,&quot;step_previous_label&quot;:&quot;Previous&quot;,&quot;step_type&quot;:&quot;none&quot;,&quot;step_icon_shape&quot;:&quot;circle&quot;}\" data-widget_type=\"form.default\">\n\t\t\t\t\t\t\t<form class=\"elementor-form\" method=\"post\" name=\"Conferma OTP\" aria-label=\"Conferma OTP\">\n\t\t\t<input type=\"hidden\" name=\"post_id\" value=\"23642\"\/>\n\t\t\t<input type=\"hidden\" name=\"form_id\" value=\"b116be1\"\/>\n\t\t\t<input type=\"hidden\" name=\"referer_title\" value=\"Verify account reserved area | Salvatore Robuschi Pumps\" \/>\n\n\t\t\t\t\t\t\t<input type=\"hidden\" name=\"queried_id\" value=\"23642\"\/>\n\t\t\t\n\t\t\t<div class=\"elementor-form-fields-wrapper elementor-labels-above\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-field-type-text elementor-field-group elementor-column elementor-field-group-otp elementor-col-100 elementor-field-required elementor-mark-required\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<input size=\"1\" type=\"text\" name=\"form_fields[otp]\" id=\"form-field-otp\" class=\"elementor-field elementor-size-md  elementor-field-textual\" placeholder=\"OTP code\" required=\"required\">\n\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<div class=\"elementor-field-group elementor-column elementor-field-type-submit elementor-col-100 e-form__buttons\">\n\t\t\t\t\t<button class=\"elementor-button elementor-size-sm\" type=\"submit\" id=\"mnemosyne-submit\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Verify<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/button>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/form>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-073f546 elementor-widget elementor-widget-text-editor\" data-id=\"073f546\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"user-already-approved\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Account already approved, redirecting&#8230;<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ee9a72a elementor-widget elementor-widget-text-editor\" data-id=\"ee9a72a\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"wrong-otp-error\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Invalid OTP code<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c8ed863 elementor-widget elementor-widget-text-editor\" data-id=\"c8ed863\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"expired-otp-error\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>OTP code expired. Please request a new one.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5cd2a30 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-shortcode\" data-id=\"5cd2a30\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n    const redirectUrl = \"\/en\/reserved-area\/thank-you\/\";\r\n    const apiBaseUrl = \"https:\/\/drawings.salvatorerobuschi.com\";\r\n        \r\n    \/\/ 1. Grab HTML elements\r\n    const otpInput = document.getElementById('form-field-otp');\r\n    const resendLink = document.getElementById('resend-otp');\r\n\r\n    const userApprovedMsg = document.getElementById('user-already-approved');\r\n    const wrongOtpMsg = document.getElementById('wrong-otp-error');\r\n    const expiredOtpMsg = document.getElementById('expired-otp-error');\r\n\r\n    function hideMessages() {\r\n        if (userApprovedMsg) userApprovedMsg.style.display = 'none';\r\n        if (wrongOtpMsg) wrongOtpMsg.style.display = 'none';\r\n        if (expiredOtpMsg) expiredOtpMsg.style.display = 'none';\r\n    }\r\n\r\n    hideMessages();\r\n\r\n    \/\/ 2. Target the button directly by its ID\r\n    const verifyButton = document.getElementById(\"mnemosyne-submit\");\r\n\r\n    if (verifyButton) {\r\n        verifyButton.addEventListener(\"click\", async function (e) {\r\n            e.preventDefault(); \r\n            \r\n            hideMessages();\r\n\r\n            const email = localStorage.getItem(\"mnemosyne_unverified_email\") || localStorage.getItem(\"mnemosyne_email\");\r\n            const otp = otpInput ? otpInput.value.trim() : \"\";\r\n\r\n            if (!email) {\r\n                alert(\"Nessuna email trovata. Si prega di ricominciare la registrazione.\");\r\n                return;\r\n            }\r\n\r\n            if (!otp) {\r\n                if (wrongOtpMsg) wrongOtpMsg.style.display = 'block';\r\n                return;\r\n            }\r\n\r\n            try {\r\n                const response = await fetch(`${apiBaseUrl}\/access\/verify-otp`, {\r\n                    method: 'POST',\r\n                    headers: { 'Content-Type': 'application\/json' },\r\n                    body: JSON.stringify({ email, otp })\r\n                });\r\n\r\n                const data = await response.json();\r\n\r\n                if (response.ok) {\r\n                    window.location.href = redirectUrl; \r\n                } else {\r\n                    if (data.message === \"Invalid OTP.\") {\r\n                        if (wrongOtpMsg) wrongOtpMsg.style.display = 'block';\r\n                    } else if (data.message === \"OTP has expired.\") {\r\n                        if (expiredOtpMsg) expiredOtpMsg.style.display = 'block';\r\n                    } else if (data.message === \"User is already approved.\") {\r\n                        if (userApprovedMsg) userApprovedMsg.style.display = 'block';\r\n                        setTimeout(() => { window.location.href = redirectUrl; }, 2000);\r\n                    } else {\r\n                        alert(data.message || data.error || \"Si \u00e8 verificato un errore.\");\r\n                    }\r\n                }\r\n            } catch (error) {\r\n                console.error(\"Error verifying OTP:\", error);\r\n                alert(\"Errore di rete. Riprova pi\u00f9 tardi.\");\r\n            }\r\n        });\r\n    }\r\n\r\n    \/\/ 3. Handle Resend OTP Link Click \r\n    if (resendLink) {\r\n        let isResendDisabled = false;\r\n        \r\n        const feedbackSpan = document.createElement(\"span\");\r\n        feedbackSpan.className = \"mnemosyne-feedback-text\";\r\n        resendLink.appendChild(feedbackSpan);\r\n\r\n        \/\/ Pre-defined SVG strings with adjusted scaling (0.9em) and spacing (margin-left)\r\n        const svgCheck = '<svg viewBox=\"0 0 448 512\" style=\"height: 0.9em; width: auto; margin-left: 6px; vertical-align: -0.125em;\" fill=\"currentColor\"><path d=\"M438.6 105.4c12.5 12.5 12.5 32.8 0 45.3l-256 256c-12.5 12.5-32.8 12.5-45.3 0l-128-128c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0L160 333.3 393.4 105.4c12.5-12.5 32.8-12.5 45.3 0z\"\/><\/svg>';\r\n        const svgClock = '<svg viewBox=\"0 0 512 512\" style=\"height: 0.9em; width: auto; margin-left: 6px; vertical-align: -0.125em;\" fill=\"currentColor\"><path d=\"M256 0a256 256 0 1 1 0 512A256 256 0 1 1 256 0zM232 120V256c0 8 4 15.5 10.7 20l96 64c11 7.4 25.9 4.4 33.3-6.7s4.4-25.9-6.7-33.3L280 243.2V120c0-13.3-10.7-24-24-24s-24 10.7-24 24z\"\/><\/svg>';\r\n        const svgCross = '<svg viewBox=\"0 0 384 512\" style=\"height: 0.9em; width: auto; margin-left: 6px; vertical-align: -0.125em;\" fill=\"#e4002b\"><path d=\"M342.6 150.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L192 210.7 86.6 105.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L146.7 256 41.4 361.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L192 301.3 297.4 406.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L237.3 256 342.6 150.6z\"\/><\/svg>';\r\n        const htmlSpinner = '<span class=\"mnemosyne-spinner\" style=\"margin-left: 6px;\"><\/span>';\r\n\r\n        resendLink.addEventListener('click', async function (e) {\r\n            e.preventDefault(); \r\n            \r\n            if (isResendDisabled) return;\r\n\r\n            hideMessages();\r\n\r\n            const email = localStorage.getItem(\"mnemosyne_unverified_email\") || localStorage.getItem(\"mnemosyne_email\");\r\n\r\n            if (!email) {\r\n                alert(\"Nessuna email trovata. Si prega di ricominciare la registrazione.\");\r\n                return;\r\n            }\r\n\r\n            isResendDisabled = true;\r\n            resendLink.style.pointerEvents = \"none\";\r\n            resendLink.style.opacity = \"0.7\";\r\n            \r\n            \/\/ Show custom CSS spinner\r\n            feedbackSpan.innerHTML = htmlSpinner;\r\n\r\n            try {\r\n                const response = await fetch(`${apiBaseUrl}\/access\/resend-otp`, {\r\n                    method: 'POST',\r\n                    headers: { 'Content-Type': 'application\/json' },\r\n                    body: JSON.stringify({ email })\r\n                });\r\n\r\n                const data = await response.json();\r\n\r\n                if (response.ok) {\r\n                    if (otpInput) otpInput.value = \"\"; \r\n                    \r\n                    feedbackSpan.innerHTML = svgCheck;\r\n                    setTimeout(() => startTimer(60), 1000);\r\n\r\n                } else {\r\n                    if (response.status === 429) {\r\n                        feedbackSpan.innerHTML = svgClock;\r\n                        setTimeout(() => startTimer(60), 1000);\r\n                    } else if (data.message === \"User is already approved. Please log in.\") {\r\n                        showErrorX();\r\n                        if (userApprovedMsg) userApprovedMsg.style.display = 'block';\r\n                        setTimeout(() => { window.location.href = redirectUrl; }, 2000);\r\n                    } else {\r\n                        showErrorX();\r\n                        alert(data.error || data.message || \"Si \u00e8 verificato un errore.\");\r\n                    }\r\n                }\r\n            } catch (error) {\r\n                console.error(\"Error resending OTP:\", error);\r\n                showErrorX();\r\n            }\r\n        });\r\n\r\n        function startTimer(seconds) {\r\n            let timeLeft = seconds;\r\n            feedbackSpan.innerHTML = `${svgClock}&nbsp;${timeLeft}s`;\r\n            \r\n            const interval = setInterval(() => {\r\n                timeLeft--;\r\n                if (timeLeft <= 0) {\r\n                    clearInterval(interval);\r\n                    resetResendState();\r\n                } else {\r\n                    \/\/ BUG FIX: Actually update the DOM element here\r\n                    feedbackSpan.innerHTML = `${svgClock}&nbsp;${timeLeft}s`;\r\n                }\r\n            }, 1000);\r\n        }\r\n\r\n        function showErrorX() {\r\n            feedbackSpan.innerHTML = svgCross;\r\n            setTimeout(resetResendState, 3000); \r\n        }\r\n\r\n        function resetResendState() {\r\n            isResendDisabled = false;\r\n            resendLink.style.pointerEvents = \"auto\";\r\n            resendLink.style.opacity = \"1\";\r\n            feedbackSpan.innerHTML = \"\";\r\n        }\r\n    }\r\n});\r\n<\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1a97a56 e-con-full e-flex e-con e-child\" data-id=\"1a97a56\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-03427bf elementor-widget elementor-widget-heading\" data-id=\"03427bf\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<p class=\"elementor-heading-title elementor-size-default\">Helpful links<\/p>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-413c91b elementor-widget elementor-widget-text-editor\" data-id=\"413c91b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Didn&#8217;t receive the email or has the OTP code expired? <a id=\"resend-otp\" href=\"#\">Request a new code<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Verify your account Enter the OTP code we just sent you by email. Account already approved, redirecting&#8230; Invalid OTP code OTP code expired. Please request a new one. Helpful links Didn&#8217;t receive the email or has the OTP code expired? Request a new code<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":21836,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_wds_title":"Verify account reserved area | Salvatore Robuschi Pumps","_wds_metadesc":"Enter the OTP code to verify your account in the Salvatore Robuschi Reserved area. Protect your user profile and secure your access instantly.","_wds_focus-keywords":"verify account,otp verification,salvatore robuschi","_wds_meta-robots-adv":"","_wds_meta-robots-noindex":false,"_wds_meta-robots-nofollow":false,"_wds_meta-robots-index":false,"_wds_meta-robots-follow":false,"_wds_autolinks-exclude":false,"_wds_canonical":"","_wds_opengraph":[],"_wds_twitter":[],"footnotes":""},"class_list":["post-23642","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/pages\/23642","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/comments?post=23642"}],"version-history":[{"count":5,"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/pages\/23642\/revisions"}],"predecessor-version":[{"id":23667,"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/pages\/23642\/revisions\/23667"}],"up":[{"embeddable":true,"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/pages\/21836"}],"wp:attachment":[{"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/media?parent=23642"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}