feat: per-listing E2E keypairs, eliminate insecure pending chat flow
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
import { t, i18n } from '../../i18n.js'
|
||||
import { directus } from '../../services/directus.js'
|
||||
import { auth } from '../../services/auth.js'
|
||||
import { conversationsService } from '../../services/conversations.js'
|
||||
import { favoritesService } from '../../services/favorites.js'
|
||||
import { getXmrRates, formatPrice as formatCurrencyPrice } from '../../services/currency.js'
|
||||
import { escapeHTML } from '../../utils/helpers.js'
|
||||
@@ -20,7 +19,6 @@ class PageListing extends HTMLElement {
|
||||
this.isFavorite = false
|
||||
this.rates = null
|
||||
this.isOwner = false
|
||||
this.hasPendingChats = false
|
||||
this.sellerReputation = null
|
||||
this.handleCurrencyChange = this.handleCurrencyChange.bind(this)
|
||||
}
|
||||
@@ -62,11 +60,6 @@ class PageListing extends HTMLElement {
|
||||
}
|
||||
}
|
||||
|
||||
// Check for pending chats if owner
|
||||
if (this.isOwner) {
|
||||
this.hasPendingChats = await this.checkPendingChats()
|
||||
}
|
||||
|
||||
// Load other listings from same seller
|
||||
if (this.listing?.user_created) {
|
||||
await this.loadSellerListings()
|
||||
@@ -149,23 +142,6 @@ class PageListing extends HTMLElement {
|
||||
}
|
||||
}
|
||||
|
||||
async checkPendingChats() {
|
||||
try {
|
||||
const response = await directus.get('/items/conversations', {
|
||||
fields: ['id'],
|
||||
filter: {
|
||||
listing_id: { _eq: this.listingId },
|
||||
status: { _eq: 'pending' },
|
||||
participant_hash_2: { _null: true }
|
||||
},
|
||||
limit: 1
|
||||
})
|
||||
return (response.data?.length || 0) > 0
|
||||
} catch {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
async loadSellerListings() {
|
||||
try {
|
||||
const response = await directus.getListings({
|
||||
@@ -394,14 +370,7 @@ class PageListing extends HTMLElement {
|
||||
${t('listing.edit')}
|
||||
</a>
|
||||
|
||||
${this.hasPendingChats ? /* html */`
|
||||
<button class="btn btn-outline btn-lg sidebar-btn" id="contact-btn">
|
||||
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
||||
<path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"></path>
|
||||
</svg>
|
||||
${t('listing.newMessages')}
|
||||
</button>
|
||||
` : ''}
|
||||
|
||||
|
||||
<div class="sidebar-actions">
|
||||
<button class="action-btn" id="share-btn" title="${t('listing.share')}">
|
||||
@@ -539,6 +508,7 @@ class PageListing extends HTMLElement {
|
||||
<chat-widget
|
||||
listing-id="${this.listing?.id || ''}"
|
||||
recipient-name="${t('listing.anonymousSeller')}"
|
||||
seller-public-key="${this.listing?.contact_public_key || ''}"
|
||||
></chat-widget>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user