- Migrates the old imageservers to NIP-96 for the main feed, chats, private messages, stories and user metadata uploads.

- Fixes hash calculation of the entire payload.
- Unifies uploads into NIP-94 images.
This commit is contained in:
Vitor Pamplona
2023-12-08 22:08:19 -05:00
parent 72b4f6acef
commit b3bdbbed98
23 changed files with 1027 additions and 685 deletions
@@ -37,6 +37,7 @@ class ChannelMessageEvent(
markAsSensitive: Boolean,
zapRaiserAmount: Long?,
geohash: String? = null,
nip94attachments: List<Event>? = null,
onReady: (ChannelMessageEvent) -> Unit
) {
val tags = mutableListOf(
@@ -60,6 +61,11 @@ class ChannelMessageEvent(
geohash?.let {
tags.addAll(geohashMipMap(it))
}
nip94attachments?.let {
it.forEach {
tags.add(arrayOf("nip94", it.toJson()))
}
}
signer.sign(createdAt, kind, tags.toTypedArray(), message, onReady)
}
@@ -63,6 +63,7 @@ class ClassifiedsEvent(
markAsSensitive: Boolean,
zapRaiserAmount: Long?,
geohash: String? = null,
nip94attachments: List<Event>? = null,
signer: NostrSigner,
createdAt: Long = TimeUtils.now(),
onReady: (ClassifiedsEvent) -> Unit
@@ -133,6 +134,11 @@ class ClassifiedsEvent(
geohash?.let {
tags.addAll(geohashMipMap(it))
}
nip94attachments?.let {
it.forEach {
tags.add(arrayOf("nip94", it.toJson()))
}
}
signer.sign(createdAt, kind, tags.toTypedArray(), message, onReady)
}
@@ -19,6 +19,8 @@ class FileHeaderEvent(
) : Event(id, pubKey, createdAt, kind, tags, content, sig) {
fun url() = tags.firstOrNull { it.size > 1 && it[0] == URL }?.get(1)
fun urls() = tags.filter { it.size > 1 && it[0] == URL }.map { it[1] }
fun encryptionKey() = tags.firstOrNull { it.size > 2 && it[0] == ENCRYPTION_KEY }?.let { AESGCM(it[1], it[2]) }
fun mimeType() = tags.firstOrNull { it.size > 1 && it[0] == MIME_TYPE }?.get(1)
fun hash() = tags.firstOrNull { it.size > 1 && it[0] == HASH }?.get(1)
@@ -43,16 +45,19 @@ class FileHeaderEvent(
private const val MAGNET_URI = "magnet"
private const val TORRENT_INFOHASH = "i"
private const val BLUR_HASH = "blurhash"
private const val ORIGINAL_HASH = "ox"
private const val ALT = "alt"
fun create(
url: String,
magnetUri: String? = null,
mimeType: String? = null,
alt: String? = null,
hash: String? = null,
size: String? = null,
dimensions: String? = null,
blurhash: String? = null,
originalHash: String? = null,
magnetURI: String? = null,
torrentInfoHash: String? = null,
encryptionKey: AESGCM? = null,
@@ -63,12 +68,14 @@ class FileHeaderEvent(
) {
val tags = listOfNotNull(
arrayOf(URL, url),
mimeType?.let { arrayOf(MIME_TYPE, mimeType) },
magnetUri?.let { arrayOf(MAGNET_URI, it) },
mimeType?.let { arrayOf(MIME_TYPE, it) },
alt?.ifBlank { null }?.let { arrayOf(ALT, it) },
hash?.let { arrayOf(HASH, it) },
size?.let { arrayOf(FILE_SIZE, it) },
dimensions?.let { arrayOf(DIMENSION, it) },
blurhash?.let { arrayOf(BLUR_HASH, it) },
originalHash?.let { arrayOf(ORIGINAL_HASH, it) },
magnetURI?.let { arrayOf(MAGNET_URI, it) },
torrentInfoHash?.let { arrayOf(TORRENT_INFOHASH, it) },
@@ -24,14 +24,14 @@ class HTTPAuthorizationEvent(
fun create(
url: String,
method: String,
body: String? = null,
file: ByteArray? = null,
signer: NostrSigner,
createdAt: Long = TimeUtils.now(),
onReady: (HTTPAuthorizationEvent) -> Unit
) {
var hash = ""
body?.let {
hash = CryptoUtils.sha256(it.toByteArray()).toHexKey()
file?.let {
hash = CryptoUtils.sha256(file).toHexKey()
}
val tags = listOfNotNull(
@@ -56,6 +56,7 @@ class LiveActivitiesChatMessageEvent(
markAsSensitive: Boolean,
zapRaiserAmount: Long?,
geohash: String? = null,
nip94attachments: List<Event>? = null,
onReady: (LiveActivitiesChatMessageEvent) -> Unit
) {
val content = message
@@ -80,6 +81,11 @@ class LiveActivitiesChatMessageEvent(
geohash?.let {
tags.addAll(geohashMipMap(it))
}
nip94attachments?.let {
it.forEach {
tags.add(arrayOf("nip94", it.toJson()))
}
}
signer.sign(createdAt, kind, tags.toTypedArray(), content, onReady)
}
@@ -60,6 +60,7 @@ class PollNoteEvent(
markAsSensitive: Boolean,
zapRaiserAmount: Long?,
geohash: String? = null,
nip94attachments: List<Event>? = null,
onReady: (PollNoteEvent) -> Unit
) {
val tags = mutableListOf<Array<String>>()
@@ -99,6 +100,11 @@ class PollNoteEvent(
geohash?.let {
tags.addAll(geohashMipMap(it))
}
nip94attachments?.let {
it.forEach {
tags.add(arrayOf("nip94", it.toJson()))
}
}
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
}
@@ -39,6 +39,7 @@ class TextNoteEvent(
root: String?,
directMentions: Set<HexKey>,
geohash: String? = null,
nip94attachments: List<Event>? = null,
signer: NostrSigner,
createdAt: Long = TimeUtils.now(),
onReady: (TextNoteEvent) -> Unit
@@ -96,6 +97,11 @@ class TextNoteEvent(
geohash?.let {
tags.addAll(geohashMipMap(it))
}
nip94attachments?.let {
it.forEach {
tags.add(arrayOf("nip94", it.toJson()))
}
}
signer.sign(createdAt, kind, tags.toTypedArray(), msg, onReady)
}