diff options
| author | Adam Soltys <[email protected]> | 2024-12-30 23:20:22 -0800 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-12-30 23:20:22 -0800 |
| commit | 9dfd7a003436593de3418b659b915ef0d5078c0b (patch) | |
| tree | 0f00ac1ec807cf50dc0f8efef9b317534ba84923 /routes | |
| parent | bec6c516f63b84720192a9a3909c09fccfce7143 (diff) | |
| download | coinos-server-9dfd7a003436593de3418b659b915ef0d5078c0b.tar.gz coinos-server-9dfd7a003436593de3418b659b915ef0d5078c0b.zip | |
nostr registration
Diffstat (limited to 'routes')
| -rw-r--r-- | routes/users.ts | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/routes/users.ts b/routes/users.ts index 151bd534..3b35a35c 100644 --- a/routes/users.ts +++ b/routes/users.ts @@ -367,17 +367,32 @@ export default { async nostrLogin(req, res) { try { const { event, id, twofa } = req.body; + const ip = req.headers["cf-connecting-ip"]; const challenge = await g(`challenge:${id}`); + const { pubkey: key } = event; if (!challenge) fail("Invalid or expired login challenge"); if (!verifyEvent(event) || event.content !== id) fail("Invalid signature or challenge mismatch."); - let user = await getUser(event.pubkey); - if (!user) fail("Pubkey not found"); + let user = await getUser(key); + if (!user) { + const k0 = await getProfile(key); + let username = k0?.name; + const exists = await getUser(username); + if (exists) username = key.substr(0, 24); + + user = { + username, + password: v4(), + pubkey: key, + }; + + user = await register(user, ip); + } const { username } = user; - l("logging in", username, req.headers["cf-connecting-ip"]); + l("logging in", username, ip); if ( user.twofa && @@ -393,6 +408,7 @@ export default { user = pick(user, whitelist); res.send({ user, token }); } catch (e) { + console.log(e); err("login error", e.message, req.socket.remoteAddress); res.code(401).send({}); } |
