- 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:
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user