Only gift wrap welcomeEvent to the intended participant
This commit is contained in:
1 parent
add6c7fd31
commit
925c83582b
1 file changed
+52
-49
+52
-49
@@ -11,6 +11,7 @@ import at.torch.compose.database.model.Profile
|
|||||||
import at.torch.compose.database.model.intermdiate.LocalChatMessage
|
import at.torch.compose.database.model.intermdiate.LocalChatMessage
|
||||||
import at.torch.compose.database.model.intermdiate.LocalChatRoom
|
import at.torch.compose.database.model.intermdiate.LocalChatRoom
|
||||||
import co.touchlab.kermit.Logger
|
import co.touchlab.kermit.Logger
|
||||||
|
import com.vitorpamplona.quartz.marmot.mip02Welcome.WelcomeEvent
|
||||||
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroup
|
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroup
|
||||||
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroupState
|
import com.vitorpamplona.quartz.marmot.mls.group.MlsGroupState
|
||||||
import com.vitorpamplona.quartz.nip01Core.core.Event
|
import com.vitorpamplona.quartz.nip01Core.core.Event
|
||||||
@@ -244,61 +245,63 @@ class DatabaseChatRepository(
|
|||||||
nostrSignerSync: NostrSignerSync
|
nostrSignerSync: NostrSignerSync
|
||||||
) {
|
) {
|
||||||
database.participantDao().findParticipantsByChatRoomId(giftWrapPayload.chatRoomId).forEachIndexed { index, participant ->
|
database.participantDao().findParticipantsByChatRoomId(giftWrapPayload.chatRoomId).forEachIndexed { index, participant ->
|
||||||
val wrapperKeyPair = KeyPair()
|
if (giftWrapPayload.kind == WelcomeEvent.KIND && giftWrapPayload.publicKey != participant.participantPublicKey) {
|
||||||
val wrapperSigner = NostrSignerSync(
|
logger.w("We shouldn't be gift wrapping welcome event to anyone but the intended public key (${giftWrapPayload.id}).")
|
||||||
keyPair = wrapperKeyPair
|
} else {
|
||||||
)
|
val wrapperKeyPair = KeyPair()
|
||||||
|
val wrapperSigner = NostrSignerSync(
|
||||||
val giftWrapPayloadEvent = nostrSignerSync.signNormal<Event>(
|
keyPair = wrapperKeyPair
|
||||||
createdAt = giftWrapPayload.createdAt.epochSeconds,
|
|
||||||
kind = giftWrapPayload.kind,
|
|
||||||
tags = giftWrapPayload.tags,
|
|
||||||
content = giftWrapPayload.content
|
|
||||||
)
|
|
||||||
logger.d("GiftWrap Payload Event: ${giftWrapPayloadEvent.toJson()}")
|
|
||||||
|
|
||||||
|
|
||||||
logger.d("Seal to $participant")
|
|
||||||
val payload = giftWrapPayloadEvent.toJson()
|
|
||||||
|
|
||||||
val sealedRumorEvent = nostrSignerSync.signNormal<SealedRumorEvent>(
|
|
||||||
createdAt = TimeUtils.randomWithTwoDays(),
|
|
||||||
kind = SealedRumorEvent.KIND,
|
|
||||||
tags = emptyArray(),
|
|
||||||
content = nostrSignerSync.nip44Encrypt(
|
|
||||||
plaintext = payload,
|
|
||||||
toPublicKey = participant.participantPublicKey
|
|
||||||
)
|
)
|
||||||
)
|
|
||||||
logger.d("SealedRumorEvent: ${sealedRumorEvent.toJson()}")
|
|
||||||
|
|
||||||
val giftWrapEvent = wrapperSigner.signNormal<GiftWrapEvent>(
|
val giftWrapPayloadEvent = nostrSignerSync.signNormal<Event>(
|
||||||
createdAt = TimeUtils.randomWithTwoDays(),
|
createdAt = giftWrapPayload.createdAt.epochSeconds,
|
||||||
kind = GiftWrapEvent.KIND,
|
kind = giftWrapPayload.kind,
|
||||||
tags = arrayOf(
|
tags = giftWrapPayload.tags,
|
||||||
PTag.assemble(participant.participantPublicKey, participant.relayHint?.let { NormalizedRelayUrl(it) })
|
content = giftWrapPayload.content
|
||||||
),
|
|
||||||
content = wrapperSigner.nip44Encrypt(
|
|
||||||
plaintext = sealedRumorEvent.toJson(),
|
|
||||||
toPublicKey = participant.participantPublicKey
|
|
||||||
)
|
)
|
||||||
)
|
logger.d("GiftWrap Payload Event: ${giftWrapPayloadEvent.toJson()}")
|
||||||
logger.d("giftWrapEvent: ${giftWrapEvent.toJson()}")
|
|
||||||
|
|
||||||
database.nostrNip17Dao().persistAndBroadcastGiftWrap(
|
logger.d("Seal to $participant")
|
||||||
giftWrapPayload = Pair(
|
val payload = giftWrapPayloadEvent.toJson()
|
||||||
index,
|
|
||||||
giftWrapPayload
|
val sealedRumorEvent = nostrSignerSync.signNormal<SealedRumorEvent>(
|
||||||
),
|
createdAt = TimeUtils.randomWithTwoDays(),
|
||||||
sealedRumorEvent = sealedRumorEvent,
|
kind = SealedRumorEvent.KIND,
|
||||||
giftWrapEvent = giftWrapEvent,
|
tags = emptyArray(),
|
||||||
receiverPublicKey = PTag(
|
content = nostrSignerSync.nip44Encrypt(
|
||||||
pubKey = participant.participantPublicKey,
|
plaintext = payload,
|
||||||
relayHint = participant.relayHint?.let { NormalizedRelayUrl(it) }
|
toPublicKey = participant.participantPublicKey
|
||||||
|
)
|
||||||
)
|
)
|
||||||
)
|
logger.d("SealedRumorEvent: ${sealedRumorEvent.toJson()}")
|
||||||
|
|
||||||
|
val giftWrapEvent = wrapperSigner.signNormal<GiftWrapEvent>(
|
||||||
|
createdAt = TimeUtils.randomWithTwoDays(),
|
||||||
|
kind = GiftWrapEvent.KIND,
|
||||||
|
tags = arrayOf(
|
||||||
|
PTag.assemble(participant.participantPublicKey, participant.relayHint?.let { NormalizedRelayUrl(it) })
|
||||||
|
),
|
||||||
|
content = wrapperSigner.nip44Encrypt(
|
||||||
|
plaintext = sealedRumorEvent.toJson(),
|
||||||
|
toPublicKey = participant.participantPublicKey
|
||||||
|
)
|
||||||
|
)
|
||||||
|
logger.d("giftWrapEvent: ${giftWrapEvent.toJson()}")
|
||||||
|
|
||||||
|
database.nostrNip17Dao().persistAndBroadcastGiftWrap(
|
||||||
|
giftWrapPayload = Pair(
|
||||||
|
index,
|
||||||
|
giftWrapPayload
|
||||||
|
),
|
||||||
|
sealedRumorEvent = sealedRumorEvent,
|
||||||
|
giftWrapEvent = giftWrapEvent,
|
||||||
|
receiverPublicKey = PTag(
|
||||||
|
pubKey = participant.participantPublicKey,
|
||||||
|
relayHint = participant.relayHint?.let { NormalizedRelayUrl(it) }
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|||||||
Reference in new issue
Block a user