Browse Source

make sure only the author can delete events

imwald
Silberengel 1 month ago
parent
commit
12777d6e75
  1. 4
      src/components/NoteOptions/useMenuActions.tsx
  2. 11
      src/pages/primary/SpellsPage/index.tsx
  3. 28
      src/pages/secondary/FollowSetsSettingsPage/index.tsx

4
src/components/NoteOptions/useMenuActions.tsx

@ -850,8 +850,8 @@ export function useMenuActions({ @@ -850,8 +850,8 @@ export function useMenuActions({
})
}
// Delete functionality only available for own notes
if (pubkey && event.pubkey === pubkey) {
// Delete only when signed in as the author with a signing key (not read-only npub)
if (canSignEvents && pubkey && event.pubkey === pubkey) {
actions.push({
icon: Trash2,
label: t('Try deleting this note'),

11
src/pages/primary/SpellsPage/index.tsx

@ -310,7 +310,8 @@ const SpellsPage = forwardRef<TPageRef>(function SpellsPage( @@ -310,7 +310,8 @@ const SpellsPage = forwardRef<TPageRef>(function SpellsPage(
) {
const { t } = useTranslation()
const { navigate: navigatePrimary } = usePrimaryPage()
const { pubkey, relayList, attemptDelete, bookmarkListEvent, interestListEvent } = useNostr()
const { pubkey, account, relayList, attemptDelete, bookmarkListEvent, interestListEvent } =
useNostr()
const { addBookmark, removeBookmark } = useBookmarks()
const { hideUntrustedNotifications } = useUserTrust()
const { isSmallScreen } = useScreenSize()
@ -1179,7 +1180,9 @@ const SpellsPage = forwardRef<TPageRef>(function SpellsPage( @@ -1179,7 +1180,9 @@ const SpellsPage = forwardRef<TPageRef>(function SpellsPage(
[logSpellFeedPickerSelection, navigatePrimary, selectedFauxSpell, selectedSpell]
)
const selectedSpellIsOwn = !!(pubkey && selectedSpell && selectedSpell.pubkey === pubkey)
const canSignSpellActions = account != null && account.signerType !== 'npub'
const selectedSpellIsAuthor = !!(pubkey && selectedSpell && selectedSpell.pubkey === pubkey)
const selectedSpellCanEditOrDelete = selectedSpellIsAuthor && canSignSpellActions
const handleSpellFeedFirstPaint = useCallback(
(detail: { eventCount: number; firstEventId: string }) => {
@ -1588,7 +1591,7 @@ const SpellsPage = forwardRef<TPageRef>(function SpellsPage( @@ -1588,7 +1591,7 @@ const SpellsPage = forwardRef<TPageRef>(function SpellsPage(
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
{selectedSpellIsOwn ? (
{selectedSpellCanEditOrDelete ? (
<DropdownMenuItem
className="gap-2"
onClick={() => {
@ -1617,7 +1620,7 @@ const SpellsPage = forwardRef<TPageRef>(function SpellsPage( @@ -1617,7 +1620,7 @@ const SpellsPage = forwardRef<TPageRef>(function SpellsPage(
<FileText className="size-4" />
{t('View definition')}
</DropdownMenuItem>
{selectedSpellIsOwn ? (
{selectedSpellCanEditOrDelete ? (
<>
<DropdownMenuSeparator />
<DropdownMenuItem

28
src/pages/secondary/FollowSetsSettingsPage/index.tsx

@ -59,7 +59,7 @@ const FOLLOW_SET_FETCH_OPTS = { @@ -59,7 +59,7 @@ const FOLLOW_SET_FETCH_OPTS = {
const FollowSetsSettingsPage = forwardRef(
({ index, hideTitlebar = false }: { index?: number; hideTitlebar?: boolean }, ref) => {
const { t } = useTranslation()
const { pubkey, publish, attemptDelete, checkLogin, relayList } = useNostr()
const { pubkey, account, publish, attemptDelete, checkLogin, relayList } = useNostr()
const { favoriteRelays, blockedRelays } = useFavoriteRelays()
const [lists, setLists] = useState<Event[]>([])
const [loading, setLoading] = useState(true)
@ -74,6 +74,8 @@ const FollowSetsSettingsPage = forwardRef( @@ -74,6 +74,8 @@ const FollowSetsSettingsPage = forwardRef(
const [deleteTarget, setDeleteTarget] = useState<Event | null>(null)
const [deleting, setDeleting] = useState(false)
const canSignEvents = account != null && account.signerType !== 'npub'
const { registerPrimaryPanelRefresh } = usePrimaryNoteView()
const buildReadRelays = useCallback((): string[] => {
@ -275,17 +277,19 @@ const FollowSetsSettingsPage = forwardRef( @@ -275,17 +277,19 @@ const FollowSetsSettingsPage = forwardRef(
<Pencil className="size-4" />
<span className="sr-only">{t('Edit')}</span>
</Button>
<Button
type="button"
variant="outline"
size="sm"
className="text-destructive hover:text-destructive"
onClick={() => setDeleteTarget(ev)}
title={t('Delete')}
>
<Trash2 className="size-4" />
<span className="sr-only">{t('Delete')}</span>
</Button>
{canSignEvents && ev.pubkey === pubkey ? (
<Button
type="button"
variant="outline"
size="sm"
className="text-destructive hover:text-destructive"
onClick={() => setDeleteTarget(ev)}
title={t('Delete')}
>
<Trash2 className="size-4" />
<span className="sr-only">{t('Delete')}</span>
</Button>
) : null}
</div>
</li>
))}

Loading…
Cancel
Save