Fix auth bg

This commit is contained in:
austinkelsay 2024-10-04 16:41:49 -05:00
parent 6872d77d01
commit 153be7cb20
3 changed files with 69 additions and 34 deletions

View File

@ -10,7 +10,7 @@ const localRatelimit = {
limit: async (key) => { limit: async (key) => {
const now = Date.now(); const now = Date.now();
const windowMs = 10 * 1000; // 10 seconds const windowMs = 10 * 1000; // 10 seconds
const maxRequests = 5; const maxRequests = 20;
const requestLog = inMemoryStore.get(key) || []; const requestLog = inMemoryStore.get(key) || [];
const windowStart = now - windowMs; const windowStart = now - windowMs;

View File

@ -28,23 +28,58 @@ const authorize = async (pubkey) => {
if (dbUser) { if (dbUser) {
const fields = await findKind0Fields(profile); const fields = await findKind0Fields(profile);
// See if any of the fields values have changed compared to dbUser
const updatedFields = Object.keys(fields).reduce((acc, key) => {
if (fields[key] !== dbUser[key] && key !== "lud16") {
acc[key] = fields[key];
}
return acc;
}, {});
// if there are updated fields, update the user only with the updated fields
if (Object.keys(updatedFields).length > 0) {
dbUser = await updateUser(dbUser.id, updatedFields);
}
// Combine user object with kind0Fields, giving priority to kind0Fields // Combine user object with kind0Fields, giving priority to kind0Fields
const combinedUser = { ...dbUser, ...fields }; const combinedUser = { ...dbUser, ...fields };
// Update the user in the database if necessary return combinedUser;
dbUser = await updateUser(dbUser.id, combinedUser);
return dbUser;
} else { } else {
// Create user // Create user
if (profile) { if (profile) {
const fields = await findKind0Fields(profile); const fields = await findKind0Fields(profile);
const payload = { pubkey, username: fields.username, avatar: fields.avatar }; const payload = { pubkey, username: fields.username, avatar: fields.avatar };
if (appConfig.authorPubkeys.includes(pubkey)) {
// create a new author role for this user
const createdUser = await createUser(payload);
const role = await createRole({
userId: createdUser.id,
admin: true,
subscribed: false,
});
if (!role) {
console.error("Failed to create role");
return null;
}
const updatedUser = await updateUser(createdUser.id, { role: role.id });
if (!updatedUser) {
console.error("Failed to update user");
return null;
}
const fullUser = await getUserByPubkey(pubkey);
return fullUser;
} else {
dbUser = await createUser(payload); dbUser = await createUser(payload);
return dbUser; return dbUser;
} }
} }
}
} catch (error) { } catch (error) {
console.error("Nostr login error:", error); console.error("Nostr login error:", error);
} }
@ -92,7 +127,7 @@ export const authOptions = {
let sk = generateSecretKey() let sk = generateSecretKey()
let pk = getPublicKey(sk) let pk = getPublicKey(sk)
let skHex = bytesToHex(sk) let skHex = bytesToHex(sk)
const updatedUser = await updateUser(token.user.id, {pubkey: pk, privkey: skHex}); const updatedUser = await updateUser(token.user.id, { pubkey: pk, privkey: skHex });
if (!updatedUser) { if (!updatedUser) {
console.error("Failed to update user"); console.error("Failed to update user");
return null; return null;
@ -104,32 +139,32 @@ export const authOptions = {
} }
} }
// todo this does not work on first login only the second time // // todo this does not work on first login only the second time
if (user && appConfig.authorPubkeys.includes(user?.pubkey) && !user?.role) { // if (user && appConfig.authorPubkeys.includes(user?.pubkey) && !user?.role) {
console.log("user in appConfig condition", user); // console.log("user in appConfig condition", user);
// create a new author role for this user // // create a new author role for this user
const role = await createRole({ // const role = await createRole({
userId: user.id, // userId: user.id,
admin: true, // admin: true,
subscribed: false, // subscribed: false,
}); // });
console.log("role", role); // console.log("role", role);
if (!role) { // if (!role) {
console.error("Failed to create role"); // console.error("Failed to create role");
return null; // return null;
} // }
console.log("user in appConfig condition", user); // console.log("user in appConfig condition", user);
const updatedUser = await updateUser(user.id, {role: role.id}); // const updatedUser = await updateUser(user.id, {role: role.id});
if (!updatedUser) { // if (!updatedUser) {
console.error("Failed to update user"); // console.error("Failed to update user");
return null; // return null;
} // }
token.user = updatedUser; // token.user = updatedUser;
} // }
// Add combined user object to the token // Add combined user object to the token
if (user) { if (user) {

View File

@ -37,7 +37,7 @@ export const findKind0Fields = async (kind0) => {
const lud16 = findTruthyPropertyValue(kind0, ['lud16', 'lightning', 'lnurl', 'lnurlp', 'lnurlw']); const lud16 = findTruthyPropertyValue(kind0, ['lud16', 'lightning', 'lnurl', 'lnurlp', 'lnurlw']);
if (lud16) { if (lud16) {
fields.lightningAddress = lud16; fields.lud16 = lud16;
} }
return fields; return fields;