login service
This commit is contained in:
parent
8ae4fddd12
commit
add7891e94
2 changed files with 76 additions and 49 deletions
|
|
@ -1,6 +1,9 @@
|
|||
const checkNostrExtension = require('../utils/checkNostrExtension');
|
||||
const loginService = require('../services/loginService');
|
||||
|
||||
const loginsFunction = () => {
|
||||
const rejectedNostrWarning = document.querySelector('#rejected-nostr-nudges');
|
||||
|
||||
window.onload = () => {
|
||||
checkNostrExtension(
|
||||
window,
|
||||
|
|
@ -16,55 +19,14 @@ const loginsFunction = () => {
|
|||
};
|
||||
|
||||
async function login() {
|
||||
let challengeResponse;
|
||||
try {
|
||||
challengeResponse = await fetch('/api/login/nostr-challenge', {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(`Something went wrong: ${error}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const { challenge } = await challengeResponse.json();
|
||||
|
||||
let pubkey;
|
||||
try {
|
||||
pubkey = await window.nostr.getPublicKey();
|
||||
} catch (error) {
|
||||
document.querySelector('#rejected-nostr-nudges').style.display = 'block';
|
||||
return;
|
||||
}
|
||||
const event = {
|
||||
kind: 22242,
|
||||
created_at: Math.floor(Date.now() / 1000),
|
||||
tags: [['challenge', challenge]],
|
||||
content: 'Sign this challenge to authenticate',
|
||||
pubkey: pubkey,
|
||||
};
|
||||
|
||||
let signedEvent;
|
||||
try {
|
||||
signedEvent = await window.nostr.signEvent(event);
|
||||
} catch (error) {
|
||||
document.querySelector('#rejected-nostr-nudges').style.display = 'block';
|
||||
return;
|
||||
}
|
||||
|
||||
let verifyResponse;
|
||||
try {
|
||||
verifyResponse = await fetch('/api/login/nostr-verify', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(signedEvent),
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(`Something went wrong: ${error}`);
|
||||
return;
|
||||
}
|
||||
const verifyResponse = await loginService.requestAndRespondLoginChallenge({
|
||||
onRejectedPubKeyCallback: () => {
|
||||
rejectedNostrWarning.style.display = 'block';
|
||||
},
|
||||
onRejectedSignatureCallback: () => {
|
||||
rejectedNostrWarning.style.display = 'block';
|
||||
},
|
||||
});
|
||||
|
||||
if (verifyResponse.status === 403) {
|
||||
document.querySelector('#rejected-public-key').style.display = 'block';
|
||||
|
|
|
|||
65
src/front/services/loginService.js
Normal file
65
src/front/services/loginService.js
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
const requestAndRespondLoginChallenge = async ({
|
||||
onRejectedPubKeyCallback,
|
||||
onRejectedSignatureCallback,
|
||||
}) => {
|
||||
onRejectedPubKeyCallback = () => {
|
||||
document.querySelector('#rejected-nostr-nudges').style.display = 'block';
|
||||
};
|
||||
onRejectedSignatureCallback = onRejectedPubKeyCallback;
|
||||
|
||||
let challengeResponse;
|
||||
try {
|
||||
challengeResponse = await fetch('/api/login/nostr-challenge', {
|
||||
method: 'GET',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(`Something went wrong: ${error}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const { challenge } = await challengeResponse.json();
|
||||
|
||||
let pubkey;
|
||||
try {
|
||||
pubkey = await window.nostr.getPublicKey();
|
||||
} catch (error) {
|
||||
onRejectedPubKeyCallback();
|
||||
return;
|
||||
}
|
||||
const event = {
|
||||
kind: 22242,
|
||||
created_at: Math.floor(Date.now() / 1000),
|
||||
tags: [['challenge', challenge]],
|
||||
content: 'Sign this challenge to authenticate',
|
||||
pubkey: pubkey,
|
||||
};
|
||||
|
||||
let signedEvent;
|
||||
try {
|
||||
signedEvent = await window.nostr.signEvent(event);
|
||||
} catch (error) {
|
||||
onRejectedSignatureCallback();
|
||||
return;
|
||||
}
|
||||
|
||||
let verifyResponse;
|
||||
try {
|
||||
verifyResponse = await fetch('/api/login/nostr-verify', {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(signedEvent),
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(`Something went wrong: ${error}`);
|
||||
return;
|
||||
}
|
||||
|
||||
return verifyResponse;
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
requestAndRespondLoginChallenge,
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue