{"id":21952,"date":"2026-04-28T08:15:36","date_gmt":"2026-04-28T08:15:36","guid":{"rendered":"https:\/\/www.salvatorerobuschi.com\/reserved-area\/accesso\/"},"modified":"2026-06-05T07:34:12","modified_gmt":"2026-06-05T07:34:12","slug":"login","status":"publish","type":"page","link":"https:\/\/www.salvatorerobuschi.com\/en\/reserved-area\/login\/","title":{"rendered":"Login"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"21952\" class=\"elementor elementor-21952 elementor-18976\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6779070 e-con-full e-flex e-con e-parent\" data-id=\"6779070\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5995516 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-heading\" data-id=\"5995516\" 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\">Log in<\/span> to the reserved area to download documents<\/h1>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d68c90c e-con-full e-flex e-con e-child\" data-id=\"d68c90c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-8f98e19 e-con-full e-flex e-con e-child\" data-id=\"8f98e19\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-677aa4f elementor-button-align-start elementor-mobile-button-align-start elementor-widget elementor-widget-form\" data-id=\"677aa4f\" 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=\"Accesso\" aria-label=\"Accesso\">\n\t\t\t<input type=\"hidden\" name=\"post_id\" value=\"21952\"\/>\n\t\t\t<input type=\"hidden\" name=\"form_id\" value=\"677aa4f\"\/>\n\t\t\t<input type=\"hidden\" name=\"referer_title\" value=\"Reserved area login: drawings &amp; CAD | Salvatore Robuschi\" \/>\n\n\t\t\t\t\t\t\t<input type=\"hidden\" name=\"queried_id\" value=\"21952\"\/>\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-username 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[username]\" id=\"form-field-username\" class=\"elementor-field elementor-size-md  elementor-field-textual\" placeholder=\"Username *\" 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-type-password elementor-field-group elementor-column elementor-field-group-password 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=\"password\" name=\"form_fields[password]\" id=\"form-field-password\" class=\"elementor-field elementor-size-md  elementor-field-textual\" placeholder=\"Password *\" 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\">Log in<\/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-c27c20f elementor-widget elementor-widget-text-editor\" data-id=\"c27c20f\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"warning-empty\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Both fields are required<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a2e959 elementor-widget elementor-widget-text-editor\" data-id=\"3a2e959\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"warning-credentials\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Incorrect username or password<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f52c700 elementor-widget elementor-widget-text-editor\" data-id=\"f52c700\" data-element_type=\"widget\" data-e-type=\"widget\" id=\"warning-network\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>The reserved area is temporarily unavailable<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-642aa52 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-shortcode\" data-id=\"642aa52\" 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\n\r\ndocument.getElementById(\"mnemosyne-submit\").addEventListener(\"click\", async function (e) {\r\n\r\n    \/\/ 1. Prevent the default form submission so the page doesn't reload\r\n\r\n    e.preventDefault();\r\n\r\n\r\n\r\n    \/\/ 2. Grab the input elements\r\n\r\n    const usernameInput = document.getElementById(\"form-field-username\");\r\n\r\n    const passwordInput = document.getElementById(\"form-field-password\");\r\n\r\n\r\n\r\n    \/\/ Grab the warning elements\r\n\r\n    const warningEmpty = document.getElementById(\"warning-empty\");\r\n\r\n    const warningCredentials = document.getElementById(\"warning-credentials\");\r\n\r\n    const warningNetwork = document.getElementById(\"warning-network\");\r\n\r\n    \r\n\r\n    \/\/ SHORTCODE ATTRIBUTES\r\n\r\n    const redirectUrl = \"\/en\/reserved-area\";\r\n\r\n    const otpVerificationPage = \"\";\r\n\r\n    \r\n\r\n    \/\/ Use .trim() to ensure they didn't just type spaces\r\n\r\n    const username = usernameInput ? usernameInput.value.trim() : \"\";\r\n\r\n    const password = passwordInput ? passwordInput.value : \"\";\r\n\r\n\r\n\r\n    \/\/ RESET: Hide all warnings at the start of every submission attempt\r\n\r\n    if (warningEmpty) warningEmpty.style.display = \"none\";\r\n\r\n    if (warningCredentials) warningCredentials.style.display = \"none\";\r\n\r\n    if (warningNetwork) warningNetwork.style.display = \"none\";\r\n\r\n\r\n\r\n    \/\/ 3. Validation check\r\n\r\n    if (username === \"\" || password === \"\") {\r\n\r\n        console.log(\"vuoto: Username or password is empty\");\r\n\r\n        \r\n\r\n        \/\/ Show empty fields warning\r\n\r\n        if (warningEmpty) warningEmpty.style.display = \"block\"; \r\n\r\n        \r\n\r\n        return; \/\/ Stop the script\r\n\r\n    }\r\n\r\n\r\n\r\n    \/\/ 4. Set up your REST API endpoint\r\n\r\n    const apiUrl = \"https:\/\/drawings.salvatorerobuschi.com\/auth\/login\"; \r\n\r\n\r\n\r\n    try {\r\n\r\n        \/\/ 5. Call the REST API to get the JWT\r\n\r\n        const response = await fetch(apiUrl, {\r\n\r\n            method: \"POST\",\r\n\r\n            headers: {\r\n\r\n                \"Content-Type\": \"application\/json\",\r\n\r\n                \"Accept\": \"application\/json\"\r\n\r\n            },\r\n\r\n            body: JSON.stringify({\r\n\r\n                username: username,\r\n\r\n                password: password\r\n\r\n            })\r\n\r\n        });\r\n\r\n\r\n\r\n        const data = await response.json();\r\n\r\n\r\n\r\n        \/\/ 6. Handle the API response\r\n\r\n        if (response.ok) {\r\n\r\n            \/\/ Success! The API returned a 2xx status code.\r\n\r\n            console.log(\"Authentication successful!\");\r\n\r\n            \r\n\r\n            \/\/ Extract the token\r\n\r\n            const token = data.token; \r\n\r\n\r\n\r\n            \/\/ Save the JWT and Username to localStorage\r\n\r\n            localStorage.setItem(\"mnemosyne_jwt\", token);\r\n\r\n            localStorage.setItem(\"mnemosyne_username\", username);\r\n\r\n            \r\n\r\n            console.log(\"JWT and Username recovered and saved.\");\r\n\r\n            \r\n\r\n            \/\/ Redirect the user\r\n\r\n            window.location.href = redirectUrl;\r\n\r\n            \r\n\r\n        } else {\r\n\r\n            \/\/ Check if it's the specific OTP unverified error\r\n\r\n            if (response.status === 403 && data.message === \"Invalid OTP\") {\r\n\r\n                console.warn(\"User not verified. Redirecting to OTP verification.\");\r\n\r\n                \r\n\r\n                \/\/ Save the email to local storage so the verify-otp page can use it\r\n\r\n                if (data.email) {\r\n\r\n                    localStorage.setItem(\"mnemosyne_email\", data.email);\r\n\r\n                }\r\n\r\n                \r\n\r\n                \/\/ Redirect to OTP verification page\r\n\r\n                window.location.href = otpVerificationPage;\r\n\r\n                return; \/\/ Stop further execution\r\n\r\n            }\r\n\r\n\r\n\r\n            \/\/ Auth Error: Standard invalid credentials\r\n\r\n            console.error(\"Authentication failed:\", data.message || data.error);\r\n\r\n            \r\n\r\n            \/\/ Show the wrong credentials warning\r\n\r\n            if (warningCredentials) warningCredentials.style.display = \"block\";\r\n\r\n        }\r\n\r\n\r\n\r\n    } catch (error) {\r\n\r\n        \/\/ Network Error: Catch network errors (e.g., CORS issues, server down)\r\n\r\n        console.error(\"Network error while calling the API:\", error);\r\n\r\n        \r\n\r\n        \/\/ Show the network error warning\r\n\r\n        if (warningNetwork) warningNetwork.style.display = \"block\";\r\n\r\n    }\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-53136bc e-con-full e-flex e-con e-child\" data-id=\"53136bc\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f3e2d86 elementor-widget elementor-widget-heading\" data-id=\"f3e2d86\" 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-644c9c4 elementor-widget elementor-widget-text-editor\" data-id=\"644c9c4\" 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>Forgot your password? <a href=\"\/en\/reserved-area\/password-reset\/\">Reset<\/a><br \/>Not registered yet? <a href=\"\/en\/reserved-area\/register\">Register<\/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>Log in to the reserved area to download documents Both fields are required Incorrect username or password The reserved area is temporarily unavailable Helpful links Forgot your password? ResetNot registered yet? Register<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":21836,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_wds_title":"Reserved area login: drawings & CAD | Salvatore Robuschi","_wds_metadesc":"Log in to the Salvatore Robuschi reserved area. Enter your credentials to download technical drawings and CAD models of our pumps.","_wds_focus-keywords":"reserved area login,salvatore robuschi login,pump CAD downloads","_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-21952","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/pages\/21952","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=21952"}],"version-history":[{"count":5,"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/pages\/21952\/revisions"}],"predecessor-version":[{"id":23606,"href":"https:\/\/www.salvatorerobuschi.com\/en\/wp-json\/wp\/v2\/pages\/21952\/revisions\/23606"}],"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=21952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}