mirror of
https://gitlab.com/mangadex-pub/mangadex_at_home.git
synced 2024-01-19 02:48:37 +00:00
Generate stuff automatically
This commit is contained in:
parent
372e136560
commit
e481527fb3
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -106,4 +106,4 @@ nbproject/**
|
||||||
log/**
|
log/**
|
||||||
cache/**
|
cache/**
|
||||||
|
|
||||||
dev
|
settings.json
|
131
build.gradle
131
build.gradle
|
@ -1,10 +1,10 @@
|
||||||
plugins {
|
plugins {
|
||||||
id "java"
|
id "java"
|
||||||
id "org.jetbrains.kotlin.jvm" version "1.3.72"
|
id "org.jetbrains.kotlin.jvm" version "1.3.72"
|
||||||
id "application"
|
id "application"
|
||||||
id "com.github.johnrengelman.shadow" version "5.2.0"
|
id "com.github.johnrengelman.shadow" version "5.2.0"
|
||||||
id "com.diffplug.gradle.spotless" version "4.4.0"
|
id "com.diffplug.gradle.spotless" version "4.4.0"
|
||||||
id "dev.afanasev.sekret" version "0.0.3"
|
id "dev.afanasev.sekret" version "0.0.3"
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "com.mangadex"
|
group = "com.mangadex"
|
||||||
|
@ -12,102 +12,67 @@ version = "git describe --tags --dirty".execute().text.trim()
|
||||||
mainClassName = "mdnet.base.Main"
|
mainClassName = "mdnet.base.Main"
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
runtime.exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core"
|
runtime.exclude group: "org.jetbrains.kotlinx", module: "kotlinx-coroutines-core"
|
||||||
runtime.exclude group: "com.sun.mail", module: "javax.mail"
|
runtime.exclude group: "com.sun.mail", module: "javax.mail"
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compileOnly group: "dev.afanasev", name: "sekret-annotation", version: "0.0.3"
|
compileOnly group: "dev.afanasev", name: "sekret-annotation", version: "0.0.3"
|
||||||
|
|
||||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
|
||||||
implementation "org.jetbrains.kotlin:kotlin-reflect"
|
implementation "org.jetbrains.kotlin:kotlin-reflect"
|
||||||
|
|
||||||
implementation group: "commons-io", name: "commons-io", version: "2.7"
|
implementation group: "commons-io", name: "commons-io", version: "2.7"
|
||||||
|
|
||||||
implementation group: "org.http4k", name: "http4k-core", version: "$http_4k_version"
|
implementation group: "org.http4k", name: "http4k-core", version: "$http_4k_version"
|
||||||
implementation group: "org.http4k", name: "http4k-format-jackson", version: "$http_4k_version"
|
implementation group: "org.http4k", name: "http4k-format-jackson", version: "$http_4k_version"
|
||||||
implementation group: "com.fasterxml.jackson.datatype", name: "jackson-datatype-jsr310", version: "2.11.1"
|
implementation group: "com.fasterxml.jackson.datatype", name: "jackson-datatype-jsr310", version: "2.11.1"
|
||||||
implementation group: "org.http4k", name: "http4k-client-apache", version: "$http_4k_version"
|
implementation group: "org.http4k", name: "http4k-client-apache", version: "$http_4k_version"
|
||||||
implementation group: "org.http4k", name: "http4k-server-netty", version: "$http_4k_version"
|
implementation group: "org.http4k", name: "http4k-server-netty", version: "$http_4k_version"
|
||||||
runtimeOnly group: "io.netty", name: "netty-tcnative-boringssl-static", version: "2.0.30.Final"
|
runtimeOnly group: "io.netty", name: "netty-tcnative-boringssl-static", version: "2.0.30.Final"
|
||||||
|
|
||||||
implementation group: "ch.qos.logback", name: "logback-classic", version: "1.3.0-alpha4"
|
implementation group: "ch.qos.logback", name: "logback-classic", version: "1.3.0-alpha4"
|
||||||
implementation group: "org.jetbrains.exposed", name: "exposed-core", version: "$exposed_version"
|
implementation group: "org.jetbrains.exposed", name: "exposed-core", version: "$exposed_version"
|
||||||
implementation group: "org.jetbrains.exposed", name: "exposed-dao", version: "$exposed_version"
|
implementation group: "org.jetbrains.exposed", name: "exposed-dao", version: "$exposed_version"
|
||||||
implementation group: "org.jetbrains.exposed", name: "exposed-jdbc", version: "$exposed_version"
|
implementation group: "org.jetbrains.exposed", name: "exposed-jdbc", version: "$exposed_version"
|
||||||
|
|
||||||
implementation group: "org.xerial", name: "sqlite-jdbc", version: "3.30.1"
|
implementation group: "org.xerial", name: "sqlite-jdbc", version: "3.30.1"
|
||||||
|
|
||||||
implementation "com.goterl.lazycode:lazysodium-java:4.2.6"
|
implementation "com.goterl.lazycode:lazysodium-java:4.2.6"
|
||||||
implementation "net.java.dev.jna:jna:5.5.0"
|
implementation "net.java.dev.jna:jna:5.5.0"
|
||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||||
targetCompatibility = JavaVersion.VERSION_1_8
|
targetCompatibility = JavaVersion.VERSION_1_8
|
||||||
}
|
}
|
||||||
|
|
||||||
spotless {
|
spotless {
|
||||||
java {
|
java {
|
||||||
indentWithSpaces(4)
|
targetExclude("build/generated/**/*")
|
||||||
eclipse()
|
eclipse()
|
||||||
removeUnusedImports()
|
removeUnusedImports()
|
||||||
trimTrailingWhitespace()
|
trimTrailingWhitespace()
|
||||||
endWithNewline()
|
endWithNewline()
|
||||||
}
|
}
|
||||||
kotlin {
|
kotlin {
|
||||||
indentWithSpaces(4)
|
ktlint()
|
||||||
ktlint()
|
trimTrailingWhitespace()
|
||||||
trimTrailingWhitespace()
|
endWithNewline()
|
||||||
endWithNewline()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
run {
|
|
||||||
args = ["dev/settings.json"]
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("depsize") {
|
|
||||||
description = "Prints dependencies for 'default' configuration"
|
|
||||||
doLast() {
|
|
||||||
listConfigurationDependencies(configurations.default)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("depsize-all-configurations") {
|
|
||||||
description = "Prints dependencies for all available configurations"
|
|
||||||
doLast() {
|
|
||||||
configurations.each {
|
|
||||||
if (it.isCanBeResolved()) {
|
|
||||||
listConfigurationDependencies(it)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def listConfigurationDependencies(Configuration configuration) {
|
tasks.register("generateVersion", Copy) {
|
||||||
def formatStr = "%,10.2f"
|
def templateContext = [version: version]
|
||||||
|
inputs.properties templateContext
|
||||||
|
from "src/template/java"
|
||||||
|
into "$buildDir/generated/java"
|
||||||
|
expand templateContext
|
||||||
|
}
|
||||||
|
|
||||||
def size = configuration.collect { it.length() / (1024 * 1024) }.sum()
|
sourceSets.main.java.srcDir generateVersion.outputs.files
|
||||||
|
|
||||||
def out = new StringBuffer()
|
|
||||||
out << "\nConfiguration name: \"${configuration.name}\"\n"
|
|
||||||
if (size) {
|
|
||||||
out << "Total dependencies size:".padRight(65)
|
|
||||||
out << "${String.format(formatStr, size)} Mb\n\n"
|
|
||||||
|
|
||||||
configuration.sort { -it.length() }
|
|
||||||
.each {
|
|
||||||
out << "${it.name}".padRight(65)
|
|
||||||
out << "${String.format(formatStr, (it.length() / 1024))} kb\n"
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
out << "No dependencies found";
|
|
||||||
}
|
|
||||||
println(out)
|
|
||||||
}
|
|
||||||
|
|
|
@ -22,7 +22,6 @@ import java.time.Duration
|
||||||
|
|
||||||
object Constants {
|
object Constants {
|
||||||
const val CLIENT_BUILD = 14
|
const val CLIENT_BUILD = 14
|
||||||
const val CLIENT_VERSION = "1.1.1"
|
|
||||||
const val WEBUI_VERSION = "0.1.1"
|
const val WEBUI_VERSION = "0.1.1"
|
||||||
val MAX_AGE_CACHE: Duration = Duration.ofDays(14)
|
val MAX_AGE_CACHE: Duration = Duration.ofDays(14)
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,7 @@ import java.io.FileWriter
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.regex.Pattern
|
import java.util.regex.Pattern
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
|
import mdnet.BuildInfo
|
||||||
import mdnet.base.settings.ClientSettings
|
import mdnet.base.settings.ClientSettings
|
||||||
import org.slf4j.LoggerFactory
|
import org.slf4j.LoggerFactory
|
||||||
|
|
||||||
|
@ -41,7 +42,7 @@ object Main {
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun main(args: Array<String>) {
|
fun main(args: Array<String>) {
|
||||||
println(
|
println(
|
||||||
"Mangadex@Home Client Version ${Constants.CLIENT_VERSION} (Build ${Constants.CLIENT_BUILD}) initializing"
|
"Mangadex@Home Client Version ${BuildInfo.VERSION} (Build ${Constants.CLIENT_BUILD}) initializing"
|
||||||
)
|
)
|
||||||
println()
|
println()
|
||||||
println("Copyright (c) 2020, MangaDex Network")
|
println("Copyright (c) 2020, MangaDex Network")
|
||||||
|
|
|
@ -19,6 +19,7 @@ along with this MangaDex@Home. If not, see <http://www.gnu.org/licenses/>.
|
||||||
/* ktlint-disable no-wildcard-imports */
|
/* ktlint-disable no-wildcard-imports */
|
||||||
package mdnet.base.server
|
package mdnet.base.server
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException
|
||||||
import com.fasterxml.jackson.databind.DeserializationFeature
|
import com.fasterxml.jackson.databind.DeserializationFeature
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
|
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
|
||||||
|
@ -107,18 +108,26 @@ class ImageServer(private val cache: DiskLruCache, private val statistics: Atomi
|
||||||
|
|
||||||
if (tokenized || serverSettings.forceTokens) {
|
if (tokenized || serverSettings.forceTokens) {
|
||||||
val tokenArr = Base64.getUrlDecoder().decode(Path.of("token")(request))
|
val tokenArr = Base64.getUrlDecoder().decode(Path.of("token")(request))
|
||||||
val token = JACKSON.readValue<Token>(
|
val token = try {
|
||||||
try {
|
JACKSON.readValue<Token>(
|
||||||
sodium.cryptoBoxOpenEasyAfterNm(
|
try {
|
||||||
tokenArr.sliceArray(24 until tokenArr.size), tokenArr.sliceArray(0 until 24), serverSettings.tokenKey
|
sodium.cryptoBoxOpenEasyAfterNm(
|
||||||
)
|
tokenArr.sliceArray(24 until tokenArr.size), tokenArr.sliceArray(0 until 24), serverSettings.tokenKey
|
||||||
} catch (_: SodiumException) {
|
)
|
||||||
if (LOGGER.isInfoEnabled) {
|
} catch (_: SodiumException) {
|
||||||
LOGGER.info("Request for $sanitizedUri rejected for invalid token")
|
if (LOGGER.isInfoEnabled) {
|
||||||
|
LOGGER.info("Request for $sanitizedUri rejected for invalid token")
|
||||||
|
}
|
||||||
|
return@then Response(Status.FORBIDDEN)
|
||||||
}
|
}
|
||||||
return@then Response(Status.FORBIDDEN)
|
)
|
||||||
|
} catch (e: JsonProcessingException) {
|
||||||
|
if (LOGGER.isInfoEnabled) {
|
||||||
|
LOGGER.info("Request for $sanitizedUri rejected for invalid token")
|
||||||
}
|
}
|
||||||
)
|
return@then Response(Status.FORBIDDEN)
|
||||||
|
}
|
||||||
|
|
||||||
if (OffsetDateTime.now().isAfter(token.expires)) {
|
if (OffsetDateTime.now().isAfter(token.expires)) {
|
||||||
if (LOGGER.isInfoEnabled) {
|
if (LOGGER.isInfoEnabled) {
|
||||||
LOGGER.info("Request for $sanitizedUri rejected for expired token")
|
LOGGER.info("Request for $sanitizedUri rejected for expired token")
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.time.ZoneOffset
|
||||||
import java.time.ZonedDateTime
|
import java.time.ZonedDateTime
|
||||||
import java.time.format.DateTimeFormatter
|
import java.time.format.DateTimeFormatter
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
import mdnet.BuildInfo
|
||||||
import mdnet.base.Constants
|
import mdnet.base.Constants
|
||||||
import org.http4k.core.Filter
|
import org.http4k.core.Filter
|
||||||
import org.http4k.core.HttpHandler
|
import org.http4k.core.HttpHandler
|
||||||
|
@ -39,7 +40,7 @@ fun addCommonHeaders(): Filter {
|
||||||
{ request: Request ->
|
{ request: Request ->
|
||||||
val response = next(request)
|
val response = next(request)
|
||||||
response.header("Date", HTTP_TIME_FORMATTER.format(ZonedDateTime.now(ZoneOffset.UTC)))
|
response.header("Date", HTTP_TIME_FORMATTER.format(ZonedDateTime.now(ZoneOffset.UTC)))
|
||||||
.header("Server", "Mangadex@Home Node ${Constants.CLIENT_VERSION} (${Constants.CLIENT_BUILD})")
|
.header("Server", "Mangadex@Home Node ${BuildInfo.VERSION} (${Constants.CLIENT_BUILD})")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
5
src/template/java/mdnet/BuildInfo.java
Normal file
5
src/template/java/mdnet/BuildInfo.java
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
package mdnet;
|
||||||
|
|
||||||
|
public class BuildInfo {
|
||||||
|
public static final String VERSION = "${version}";
|
||||||
|
}
|
Loading…
Reference in a new issue