Skip to content

Commit 8ff32ac

Browse files
Second phase of network refactoring (#1853)
1 parent 130e437 commit 8ff32ac

File tree

173 files changed

+7311
-5003
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

173 files changed

+7311
-5003
lines changed

app/build.gradle.kts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ kotlin {
8686
}
8787
}
8888

89+
val testJvmAgent = configurations.create("mockitoAgent")
90+
8991
android {
9092
namespace = "network.loki.messenger"
9193

@@ -293,6 +295,9 @@ android {
293295

294296
testOptions {
295297
unitTests.isIncludeAndroidResources = true
298+
unitTests.all {
299+
it.jvmArgs("-javaagent:${testJvmAgent.asPath}")
300+
}
296301
}
297302

298303
lint {
@@ -322,6 +327,8 @@ android {
322327
testNamespace = "network.loki.messenger.test"
323328
}
324329

330+
331+
325332
dependencies {
326333
implementation(project(":content-descriptions"))
327334

@@ -418,6 +425,11 @@ dependencies {
418425
testImplementation(libs.androidx.sqlite.framework)
419426
androidTestImplementation(libs.truth)
420427
testRuntimeOnly(libs.mockito.core)
428+
testImplementation(libs.mockk)
429+
testImplementation(libs.kotlin.test)
430+
431+
// Pull in appropriate JVM agents for unit test
432+
testJvmAgent(libs.mockito.core) { isTransitive = false }
421433

422434
androidTestImplementation(libs.androidx.espresso.core)
423435
androidTestImplementation(libs.androidx.espresso.contrib)

app/src/main/java/org/session/libsession/messaging/MessagingModuleConfiguration.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,7 @@ import org.session.libsession.database.MessageDataProvider
77
import org.session.libsession.database.StorageProtocol
88
import org.session.libsession.messaging.groups.GroupManagerV2
99
import org.session.libsession.messaging.groups.LegacyGroupDeprecationManager
10-
import org.session.libsession.messaging.jobs.MessageSendJob
1110
import org.session.libsession.messaging.notifications.TokenFetcher
12-
import org.session.libsession.network.ServerClient
1311
import org.session.libsession.network.SnodeClock
1412
import org.session.libsession.network.onion.PathManager
1513
import org.session.libsession.utilities.ConfigFactoryProtocol
@@ -35,10 +33,8 @@ class MessagingModuleConfiguration @Inject constructor(
3533
val recipientRepository: RecipientRepository,
3634
val avatarUtils: AvatarUtils,
3735
val proStatusManager: ProStatusManager,
38-
val messageSendJobFactory: MessageSendJob.Factory,
3936
val json: Json,
4037
val snodeClock: SnodeClock,
41-
val serverClient: ServerClient,
4238
val pathManager: PathManager
4339
) {
4440

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package org.session.libsession.messaging.file_server
2+
3+
import dagger.assisted.Assisted
4+
import dagger.assisted.AssistedFactory
5+
import dagger.assisted.AssistedInject
6+
import okhttp3.HttpUrl.Companion.toHttpUrl
7+
import org.thoughtcrime.securesms.api.server.ServerApiErrorManager
8+
import org.thoughtcrime.securesms.api.ApiExecutorContext
9+
import org.thoughtcrime.securesms.api.http.HttpBody
10+
import org.thoughtcrime.securesms.api.http.HttpRequest
11+
import org.thoughtcrime.securesms.api.http.HttpResponse
12+
import org.thoughtcrime.securesms.api.server.ServerApi
13+
import java.time.ZonedDateTime
14+
import java.time.format.DateTimeFormatter
15+
16+
class FileDownloadApi @AssistedInject constructor(
17+
@Assisted private val fileId: String,
18+
errorManager: ServerApiErrorManager,
19+
) : ServerApi<FileDownloadApi.Response>(errorManager) {
20+
override fun buildRequest(
21+
baseUrl: String,
22+
x25519PubKeyHex: String
23+
): HttpRequest {
24+
return HttpRequest(
25+
url = "$baseUrl/file/$fileId".toHttpUrl(),
26+
method = "GET",
27+
headers = emptyMap(),
28+
body = null
29+
)
30+
}
31+
32+
override suspend fun handleSuccessResponse(
33+
executorContext: ApiExecutorContext,
34+
baseUrl: String,
35+
response: HttpResponse
36+
): Response {
37+
return Response(
38+
data = response.body,
39+
expires = response.parseFileServerExpiresHeader()
40+
)
41+
}
42+
43+
class Response(
44+
val data: HttpBody,
45+
val expires: ZonedDateTime?
46+
)
47+
48+
@AssistedFactory
49+
interface Factory {
50+
fun create(fileId: String): FileDownloadApi
51+
}
52+
53+
companion object {
54+
fun HttpResponse.parseFileServerExpiresHeader(): ZonedDateTime? {
55+
return headers["expires"]?.let {
56+
ZonedDateTime.parse(it, DateTimeFormatter.RFC_1123_DATE_TIME)
57+
}
58+
}
59+
}
60+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.session.libsession.messaging.file_server
2+
3+
import dagger.assisted.Assisted
4+
import dagger.assisted.AssistedFactory
5+
import dagger.assisted.AssistedInject
6+
import okhttp3.HttpUrl.Companion.toHttpUrl
7+
import org.thoughtcrime.securesms.api.server.ServerApiErrorManager
8+
import org.thoughtcrime.securesms.api.ApiExecutorContext
9+
import org.thoughtcrime.securesms.api.http.HttpRequest
10+
import org.thoughtcrime.securesms.api.http.HttpResponse
11+
import org.thoughtcrime.securesms.api.server.ServerApi
12+
13+
class FileRenewApi @AssistedInject constructor(
14+
@Assisted private val fileId: String,
15+
errorManager: ServerApiErrorManager,
16+
) : ServerApi<Unit>(errorManager) {
17+
18+
override fun buildRequest(
19+
baseUrl: String,
20+
x25519PubKeyHex: String
21+
): HttpRequest {
22+
return HttpRequest(
23+
url = "$baseUrl/file/$fileId/extend".toHttpUrl(),
24+
method = "POST",
25+
headers = emptyMap(),
26+
body = null,
27+
)
28+
}
29+
30+
override suspend fun handleSuccessResponse(
31+
executorContext: ApiExecutorContext,
32+
baseUrl: String,
33+
response: HttpResponse
34+
) = Unit
35+
36+
@AssistedFactory
37+
interface Factory {
38+
fun create(fileId: String): FileRenewApi
39+
}
40+
}

app/src/main/java/org/session/libsession/messaging/file_server/FileServer.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package org.session.libsession.messaging.file_server
22

33
import kotlinx.serialization.Serializable
4+
import network.loki.messenger.libsession_util.Curve25519
45
import okhttp3.HttpUrl
56
import okhttp3.HttpUrl.Companion.toHttpUrl
67
import org.session.libsession.utilities.serializable.HttpUrlSerializer
8+
import org.session.libsignal.utilities.Hex
79

810
@Serializable
911
data class FileServer(
@@ -12,6 +14,12 @@ data class FileServer(
1214
val ed25519PublicKeyHex: String
1315
) {
1416
constructor(url: String, ed25519PublicKeyHex: String) : this(url.toHttpUrl(), ed25519PublicKeyHex)
17+
18+
val x25519PubKeyHex: String by lazy {
19+
Hex.toStringCondensed(
20+
Curve25519.pubKeyFromED25519(Hex.fromStringCondensed(ed25519PublicKeyHex))
21+
)
22+
}
1523
}
1624

1725
val HttpUrl.isOfficial: Boolean

0 commit comments

Comments
 (0)