diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index fb21994373..0aada3b90f 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -902,27 +902,57 @@ class Account( return LocalCache.notes[signedEvent.id] } - fun sendHeader(headerInfo: FileHeader, relayList: List? = null): Note? { - if (!isWriteable()) return null - - val signedEvent = FileHeaderEvent.create( - url = headerInfo.url, - mimeType = headerInfo.mimeType, - hash = headerInfo.hash, - size = headerInfo.size.toString(), - dimensions = headerInfo.dim, - blurhash = headerInfo.blurHash, - description = headerInfo.description, - sensitiveContent = headerInfo.sensitiveContent, - privateKey = keyPair.privKey!! - ) - + private fun sendHeader(signedEvent: FileHeaderEvent, relayList: List? = null): Note? { Client.send(signedEvent, relayList = relayList) LocalCache.consume(signedEvent, null) return LocalCache.notes[signedEvent.id] } + fun sendHeader(headerInfo: FileHeader, relayList: List? = null): Note? { + if (!isWriteable() && !loginWithAmber) return null + + if (loginWithAmber) { + val unsignedEvent = FileHeaderEvent.create( + url = headerInfo.url, + mimeType = headerInfo.mimeType, + hash = headerInfo.hash, + size = headerInfo.size.toString(), + dimensions = headerInfo.dim, + blurhash = headerInfo.blurHash, + description = headerInfo.description, + sensitiveContent = headerInfo.sensitiveContent, + keyPair = keyPair + ) + AmberUtils.openAmber(unsignedEvent) + if (AmberUtils.content.isBlank()) return null + val signedEvent = FileHeaderEvent( + unsignedEvent.id, + unsignedEvent.pubKey, + unsignedEvent.createdAt, + unsignedEvent.tags, + unsignedEvent.content, + AmberUtils.content + ) + + return sendHeader(signedEvent, relayList = relayList) + } else { + val signedEvent = FileHeaderEvent.create( + url = headerInfo.url, + mimeType = headerInfo.mimeType, + hash = headerInfo.hash, + size = headerInfo.size.toString(), + dimensions = headerInfo.dim, + blurhash = headerInfo.blurHash, + description = headerInfo.description, + sensitiveContent = headerInfo.sensitiveContent, + keyPair = keyPair + ) + + return sendHeader(signedEvent, relayList = relayList) + } + } + fun sendPost( message: String, replyTo: List?, diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt index 9c55f3d4df..92a0dd0f07 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/FileHeaderEvent.kt @@ -4,6 +4,7 @@ import androidx.compose.runtime.Immutable import com.vitorpamplona.quartz.utils.TimeUtils import com.vitorpamplona.quartz.encoders.toHexKey import com.vitorpamplona.quartz.crypto.CryptoUtils +import com.vitorpamplona.quartz.crypto.KeyPair import com.vitorpamplona.quartz.encoders.HexKey @Immutable @@ -53,7 +54,7 @@ class FileHeaderEvent( torrentInfoHash: String? = null, encryptionKey: AESGCM? = null, sensitiveContent: Boolean? = null, - privateKey: ByteArray, + keyPair: KeyPair, createdAt: Long = TimeUtils.now() ): FileHeaderEvent { val tags = listOfNotNull( @@ -76,10 +77,10 @@ class FileHeaderEvent( ) val content = description ?: "" - val pubKey = CryptoUtils.pubkeyCreate(privateKey).toHexKey() + val pubKey = keyPair.pubKey.toHexKey() val id = generateId(pubKey, createdAt, kind, tags, content) - val sig = CryptoUtils.sign(id, privateKey) - return FileHeaderEvent(id.toHexKey(), pubKey, createdAt, tags, content, sig.toHexKey()) + val sig = if (keyPair.privKey == null) null else CryptoUtils.sign(id, keyPair.privKey) + return FileHeaderEvent(id.toHexKey(), pubKey, createdAt, tags, content, sig?.toHexKey() ?: "") } } }