diff --git a/configuration.example.toml b/configuration.example.toml index 1530f04..47ff97e 100644 --- a/configuration.example.toml +++ b/configuration.example.toml @@ -10,4 +10,5 @@ contributors-repositories = [ "revanced-manager", ] api-version = 1 -host = "*.revanced.app" +cors = { host = "*.revanced.app", sub-domains = [] } +endpoint = "https://api.revanced.app" \ No newline at end of file diff --git a/configuration.toml b/configuration.toml index 2815595..37da260 100644 --- a/configuration.toml +++ b/configuration.toml @@ -10,4 +10,5 @@ contributors-repositories = [ "revanced-manager", ] api-version = 1 -host = "*.revanced.app" \ No newline at end of file +cors = { host = "*.127.0.0.1:8888", sub-domains = [] } +endpoint = "http://127.0.0.1:8888/" \ No newline at end of file diff --git a/src/main/kotlin/app/revanced/api/configuration/HTTP.kt b/src/main/kotlin/app/revanced/api/configuration/HTTP.kt index 09811a1..aa970c6 100644 --- a/src/main/kotlin/app/revanced/api/configuration/HTTP.kt +++ b/src/main/kotlin/app/revanced/api/configuration/HTTP.kt @@ -12,7 +12,10 @@ fun Application.configureHTTP() { val configurationRepository = get() install(CORS) { - allowHost(host = configurationRepository.host) + allowHost( + host = configurationRepository.cors.host, + subDomains = configurationRepository.cors.subDomains, + ) } install(RateLimit) { diff --git a/src/main/kotlin/app/revanced/api/configuration/OpenAPI.kt b/src/main/kotlin/app/revanced/api/configuration/OpenAPI.kt index 45316ef..e1c637d 100644 --- a/src/main/kotlin/app/revanced/api/configuration/OpenAPI.kt +++ b/src/main/kotlin/app/revanced/api/configuration/OpenAPI.kt @@ -1,6 +1,7 @@ package app.revanced.api.configuration import app.revanced.api.command.applicationVersion +import app.revanced.api.configuration.repository.ConfigurationRepository import io.bkbn.kompendium.core.plugin.NotarizedApplication import io.bkbn.kompendium.json.schema.KotlinXSchemaConfigurator import io.bkbn.kompendium.oas.OpenApiSpec @@ -12,9 +13,12 @@ import io.bkbn.kompendium.oas.security.BasicAuth import io.bkbn.kompendium.oas.security.BearerAuth import io.bkbn.kompendium.oas.server.Server import io.ktor.server.application.* +import org.koin.ktor.ext.get import java.net.URI internal fun Application.configureOpenAPI() { + val configurationRepository = get() + install(NotarizedApplication()) { spec = OpenApiSpec( info = Info( @@ -39,7 +43,7 @@ internal fun Application.configureOpenAPI() { ), ).apply { servers += Server( - url = URI("https://api.revanced.app"), + url = URI(configurationRepository.endpoint), description = "ReVanced API server", ) } diff --git a/src/main/kotlin/app/revanced/api/configuration/repository/ConfigurationRepository.kt b/src/main/kotlin/app/revanced/api/configuration/repository/ConfigurationRepository.kt index eaf70be..aed455a 100644 --- a/src/main/kotlin/app/revanced/api/configuration/repository/ConfigurationRepository.kt +++ b/src/main/kotlin/app/revanced/api/configuration/repository/ConfigurationRepository.kt @@ -19,7 +19,8 @@ import java.io.File * @property integrations The source of the integrations. * @property contributorsRepositoryNames The names of the repositories to get contributors from. * @property apiVersion The version to use for the API. - * @property host The host of the API to configure CORS. + * @property cors The CORS configuration. + * @property endpoint The endpoint of the API. */ @Serializable internal class ConfigurationRepository( @@ -30,7 +31,8 @@ internal class ConfigurationRepository( val contributorsRepositoryNames: Set, @SerialName("api-version") val apiVersion: Int = 1, - val host: String, + val cors: Cors, + val endpoint: String, ) { /** * An asset configuration. @@ -59,6 +61,19 @@ internal class ConfigurationRepository( @SerialName("public-key-file") val publicKeyFile: File, ) + + /** + * The CORS configuration. + * + * @property host The host of the API to configure CORS. + * @property subDomains The subdomains to allow for CORS. + */ + @Serializable + internal class Cors( + val host: String, + @SerialName("sub-domains") + val subDomains: List, + ) } private object RegexSerializer : KSerializer {