aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/register.ts15
-rw-r--r--routes/users.ts22
2 files changed, 28 insertions, 9 deletions
diff --git a/lib/register.ts b/lib/register.ts
index 36b9d443..91c140b0 100644
--- a/lib/register.ts
+++ b/lib/register.ts
@@ -12,7 +12,7 @@ import { v4 } from "uuid";
const valid = /^[\p{L}\p{N}]{2,24}$/u;
export default async (user, ip) => {
- let { password, username } = user;
+ let { password, pubkey, username } = user;
l("registering", username);
if (!username) fail("Username required");
@@ -48,17 +48,20 @@ export default async (user, ip) => {
}
}
- const sk = randomBytes(32);
- const pubkey = getPublicKey(sk);
- user.pubkey = pubkey;
- user.nsec = nip49encrypt(sk, password);
user.currencies = [...new Set([user.currency, "CAD", "USD"])];
user.fiat = false;
user.otpsecret = authenticator.generateSecret();
user.migrated = true;
user.locktime = 300;
- user.npub = nip19.npubEncode(user.pubkey);
+ if (!pubkey) {
+ const sk = randomBytes(32);
+ const pubkey = getPublicKey(sk);
+ user.pubkey = pubkey;
+ user.nsec = nip49encrypt(sk, password);
+ }
+
+ user.npub = nip19.npubEncode(pubkey);
user.nwc = bytesToHex(randomBytes(32));
const account = JSON.stringify({
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({});
}