|
|
|
@ -7,7 +7,6 @@ import okhttp3.HttpUrl
|
|
|
|
|
import okhttp3.MediaType
|
|
|
|
|
import okhttp3.RequestBody
|
|
|
|
|
import org.session.libsession.snode.OnionRequestAPI
|
|
|
|
|
import org.session.libsignal.utilities.Base64
|
|
|
|
|
import org.session.libsignal.utilities.HTTP
|
|
|
|
|
import org.session.libsignal.utilities.JsonUtil
|
|
|
|
|
import org.session.libsignal.utilities.Log
|
|
|
|
@ -38,6 +37,7 @@ object FileServerApi {
|
|
|
|
|
val queryParameters: Map<String, String> = mapOf(),
|
|
|
|
|
val parameters: Any? = null,
|
|
|
|
|
val headers: Map<String, String> = mapOf(),
|
|
|
|
|
val body: ByteArray? = null,
|
|
|
|
|
/**
|
|
|
|
|
* Always `true` under normal circumstances. You might want to disable
|
|
|
|
|
* this when running over Lokinet.
|
|
|
|
@ -45,7 +45,8 @@ object FileServerApi {
|
|
|
|
|
val useOnionRouting: Boolean = true
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
private fun createBody(parameters: Any?): RequestBody? {
|
|
|
|
|
private fun createBody(body: ByteArray?, parameters: Any?): RequestBody? {
|
|
|
|
|
if (body != null) return RequestBody.create(MediaType.get("application/octet-stream"), body)
|
|
|
|
|
if (parameters == null) return null
|
|
|
|
|
val parametersAsJSON = JsonUtil.toJson(parameters)
|
|
|
|
|
return RequestBody.create(MediaType.get("application/json"), parametersAsJSON)
|
|
|
|
@ -68,9 +69,9 @@ object FileServerApi {
|
|
|
|
|
.headers(Headers.of(request.headers))
|
|
|
|
|
when (request.verb) {
|
|
|
|
|
HTTP.Verb.GET -> requestBuilder.get()
|
|
|
|
|
HTTP.Verb.PUT -> requestBuilder.put(createBody(request.parameters)!!)
|
|
|
|
|
HTTP.Verb.POST -> requestBuilder.post(createBody(request.parameters)!!)
|
|
|
|
|
HTTP.Verb.DELETE -> requestBuilder.delete(createBody(request.parameters))
|
|
|
|
|
HTTP.Verb.PUT -> requestBuilder.put(createBody(request.body, request.parameters)!!)
|
|
|
|
|
HTTP.Verb.POST -> requestBuilder.post(createBody(request.body, request.parameters)!!)
|
|
|
|
|
HTTP.Verb.DELETE -> requestBuilder.delete(createBody(request.body, request.parameters))
|
|
|
|
|
}
|
|
|
|
|
return if (request.useOnionRouting) {
|
|
|
|
|
OnionRequestAPI.sendOnionRequest(requestBuilder.build(), server, serverPublicKey).map {
|
|
|
|
@ -84,12 +85,10 @@ object FileServerApi {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun upload(file: ByteArray): Promise<Long, Exception> {
|
|
|
|
|
val base64EncodedFile = Base64.encodeBytes(file)
|
|
|
|
|
val parameters = mapOf( "file" to base64EncodedFile )
|
|
|
|
|
val request = Request(
|
|
|
|
|
verb = HTTP.Verb.POST,
|
|
|
|
|
endpoint = "file",
|
|
|
|
|
parameters = parameters,
|
|
|
|
|
body = file,
|
|
|
|
|
headers = mapOf(
|
|
|
|
|
"Content-Disposition" to "attachment",
|
|
|
|
|
"Content-Type" to "application/octet-stream"
|
|
|
|
@ -97,7 +96,7 @@ object FileServerApi {
|
|
|
|
|
)
|
|
|
|
|
return send(request).map { response ->
|
|
|
|
|
val json = JsonUtil.fromJson(response, Map::class.java)
|
|
|
|
|
json["result"] as? Long ?: throw Error.ParsingFailed
|
|
|
|
|
(json["id"] as? String)?.toLong() ?: throw Error.ParsingFailed
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|