Skip to content

Commit 4c2016b

Browse files
committed
feat: Add networking module
1 parent fe3e1c9 commit 4c2016b

Some content is hidden

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

55 files changed

+1367
-188
lines changed

build.gradle.kts

Lines changed: 18 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,143 +1,30 @@
11
plugins {
2-
alias(libs.plugins.kotlin.multiplatform)
3-
alias(libs.plugins.android.library)
4-
alias(libs.plugins.binary.compatibility.validator)
5-
`maven-publish`
6-
signing
2+
alias(libs.plugins.kotlin.multiplatform) apply false
3+
alias(libs.plugins.kotlin.jvm) apply false
4+
alias(libs.plugins.android.library) apply false
5+
alias(libs.plugins.binary.compatibility.validator) apply false
6+
alias(libs.plugins.ktor) apply false
7+
alias(libs.plugins.serilization) apply false
78
}
89

910
group = "app.revanced"
1011

11-
// Because access to the project is necessary to authenticate with GitHub,
12-
// the following block must be placed in the root build.gradle.kts file
13-
// instead of the settings.gradle.kts file inside the dependencyResolutionManagement block.
14-
repositories {
15-
mavenCentral()
16-
mavenLocal()
17-
google()
18-
maven {
19-
// A repository must be specified for some reason. "registry" is a dummy.
20-
url = uri("https://maven.pkg.github.com/revanced/registry")
21-
credentials {
22-
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
23-
password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
24-
}
25-
}
26-
maven { url = uri("https://jitpack.io") }
27-
}
28-
29-
kotlin {
30-
jvm {
31-
compilations.all {
32-
kotlinOptions {
33-
jvmTarget = JavaVersion.VERSION_11.toString()
34-
}
35-
}
36-
}
37-
38-
androidTarget {
39-
compilations.all {
40-
kotlinOptions {
41-
jvmTarget = JavaVersion.VERSION_11.toString()
42-
}
43-
}
44-
45-
publishLibraryVariants("release")
46-
}
47-
48-
sourceSets {
49-
androidMain.dependencies {
50-
implementation(libs.libsu.nio)
51-
implementation(libs.libsu.service)
52-
implementation(libs.core.ktx)
53-
}
54-
55-
commonMain.dependencies {
56-
implementation(libs.revanced.patcher)
57-
implementation(libs.kotlin.reflect)
58-
implementation(libs.jadb) // Fork with Shell v2 support.
59-
implementation(libs.bcpkix.jdk15on)
60-
implementation(libs.jackson.module.kotlin)
61-
implementation(libs.apkzlib)
62-
implementation(libs.apksig)
63-
implementation(libs.guava)
64-
}
65-
66-
commonTest.dependencies {
67-
implementation(libs.revanced.patcher)
68-
implementation(libs.kotlin.test.junit)
69-
}
70-
}
71-
}
72-
73-
android {
74-
namespace = "app.revanced.library"
75-
compileSdk = 34
76-
defaultConfig {
77-
minSdk = 26
78-
}
79-
80-
buildFeatures {
81-
aidl = true
82-
}
83-
84-
compileOptions {
85-
sourceCompatibility = JavaVersion.VERSION_11
86-
targetCompatibility = JavaVersion.VERSION_11
87-
}
88-
}
89-
90-
java {
91-
targetCompatibility = JavaVersion.VERSION_11
92-
}
93-
94-
publishing {
12+
subprojects {
13+
// Because access to the project is necessary to authenticate with GitHub,
14+
// the following block must be placed in the root build.gradle.kts file
15+
// instead of the settings.gradle.kts file inside the dependencyResolutionManagement block.
9516
repositories {
17+
mavenCentral()
18+
mavenLocal()
19+
google()
9620
maven {
97-
name = "GitHubPackages"
98-
url = uri("https://maven.pkg.github.com/revanced/revanced-library")
21+
// A repository must be specified for some reason. "registry" is a dummy.
22+
url = uri("https://maven.pkg.github.com/revanced/registry")
9923
credentials {
100-
username = System.getenv("GITHUB_ACTOR")
101-
password = System.getenv("GITHUB_TOKEN")
24+
username = project.findProperty("gpr.user") as String? ?: System.getenv("GITHUB_ACTOR")
25+
password = project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN")
10226
}
10327
}
28+
maven { url = uri("https://jitpack.io") }
10429
}
105-
106-
publications {
107-
create<MavenPublication>("revanced-library-publication") {
108-
version = project.version.toString()
109-
110-
pom {
111-
name = "ReVanced Library"
112-
description = "Library containing common utilities for ReVanced"
113-
url = "https://revanced.app"
114-
115-
licenses {
116-
license {
117-
name = "GNU General Public License v3.0"
118-
url = "https://www.gnu.org/licenses/gpl-3.0.en.html"
119-
}
120-
}
121-
122-
developers {
123-
developer {
124-
id = "ReVanced"
125-
name = "ReVanced"
126-
127-
}
128-
}
129-
130-
scm {
131-
connection = "scm:git:git://github.com/revanced/revanced-library.git"
132-
developerConnection = "scm:git:[email protected]:revanced/revanced-library.git"
133-
url = "https://github.com/revanced/revanced-library"
134-
}
135-
}
136-
}
137-
}
138-
}
139-
140-
signing {
141-
useGpgCmd()
142-
sign(publishing.publications["revanced-library-publication"])
14330
}

gradle/libs.versions.toml

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ bcpkix-jdk15on = "1.70"
99
guava = "33.0.0-jre"
1010
libsu = "5.2.2"
1111
core-ktx = "1.12.0"
12+
ktor = "2.3.9"
13+
koin = "3.5.3"
14+
logback = "1.4.14"
15+
mockk = "1.13.9"
1216

1317
[libraries]
1418
jackson-module-kotlin = { module = "com.fasterxml.jackson.module:jackson-module-kotlin", version.ref = "jackson-module-kotlin" }
@@ -24,9 +28,25 @@ libsu-core = { module = "com.github.topjohnwu.libsu:core", version.ref = "libsu"
2428
libsu-nio = { module = "com.github.topjohnwu.libsu:nio", version.ref = "libsu" }
2529
libsu-service = { module = "com.github.topjohnwu.libsu:service", version.ref = "libsu" }
2630
core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "core-ktx" }
31+
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
32+
mockk = { module = "io.mockk:mockk", version.ref = "mockk" }
33+
ktor-server-conditional-headers = { module = "io.ktor:ktor-server-conditional-headers" }
34+
ktor-server-core = { module = "io.ktor:ktor-server-core" }
35+
ktor-server-content-negotiation = { module = "io.ktor:ktor-server-content-negotiation" }
36+
ktor-server-auth = { module = "io.ktor:ktor-server-auth" }
37+
ktor-server-auth-jwt = { module = "io.ktor:ktor-server-auth-jwt" }
38+
ktor-server-cors = { module = "io.ktor:ktor-server-cors" }
39+
ktor-server-caching-headers = { module = "io.ktor:ktor-server-caching-headers" }
40+
ktor-server-host-common = { module = "io.ktor:ktor-server-host-common" }
41+
ktor-server-netty = { module = "io.ktor:ktor-server-netty" }
42+
ktor-server-websockets = { module = "io.ktor:ktor-server-websockets" }
43+
ktor-serialization-kotlinx-json = { module = "io.ktor:ktor-serialization-kotlinx-json" }
44+
koin-ktor = { module = "io.insert-koin:koin-ktor", version.ref = "koin" }
2745

2846
[plugins]
47+
serilization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
48+
ktor = { id = "io.ktor.plugin", version.ref = "ktor" }
2949
binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" }
3050
android-library = { id = "com.android.library", version.ref = "android" }
31-
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
3251
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
52+
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
public final class app/revanced/library/networking/Server {
2+
public final fun start ()Lio/ktor/server/engine/ApplicationEngine;
3+
public final fun stop ()V
4+
}
5+
6+
public final class app/revanced/library/networking/Server$DependenciesConfiguration {
7+
public fun <init> (Lapp/revanced/library/networking/configuration/repository/StorageRepository;Lapp/revanced/library/networking/configuration/repository/PatchSetRepository;Lapp/revanced/library/networking/configuration/repository/AppRepository;)V
8+
}
9+
10+
public final class app/revanced/library/networking/Server$SecurityConfiguration {
11+
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
12+
}
13+
14+
public final class app/revanced/library/networking/ServerBuilder {
15+
public fun <init> ()V
16+
public final fun configureDependencies (Lkotlin/jvm/functions/Function1;)Lapp/revanced/library/networking/ServerBuilder;
17+
public final fun configureSecurity (Ljava/lang/String;Ljava/lang/String;)Lapp/revanced/library/networking/ServerBuilder;
18+
}
19+
20+
public final class app/revanced/library/networking/ServerBuilder$DependenciesConfigurationBuilder {
21+
public final fun appRepository (Lapp/revanced/library/networking/configuration/repository/AppRepository;)Lapp/revanced/library/networking/ServerBuilder$DependenciesConfigurationBuilder;
22+
public final fun build ()Lapp/revanced/library/networking/Server$DependenciesConfiguration;
23+
public final fun patchSetRepository (Lapp/revanced/library/networking/configuration/repository/PatchSetRepository;)Lapp/revanced/library/networking/ServerBuilder$DependenciesConfigurationBuilder;
24+
public final fun storageRepository (Lapp/revanced/library/networking/configuration/repository/StorageRepository;)Lapp/revanced/library/networking/ServerBuilder$DependenciesConfigurationBuilder;
25+
}
26+
27+
public final class app/revanced/library/networking/ServerKt {
28+
public static final fun a ()V
29+
public static final fun server (Ljava/lang/String;ILio/ktor/server/engine/ApplicationEngineFactory;Lkotlin/jvm/functions/Function1;)Lapp/revanced/library/networking/Server;
30+
public static synthetic fun server$default (Ljava/lang/String;ILio/ktor/server/engine/ApplicationEngineFactory;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/revanced/library/networking/Server;
31+
}
32+
33+
public final class app/revanced/library/networking/configuration/SerializationKt {
34+
public static final fun configureSerialization (Lio/ktor/server/application/Application;)V
35+
}
36+
37+
public abstract class app/revanced/library/networking/configuration/repository/AppRepository {
38+
public fun <init> (Lapp/revanced/library/installation/installer/Installer;Lapp/revanced/library/installation/installer/MountInstaller;)V
39+
public synthetic fun <init> (Lapp/revanced/library/installation/installer/Installer;Lapp/revanced/library/installation/installer/MountInstaller;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
40+
}
41+
42+
public abstract class app/revanced/library/networking/configuration/repository/PatchSetRepository {
43+
public fun <init> (Lapp/revanced/library/networking/configuration/repository/StorageRepository;)V
44+
}
45+
46+
public abstract class app/revanced/library/networking/configuration/repository/StorageRepository {
47+
public fun <init> (Ljava/io/File;Ljava/io/File;Ljava/io/File;Ljava/io/File;)V
48+
public synthetic fun <init> (Ljava/io/File;Ljava/io/File;Ljava/io/File;Ljava/io/File;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
49+
public final fun getAaptBinaryPath ()Ljava/io/File;
50+
public final fun getKeystoreFilePath ()Ljava/io/File;
51+
public final fun getOutputFilePath ()Ljava/io/File;
52+
public final fun getTemporaryFilesPath ()Ljava/io/File;
53+
}
54+
55+
public class app/revanced/library/networking/models/App {
56+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
57+
}
58+
59+
public final class app/revanced/library/networking/models/Patch {
60+
}
61+
62+
public final class app/revanced/library/networking/models/Patch$PatchOption {
63+
}
64+
65+
public final class app/revanced/library/networking/models/PatchBundle {
66+
public final fun getPatchBundleFile ()Ljava/io/File;
67+
public final fun getPatchBundleIntegrationsFile ()Ljava/io/File;
68+
}
69+
70+
public final class app/revanced/library/networking/models/PatchableApp : app/revanced/library/networking/models/App {
71+
}
72+

library-networking/build.gradle.kts

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
2+
3+
plugins {
4+
alias(libs.plugins.kotlin.jvm)
5+
alias(libs.plugins.binary.compatibility.validator)
6+
alias(libs.plugins.ktor)
7+
alias(libs.plugins.serilization)
8+
`maven-publish`
9+
signing
10+
}
11+
12+
dependencies {
13+
implementation(project(":library"))
14+
// TODO: Remove this dependency.
15+
implementation("app.revanced:revanced-patcher:19.3.1")
16+
implementation(libs.ktor.server.core)
17+
implementation(libs.ktor.server.content.negotiation)
18+
implementation(libs.ktor.server.auth)
19+
implementation(libs.ktor.server.auth.jwt)
20+
implementation(libs.ktor.server.cors)
21+
implementation(libs.ktor.server.caching.headers)
22+
implementation(libs.ktor.server.host.common)
23+
implementation(libs.ktor.server.netty)
24+
implementation(libs.ktor.server.conditional.headers)
25+
implementation(libs.ktor.server.websockets)
26+
implementation(libs.ktor.serialization.kotlinx.json)
27+
implementation(libs.koin.ktor)
28+
implementation(libs.logback.classic)
29+
testImplementation(libs.mockk)
30+
testImplementation(libs.kotlin.test.junit)
31+
}
32+
33+
tasks {
34+
processResources {
35+
expand("projectVersion" to project.version)
36+
}
37+
}
38+
39+
kotlin {
40+
compilerOptions {
41+
jvmTarget.set(JvmTarget.JVM_11)
42+
}
43+
}
44+
45+
java {
46+
targetCompatibility = JavaVersion.VERSION_11
47+
}
48+
49+
publishing {
50+
repositories {
51+
maven {
52+
name = "GitHubPackages"
53+
url = uri("https://maven.pkg.github.com/revanced/revanced-library")
54+
credentials {
55+
username = System.getenv("GITHUB_ACTOR")
56+
password = System.getenv("GITHUB_TOKEN")
57+
}
58+
}
59+
}
60+
61+
publications {
62+
create<MavenPublication>("revanced-library-networking-publication") {
63+
version = project.version.toString()
64+
65+
pom {
66+
name = "ReVanced Networking Library"
67+
description = "Library to interface to common utilities for ReVanced over a network."
68+
url = "https://revanced.app"
69+
70+
licenses {
71+
license {
72+
name = "GNU General Public License v3.0"
73+
url = "https://www.gnu.org/licenses/gpl-3.0.en.html"
74+
}
75+
}
76+
77+
developers {
78+
developer {
79+
id = "ReVanced"
80+
name = "ReVanced"
81+
82+
}
83+
}
84+
85+
scm {
86+
connection = "scm:git:git://github.com/revanced/revanced-library.git"
87+
developerConnection = "scm:git:[email protected]:revanced/revanced-library.git"
88+
url = "https://github.com/revanced/revanced-library"
89+
}
90+
}
91+
}
92+
}
93+
}
94+
95+
signing {
96+
useGpgCmd()
97+
sign(publishing.publications["revanced-library-networking-publication"])
98+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package app.revanced.library.networking
2+
3+
import io.ktor.server.application.*
4+
import io.ktor.util.pipeline.*
5+
6+
internal val PipelineContext<*, ApplicationCall>.queries get() = call.parameters

0 commit comments

Comments
 (0)