From e0d9e83f282fcdef3f1d4e490827b139b7f451f8 Mon Sep 17 00:00:00 2001 From: "P. Reis" Date: Tue, 3 Dec 2024 20:04:18 -0300 Subject: [PATCH 1/2] Revert "Merge branch 'revert-70d30887' into 'main'" This reverts commit 0c2f082281bab672b43de8adc2163286cc875f20, reversing changes made to 70d308873554d17a8dff4e69df58683aa322d1dd. --- src/controllers/api/accounts.ts | 105 ++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 45 deletions(-) diff --git a/src/controllers/api/accounts.ts b/src/controllers/api/accounts.ts index d5beac03..3e054581 100644 --- a/src/controllers/api/accounts.ts +++ b/src/controllers/api/accounts.ts @@ -1,4 +1,4 @@ -import { NostrFilter, NSchema as n } from '@nostrify/nostrify'; +import { NostrEvent, NostrFilter, NSchema as n } from '@nostrify/nostrify'; import { nip19 } from 'nostr-tools'; import { z } from 'zod'; @@ -20,6 +20,7 @@ import { hydrateEvents } from '@/storages/hydrate.ts'; import { bech32ToPubkey } from '@/utils.ts'; import { addTag, deleteTag, findReplyTag, getTagSet } from '@/utils/tags.ts'; import { getPubkeysBySearch } from '@/utils/search.ts'; +import { MastodonAccount } from '@/entities/MastodonAccount.ts'; const usernameSchema = z .string().min(1).max(30) @@ -288,62 +289,76 @@ const updateCredentialsController: AppController = async (c) => { const pubkey = await signer.getPublicKey(); const body = await parseBody(c.req.raw); const result = updateCredentialsSchema.safeParse(body); + const store = await Storages.db(); if (!result.success) { return c.json(result.error, 422); } - const event = await updateEvent( - { kinds: [0], authors: [pubkey], limit: 1 }, - async (prev) => { - const meta = n.json().pipe(metadataSchema).catch({}).parse(prev.content); - const { - avatar: avatarFile, - header: headerFile, - display_name, - fields_attributes, - note, - nip05, - lud16, - website, - bot, - } = result.data; + const keys = Object.keys(result.data); + let event: NostrEvent | undefined; - const [avatar, header] = await Promise.all([ - avatarFile ? uploadFile(c, avatarFile, { pubkey }) : undefined, - headerFile ? uploadFile(c, headerFile, { pubkey }) : undefined, - ]); + if (keys.length === 1 && keys[0] === 'pleroma_settings_store') { + event = (await store.query([{ kinds: [0], authors: [pubkey] }]))[0]; + } else { + event = await updateEvent( + { kinds: [0], authors: [pubkey], limit: 1 }, + async (prev) => { + const meta = n.json().pipe(metadataSchema).catch({}).parse(prev.content); + const { + avatar: avatarFile, + header: headerFile, + display_name, + fields_attributes, + note, + nip05, + lud16, + website, + bot, + } = result.data; - meta.name = display_name ?? meta.name; - meta.about = note ?? meta.about; - meta.picture = avatar?.url ?? meta.picture; - meta.banner = header?.url ?? meta.banner; - meta.nip05 = nip05 ?? meta.nip05; - meta.lud16 = lud16 ?? meta.lud16; - meta.website = website ?? meta.website; - meta.bot = bot ?? meta.bot; + const [avatar, header] = await Promise.all([ + avatarFile ? uploadFile(c, avatarFile, { pubkey }) : undefined, + headerFile ? uploadFile(c, headerFile, { pubkey }) : undefined, + ]); - if (avatarFile === '') delete meta.picture; - if (headerFile === '') delete meta.banner; - if (nip05 === '') delete meta.nip05; - if (lud16 === '') delete meta.lud16; - if (website === '') delete meta.website; + meta.name = display_name ?? meta.name; + meta.about = note ?? meta.about; + meta.picture = avatar?.url ?? meta.picture; + meta.banner = header?.url ?? meta.banner; + meta.nip05 = nip05 ?? meta.nip05; + meta.lud16 = lud16 ?? meta.lud16; + meta.website = website ?? meta.website; + meta.bot = bot ?? meta.bot; - if (fields_attributes) { - meta.fields = fields_attributes.map(({ name, value }) => [name, value]); - } + if (avatarFile === '') delete meta.picture; + if (headerFile === '') delete meta.banner; + if (nip05 === '') delete meta.nip05; + if (lud16 === '') delete meta.lud16; + if (website === '') delete meta.website; - return { - kind: 0, - content: JSON.stringify(meta), - tags: [], - }; - }, - c, - ); + if (fields_attributes) { + meta.fields = fields_attributes.map(({ name, value }) => [name, value]); + } + + return { + kind: 0, + content: JSON.stringify(meta), + tags: [], + }; + }, + c, + ); + } const settingsStore = result.data.pleroma_settings_store; - const account = await renderAccount(event, { withSource: true, settingsStore }); + + let account: MastodonAccount; + if (event) { + account = await renderAccount(event, { withSource: true, settingsStore }); + } else { + account = await accountFromPubkey(pubkey, { withSource: true, settingsStore }); + } if (settingsStore) { await createEvent({ From b5221eb43aa75924ef28a4d77ae6f417d4ce44ca Mon Sep 17 00:00:00 2001 From: "P. Reis" Date: Tue, 3 Dec 2024 20:05:38 -0300 Subject: [PATCH 2/2] fix: stop captcha showing up --- src/controllers/api/accounts.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/controllers/api/accounts.ts b/src/controllers/api/accounts.ts index 3e054581..03284a15 100644 --- a/src/controllers/api/accounts.ts +++ b/src/controllers/api/accounts.ts @@ -290,6 +290,7 @@ const updateCredentialsController: AppController = async (c) => { const body = await parseBody(c.req.raw); const result = updateCredentialsSchema.safeParse(body); const store = await Storages.db(); + const signal = c.req.raw.signal; if (!result.success) { return c.json(result.error, 422); @@ -355,6 +356,7 @@ const updateCredentialsController: AppController = async (c) => { let account: MastodonAccount; if (event) { + await hydrateEvents({ events: [event], store, signal }); account = await renderAccount(event, { withSource: true, settingsStore }); } else { account = await accountFromPubkey(pubkey, { withSource: true, settingsStore });