secajs/src/front/pages/login.js

128 lines
3.8 KiB
JavaScript
Raw Normal View History

2025-03-13 11:48:40 +01:00
const checkNostrExtension = require('../utils/checkNostrExtension');
2025-03-14 18:52:00 +01:00
const loginService = require('../services/loginService');
2025-03-15 12:46:55 +01:00
const WarningDiv = require('../components/WarningDiv');
const { NostrLoginButton } = require('../components/nostrButtons');
const PopupNotification = require('../components/PopupNotification');
const constants = require('../../constants');
2025-03-13 11:48:40 +01:00
2025-03-15 12:46:55 +01:00
const loginFunction = () => {
const loginButtonArea = document.getElementById('login-button-area');
const warningsArea = document.getElementById('warnings-area');
const successPopup = new PopupNotification({
parentElement: document.querySelector('body'),
id: 'login-success-popup',
text: '¡Éxito! Te estamos llevando a la app...',
});
successPopup.render();
const nostrLoginButton = new NostrLoginButton({
parentElement: loginButtonArea,
id: 'login-button',
onClickCallback: async () => {
const verifyResponse = await loginService.requestAndRespondLoginChallenge(
{
onRejectedPubKeyCallback: () => {
nostrRejectedWarning.display();
},
onRejectedSignatureCallback: () => {
nostrRejectedWarning.display();
},
}
);
if (verifyResponse.status === 403) {
notRegisteredPubkeyWarning.display();
}
if (verifyResponse.ok) {
nostrLoginButton.disable();
successPopup.display();
setTimeout(() => {
2025-03-31 16:27:21 +02:00
window.location.href = constants.WEB_PATHS.home;
2025-03-15 12:46:55 +01:00
}, constants.DEFAULT_REDIRECT_DELAY);
}
},
});
nostrLoginButton.render();
const notRegisteredPubkeyWarning = new WarningDiv({
parentElement: warningsArea,
id: 'rejected-public-key',
innerHTML: `<p>
Ups, esa clave no está registrada en la seca. ¿Quizás estás usando un
perfil equivocado?
</p>`,
});
notRegisteredPubkeyWarning.render();
const noExtensionWarning = new WarningDiv({
parentElement: warningsArea,
id: 'no-extension-nudges',
innerHTML: `<p>
¡Atención! No se ha encontrado una extensión de Nostr en tu navegador.
Puedes usar:
</p>
<p><strong>Firefox</strong></p>
<p>
<a
href="https://addons.mozilla.org/en-US/firefox/addon/alby/"
target="_blank"
rel="noopener noreferrer"
>Alby</a
>
</p>
<p>
<a
href="https://addons.mozilla.org/en-US/firefox/addon/nos2x-fox/"
target="_blank"
rel="noopener noreferrer"
>nos2x-fox</a
>
</p>
<p><strong>Chrome</strong></p>
<p>
<a
href="https://chromewebstore.google.com/detail/alby-bitcoin-wallet-for-l/iokeahhehimjnekafflcihljlcjccdbe?pli=1"
target="_blank"
rel="noopener noreferrer"
>Alby</a
>
</p>
<p>
<a
href="https://chromewebstore.google.com/detail/nos2x/kpgefcfmnafjgpblomihpgmejjdanjjp"
target="_blank"
rel="noopener noreferrer"
>nos2x</a
>
</p>`,
});
noExtensionWarning.render();
const nostrRejectedWarning = new WarningDiv({
parentElement: warningsArea,
id: 'rejected-nostr-nudges',
innerHTML: `<p>
Ups, parece que no has aceptado que usemos tus claves. Si te has
equivocado, puedes intentarlo de nuevo.
</p>`,
});
nostrRejectedWarning.render();
2025-03-14 18:52:00 +01:00
2025-03-13 11:48:40 +01:00
window.onload = () => {
2025-03-15 12:46:55 +01:00
checkNostrExtension({
2025-03-13 11:48:40 +01:00
window,
2025-03-15 12:46:55 +01:00
successCallback: () => {
2025-03-13 11:48:40 +01:00
console.log('Nostr extension present');
},
2025-03-15 12:46:55 +01:00
failureCallback: () => {
2025-03-13 11:48:40 +01:00
console.log('Nostr extension not present');
2025-03-15 12:46:55 +01:00
nostrLoginButton.disable();
noExtensionWarning.display();
2025-03-14 18:52:00 +01:00
},
});
2025-03-15 12:46:55 +01:00
};
2025-03-13 11:08:54 +01:00
};
2025-03-15 12:46:55 +01:00
loginFunction();