mirror of
https://github.com/gotson/komga.git
synced 2026-05-09 05:10:19 +02:00
Compare commits
23 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba6cb76b71 | ||
|
|
3d7615e7b4 | ||
|
|
9c84690a07 | ||
|
|
5d14057736 | ||
|
|
e3a8cc6b01 | ||
|
|
bb60a797e8 | ||
|
|
ddfe65dde1 | ||
|
|
4a7d9a6510 | ||
|
|
85edd8b63f | ||
|
|
63de6aa9b1 | ||
|
|
717ef82a3d | ||
|
|
7c00661365 | ||
|
|
6c2621b538 | ||
|
|
5fc0b7ef30 | ||
|
|
dd9c3facd7 | ||
|
|
b77554fa17 | ||
|
|
7e0d680bdf | ||
|
|
5620e3fd67 | ||
|
|
3ca9806e86 | ||
|
|
263d3dd893 | ||
|
|
328a22064d | ||
|
|
40dadcb8ca | ||
|
|
b8ea79eaf8 |
21 changed files with 192 additions and 109 deletions
4
.github/workflows/release.yml
vendored
4
.github/workflows/release.yml
vendored
|
|
@ -48,7 +48,7 @@ jobs:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: Set up Homebrew
|
- name: Set up Homebrew
|
||||||
id: set-up-homebrew
|
id: set-up-homebrew
|
||||||
uses: Homebrew/actions/setup-homebrew@master
|
uses: Homebrew/actions/setup-homebrew@main
|
||||||
- name: Install svu
|
- name: Install svu
|
||||||
run: brew install --cask caarlos0/tap/svu
|
run: brew install --cask caarlos0/tap/svu
|
||||||
- name: Compute next version for release
|
- name: Compute next version for release
|
||||||
|
|
@ -117,7 +117,7 @@ jobs:
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- name: Setup Gradle
|
- name: Setup Gradle
|
||||||
uses: gradle/actions/setup-gradle@v5
|
uses: gradle/actions/setup-gradle@v6
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./gradlew :komga:prepareThymeLeaf :komga:bootJar :komga-tray:jar
|
run: ./gradlew :komga:prepareThymeLeaf :komga:bootJar :komga-tray:jar
|
||||||
|
|
|
||||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
|
|
@ -28,7 +28,7 @@ jobs:
|
||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
|
|
||||||
- name: Setup Gradle
|
- name: Setup Gradle
|
||||||
uses: gradle/actions/setup-gradle@v5
|
uses: gradle/actions/setup-gradle@v6
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: ./gradlew build :komga-tray:jar
|
run: ./gradlew build :komga-tray:jar
|
||||||
|
|
|
||||||
52
CHANGELOG.md
52
CHANGELOG.md
|
|
@ -1,3 +1,55 @@
|
||||||
|
# [1.24.4](https://github.com/gotson/komga/compare/1.24.3...1.24.4) (2026-04-24)
|
||||||
|
## 🐛 Fixes
|
||||||
|
**api**
|
||||||
|
- omit UserDto.ageRestriction instead of returning null ([e3a8cc6](https://github.com/gotson/komga/commits/e3a8cc6))
|
||||||
|
|
||||||
|
**epub**
|
||||||
|
- some TOC may not be parsed correctly ([5fc0b7e](https://github.com/gotson/komga/commits/5fc0b7e))
|
||||||
|
|
||||||
|
**kobo**
|
||||||
|
- proxy raw request body to kobo store ([4a7d9a6](https://github.com/gotson/komga/commits/4a7d9a6)), closes [#2289](https://github.com/gotson/komga/issues/2289)
|
||||||
|
|
||||||
|
**koreader**
|
||||||
|
- also accept application/json on Accept header ([ddfe65d](https://github.com/gotson/komga/commits/ddfe65d))
|
||||||
|
|
||||||
|
**opds2**
|
||||||
|
- incorrect latest series navigation links ([717ef82](https://github.com/gotson/komga/commits/717ef82)), closes [#2285](https://github.com/gotson/komga/issues/2285)
|
||||||
|
- auth logo issue when using base url ([7c00661](https://github.com/gotson/komga/commits/7c00661)), closes [#2285](https://github.com/gotson/komga/issues/2285)
|
||||||
|
|
||||||
|
## 🛠 Build
|
||||||
|
**docker**
|
||||||
|
- update base image to Ubuntu 26.04 for amd64 and arm64 ([5d14057](https://github.com/gotson/komga/commits/5d14057))
|
||||||
|
|
||||||
|
**webui**
|
||||||
|
- update Browserslist db ([7e0d680](https://github.com/gotson/komga/commits/7e0d680))
|
||||||
|
|
||||||
|
**unscoped**
|
||||||
|
- update homebrew action ([6c2621b](https://github.com/gotson/komga/commits/6c2621b))
|
||||||
|
|
||||||
|
## ⚙️ Dependencies
|
||||||
|
**ci**
|
||||||
|
- bump gradle/actions from 5 to 6 ([3ca9806](https://github.com/gotson/komga/commits/3ca9806))
|
||||||
|
|
||||||
|
**webui**
|
||||||
|
- bump @xmldom/xmldom from 0.8.12 to 0.8.13 in /komga-webui ([bb60a79](https://github.com/gotson/komga/commits/bb60a79))
|
||||||
|
- bump axios from 1.13.5 to 1.15.0 in /komga-webui ([85edd8b](https://github.com/gotson/komga/commits/85edd8b))
|
||||||
|
- bump follow-redirects in /komga-webui ([63de6aa](https://github.com/gotson/komga/commits/63de6aa))
|
||||||
|
- bump lodash from 4.17.23 to 4.18.1 in /komga-webui ([b77554f](https://github.com/gotson/komga/commits/b77554f))
|
||||||
|
- bump @xmldom/xmldom from 0.8.10 to 0.8.12 in /komga-webui ([5620e3f](https://github.com/gotson/komga/commits/5620e3f))
|
||||||
|
- bump brace-expansion from 1.1.12 to 1.1.13 in /komga-webui ([263d3dd](https://github.com/gotson/komga/commits/263d3dd))
|
||||||
|
|
||||||
|
**unscoped**
|
||||||
|
- bump gradle-git-properties plugin from 2.5.2 to 2.5.7 ([dd9c3fa](https://github.com/gotson/komga/commits/dd9c3fa))
|
||||||
|
|
||||||
|
# [1.24.3](https://github.com/gotson/komga/compare/1.24.2...1.24.3) (2026-03-27)
|
||||||
|
## 🐛 Fixes
|
||||||
|
**webui**
|
||||||
|
- epub reader would not load ([b8ea79e](https://github.com/gotson/komga/commits/b8ea79e))
|
||||||
|
|
||||||
|
## ⚙️ Dependencies
|
||||||
|
**webui**
|
||||||
|
- bump node-forge from 1.3.2 to 1.4.0 in /komga-webui ([40dadcb](https://github.com/gotson/komga/commits/40dadcb))
|
||||||
|
|
||||||
# [1.24.2](https://github.com/gotson/komga/compare/1.24.1...1.24.2) (2026-03-26)
|
# [1.24.2](https://github.com/gotson/komga/compare/1.24.1...1.24.2) (2026-03-26)
|
||||||
## 🐛 Fixes
|
## 🐛 Fixes
|
||||||
**docker**
|
**docker**
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,2 @@
|
||||||
version=1.24.2
|
version=1.24.4
|
||||||
org.gradle.jvmargs=-Xmx2G
|
org.gradle.jvmargs=-Xmx2G
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,9 @@
|
||||||
sqliteJdbc = "3.50.2.0"
|
sqliteJdbc = "3.50.2.0"
|
||||||
nightmonkeys = "1.0.0"
|
nightmonkeys = "1.0.0"
|
||||||
twelvemonkeys = "3.12.0"
|
twelvemonkeys = "3.12.0"
|
||||||
springboot = "3.5.4"
|
springboot = "3.5.14"
|
||||||
lucene = "9.9.1" # v10 requires JDK 21
|
lucene = "9.9.1" # v10 requires JDK 21
|
||||||
jooq = "3.19.24" # should be aligned with the version provided by Spring Boot
|
jooq = "3.19.32" # should be aligned with the version provided by Spring Boot
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
gradleGitProperties = {id = "com.gorylenko.gradle-git-properties", version = "2.5.2"}
|
gradleGitProperties = {id = "com.gorylenko.gradle-git-properties", version = "2.5.7"}
|
||||||
|
|
|
||||||
155
komga-webui/package-lock.json
generated
155
komga-webui/package-lock.json
generated
|
|
@ -10,14 +10,14 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@d-i-t-a/reader": "github:gotson/R2D2BC#fork",
|
"@d-i-t-a/reader": "github:gotson/R2D2BC#fork",
|
||||||
"@w0s/isbn-verify": "^3.1.2",
|
"@w0s/isbn-verify": "^3.1.2",
|
||||||
"axios": "^1.13.5",
|
"axios": "^1.15.0",
|
||||||
"chart.js": "^2.9.4",
|
"chart.js": "^2.9.4",
|
||||||
"core-js": "^3.8.3",
|
"core-js": "^3.8.3",
|
||||||
"date-fns": "^2.30.0",
|
"date-fns": "^2.30.0",
|
||||||
"filesize": "^10.0.12",
|
"filesize": "^10.0.12",
|
||||||
"js-file-downloader": "^1.1.25",
|
"js-file-downloader": "^1.1.25",
|
||||||
"language-tags": "^1.0.9",
|
"language-tags": "^1.0.9",
|
||||||
"lodash": "^4.17.23",
|
"lodash": "^4.18.1",
|
||||||
"marked": "^15.0.4",
|
"marked": "^15.0.4",
|
||||||
"qs": "^6.14.2",
|
"qs": "^6.14.2",
|
||||||
"screenfull": "^5.2.0",
|
"screenfull": "^5.2.0",
|
||||||
|
|
@ -4660,9 +4660,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@xmldom/xmldom": {
|
"node_modules/@xmldom/xmldom": {
|
||||||
"version": "0.8.10",
|
"version": "0.8.13",
|
||||||
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
|
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz",
|
||||||
"integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
|
"integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw==",
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=10.0.0"
|
"node": ">=10.0.0"
|
||||||
}
|
}
|
||||||
|
|
@ -5216,13 +5216,13 @@
|
||||||
"integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
|
"integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
|
||||||
},
|
},
|
||||||
"node_modules/axios": {
|
"node_modules/axios": {
|
||||||
"version": "1.13.5",
|
"version": "1.15.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
|
||||||
"integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
|
"integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.15.11",
|
"follow-redirects": "^1.15.11",
|
||||||
"form-data": "^4.0.5",
|
"form-data": "^4.0.5",
|
||||||
"proxy-from-env": "^1.1.0"
|
"proxy-from-env": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/babel-jest": {
|
"node_modules/babel-jest": {
|
||||||
|
|
@ -5488,9 +5488,9 @@
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/baseline-browser-mapping": {
|
"node_modules/baseline-browser-mapping": {
|
||||||
"version": "2.10.0",
|
"version": "2.10.24",
|
||||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.24.tgz",
|
||||||
"integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
|
"integrity": "sha512-I2NkZOOrj2XuguvWCK6OVh9GavsNjZjK908Rq3mIBK25+GD8vPX5w2WdxVqnQ7xx3SrZJiCiZFu+/Oz50oSYSA==",
|
||||||
"license": "Apache-2.0",
|
"license": "Apache-2.0",
|
||||||
"bin": {
|
"bin": {
|
||||||
"baseline-browser-mapping": "dist/cli.cjs"
|
"baseline-browser-mapping": "dist/cli.cjs"
|
||||||
|
|
@ -5632,9 +5632,9 @@
|
||||||
"integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA=="
|
"integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA=="
|
||||||
},
|
},
|
||||||
"node_modules/brace-expansion": {
|
"node_modules/brace-expansion": {
|
||||||
"version": "1.1.12",
|
"version": "1.1.13",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
|
||||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
"integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0",
|
"balanced-match": "^1.0.0",
|
||||||
"concat-map": "0.0.1"
|
"concat-map": "0.0.1"
|
||||||
|
|
@ -5900,9 +5900,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/caniuse-lite": {
|
"node_modules/caniuse-lite": {
|
||||||
"version": "1.0.30001775",
|
"version": "1.0.30001791",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz",
|
||||||
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A==",
|
"integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "opencollective",
|
"type": "opencollective",
|
||||||
|
|
@ -7511,9 +7511,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/editorconfig/node_modules/brace-expansion": {
|
"node_modules/editorconfig/node_modules/brace-expansion": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
|
||||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0"
|
"balanced-match": "^1.0.0"
|
||||||
|
|
@ -9077,9 +9077,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/filehound/node_modules/brace-expansion": {
|
"node_modules/filehound/node_modules/brace-expansion": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
|
||||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^1.0.0"
|
"balanced-match": "^1.0.0"
|
||||||
}
|
}
|
||||||
|
|
@ -9213,9 +9213,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/follow-redirects": {
|
"node_modules/follow-redirects": {
|
||||||
"version": "1.15.11",
|
"version": "1.16.0",
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
|
||||||
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==",
|
"integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==",
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"type": "individual",
|
"type": "individual",
|
||||||
|
|
@ -13137,9 +13137,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/js-beautify/node_modules/brace-expansion": {
|
"node_modules/js-beautify/node_modules/brace-expansion": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
|
||||||
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
|
"integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"balanced-match": "^4.0.2"
|
"balanced-match": "^4.0.2"
|
||||||
|
|
@ -13562,9 +13562,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/lodash": {
|
"node_modules/lodash": {
|
||||||
"version": "4.17.23",
|
"version": "4.18.1",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
|
||||||
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="
|
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="
|
||||||
},
|
},
|
||||||
"node_modules/lodash.clonedeep": {
|
"node_modules/lodash.clonedeep": {
|
||||||
"version": "4.5.0",
|
"version": "4.5.0",
|
||||||
|
|
@ -14357,9 +14357,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-forge": {
|
"node_modules/node-forge": {
|
||||||
"version": "1.3.2",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz",
|
||||||
"integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==",
|
"integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">= 6.13.0"
|
"node": ">= 6.13.0"
|
||||||
|
|
@ -15907,9 +15907,12 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/proxy-from-env": {
|
"node_modules/proxy-from-env": {
|
||||||
"version": "1.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
|
||||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
"integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"node_modules/pseudomap": {
|
"node_modules/pseudomap": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
|
|
@ -23764,9 +23767,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@xmldom/xmldom": {
|
"@xmldom/xmldom": {
|
||||||
"version": "0.8.10",
|
"version": "0.8.13",
|
||||||
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
|
"resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.13.tgz",
|
||||||
"integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw=="
|
"integrity": "sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw=="
|
||||||
},
|
},
|
||||||
"@xtuc/ieee754": {
|
"@xtuc/ieee754": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
|
|
@ -24148,13 +24151,13 @@
|
||||||
"integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
|
"integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
|
||||||
},
|
},
|
||||||
"axios": {
|
"axios": {
|
||||||
"version": "1.13.5",
|
"version": "1.15.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.15.0.tgz",
|
||||||
"integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
|
"integrity": "sha512-wWyJDlAatxk30ZJer+GeCWS209sA42X+N5jU2jy6oHTp7ufw8uzUTVFBX9+wTfAlhiJXGS0Bq7X6efruWjuK9Q==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"follow-redirects": "^1.15.11",
|
"follow-redirects": "^1.15.11",
|
||||||
"form-data": "^4.0.5",
|
"form-data": "^4.0.5",
|
||||||
"proxy-from-env": "^1.1.0"
|
"proxy-from-env": "^2.1.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"babel-jest": {
|
"babel-jest": {
|
||||||
|
|
@ -24349,9 +24352,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"baseline-browser-mapping": {
|
"baseline-browser-mapping": {
|
||||||
"version": "2.10.0",
|
"version": "2.10.24",
|
||||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.24.tgz",
|
||||||
"integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA=="
|
"integrity": "sha512-I2NkZOOrj2XuguvWCK6OVh9GavsNjZjK908Rq3mIBK25+GD8vPX5w2WdxVqnQ7xx3SrZJiCiZFu+/Oz50oSYSA=="
|
||||||
},
|
},
|
||||||
"batch": {
|
"batch": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
|
|
@ -24472,9 +24475,9 @@
|
||||||
"integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA=="
|
"integrity": "sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA=="
|
||||||
},
|
},
|
||||||
"brace-expansion": {
|
"brace-expansion": {
|
||||||
"version": "1.1.12",
|
"version": "1.1.13",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz",
|
||||||
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
"integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"balanced-match": "^1.0.0",
|
"balanced-match": "^1.0.0",
|
||||||
"concat-map": "0.0.1"
|
"concat-map": "0.0.1"
|
||||||
|
|
@ -24654,9 +24657,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"caniuse-lite": {
|
"caniuse-lite": {
|
||||||
"version": "1.0.30001775",
|
"version": "1.0.30001791",
|
||||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001775.tgz",
|
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001791.tgz",
|
||||||
"integrity": "sha512-s3Qv7Lht9zbVKE9XoTyRG6wVDCKdtOFIjBGg3+Yhn6JaytuNKPIjBMTMIY1AnOH3seL5mvF+x33oGAyK3hVt3A=="
|
"integrity": "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ=="
|
||||||
},
|
},
|
||||||
"case-sensitive-paths-webpack-plugin": {
|
"case-sensitive-paths-webpack-plugin": {
|
||||||
"version": "2.4.0",
|
"version": "2.4.0",
|
||||||
|
|
@ -25868,9 +25871,9 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"brace-expansion": {
|
"brace-expansion": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
|
||||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"balanced-match": "^1.0.0"
|
"balanced-match": "^1.0.0"
|
||||||
|
|
@ -27052,9 +27055,9 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"brace-expansion": {
|
"brace-expansion": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz",
|
||||||
"integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
|
"integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"balanced-match": "^1.0.0"
|
"balanced-match": "^1.0.0"
|
||||||
}
|
}
|
||||||
|
|
@ -27165,9 +27168,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"follow-redirects": {
|
"follow-redirects": {
|
||||||
"version": "1.15.11",
|
"version": "1.16.0",
|
||||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz",
|
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz",
|
||||||
"integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="
|
"integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="
|
||||||
},
|
},
|
||||||
"for-each": {
|
"for-each": {
|
||||||
"version": "0.3.3",
|
"version": "0.3.3",
|
||||||
|
|
@ -29979,9 +29982,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"brace-expansion": {
|
"brace-expansion": {
|
||||||
"version": "5.0.3",
|
"version": "5.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
|
||||||
"integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==",
|
"integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"balanced-match": "^4.0.2"
|
"balanced-match": "^4.0.2"
|
||||||
|
|
@ -30311,9 +30314,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"lodash": {
|
"lodash": {
|
||||||
"version": "4.17.23",
|
"version": "4.18.1",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
|
||||||
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w=="
|
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q=="
|
||||||
},
|
},
|
||||||
"lodash.clonedeep": {
|
"lodash.clonedeep": {
|
||||||
"version": "4.5.0",
|
"version": "4.5.0",
|
||||||
|
|
@ -30930,9 +30933,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node-forge": {
|
"node-forge": {
|
||||||
"version": "1.3.2",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz",
|
||||||
"integrity": "sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==",
|
"integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node-int64": {
|
"node-int64": {
|
||||||
|
|
@ -32013,9 +32016,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"proxy-from-env": {
|
"proxy-from-env": {
|
||||||
"version": "1.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",
|
||||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
|
"integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="
|
||||||
},
|
},
|
||||||
"pseudomap": {
|
"pseudomap": {
|
||||||
"version": "1.0.2",
|
"version": "1.0.2",
|
||||||
|
|
|
||||||
|
|
@ -11,14 +11,14 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@d-i-t-a/reader": "github:gotson/R2D2BC#fork",
|
"@d-i-t-a/reader": "github:gotson/R2D2BC#fork",
|
||||||
"@w0s/isbn-verify": "^3.1.2",
|
"@w0s/isbn-verify": "^3.1.2",
|
||||||
"axios": "^1.13.5",
|
"axios": "^1.15.0",
|
||||||
"chart.js": "^2.9.4",
|
"chart.js": "^2.9.4",
|
||||||
"core-js": "^3.8.3",
|
"core-js": "^3.8.3",
|
||||||
"date-fns": "^2.30.0",
|
"date-fns": "^2.30.0",
|
||||||
"filesize": "^10.0.12",
|
"filesize": "^10.0.12",
|
||||||
"js-file-downloader": "^1.1.25",
|
"js-file-downloader": "^1.1.25",
|
||||||
"language-tags": "^1.0.9",
|
"language-tags": "^1.0.9",
|
||||||
"lodash": "^4.17.23",
|
"lodash": "^4.18.1",
|
||||||
"marked": "^15.0.4",
|
"marked": "^15.0.4",
|
||||||
"qs": "^6.14.2",
|
"qs": "^6.14.2",
|
||||||
"screenfull": "^5.2.0",
|
"screenfull": "^5.2.0",
|
||||||
|
|
|
||||||
|
|
@ -751,7 +751,7 @@ export default Vue.extend({
|
||||||
|
|
||||||
const fontFamiliesInjectables = this.fontFamiliesAdditional.map(x => ({
|
const fontFamiliesInjectables = this.fontFamiliesAdditional.map(x => ({
|
||||||
type: 'style',
|
type: 'style',
|
||||||
url: new URL(`${urls.origin}api/v1/fonts/resource/${x}/css`, import.meta.url).toString(),
|
url: new URL(`${urls.origin}api/v1/fonts/resource/${x}/css`).toString(),
|
||||||
fontFamily: x,
|
fontFamily: x,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,12 +5,11 @@ COPY assembly/${JAR} application.jar
|
||||||
RUN java -Djarmode=tools -jar application.jar extract --layers --destination extracted
|
RUN java -Djarmode=tools -jar application.jar extract --layers --destination extracted
|
||||||
|
|
||||||
# amd64 builder
|
# amd64 builder
|
||||||
FROM ubuntu:24.10 AS build-amd64
|
FROM ubuntu:26.04 AS build-amd64
|
||||||
ENV JAVA_HOME=/opt/java/openjdk
|
ENV JAVA_HOME=/opt/java/openjdk
|
||||||
COPY --from=eclipse-temurin:23-jre $JAVA_HOME $JAVA_HOME
|
COPY --from=eclipse-temurin:23-jre $JAVA_HOME $JAVA_HOME
|
||||||
ENV PATH="${JAVA_HOME}/bin:${PATH}"
|
ENV PATH="${JAVA_HOME}/bin:${PATH}"
|
||||||
RUN sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list.d/ubuntu.sources && \
|
RUN apt -y update && \
|
||||||
apt -y update && \
|
|
||||||
apt -y install ca-certificates locales libjxl-dev libheif-dev libwebp-dev libarchive-dev wget curl && \
|
apt -y install ca-certificates locales libjxl-dev libheif-dev libwebp-dev libarchive-dev wget curl && \
|
||||||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \
|
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \
|
||||||
locale-gen en_US.UTF-8 && \
|
locale-gen en_US.UTF-8 && \
|
||||||
|
|
@ -20,12 +19,11 @@ RUN sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releas
|
||||||
ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/lib/x86_64-linux-gnu"
|
ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/lib/x86_64-linux-gnu"
|
||||||
|
|
||||||
# arm64 builder
|
# arm64 builder
|
||||||
FROM ubuntu:24.10 AS build-arm64
|
FROM ubuntu:26.04 AS build-arm64
|
||||||
ENV JAVA_HOME=/opt/java/openjdk
|
ENV JAVA_HOME=/opt/java/openjdk
|
||||||
COPY --from=eclipse-temurin:23-jre $JAVA_HOME $JAVA_HOME
|
COPY --from=eclipse-temurin:23-jre $JAVA_HOME $JAVA_HOME
|
||||||
ENV PATH="${JAVA_HOME}/bin:${PATH}"
|
ENV PATH="${JAVA_HOME}/bin:${PATH}"
|
||||||
RUN sed -i -re 's/([a-z]{2}\.)?ports.ubuntu.com\/ubuntu-ports/old-releases.ubuntu.com\/ubuntu/g' /etc/apt/sources.list.d/ubuntu.sources && \
|
RUN apt -y update && \
|
||||||
apt -y update && \
|
|
||||||
apt -y install ca-certificates locales libjxl-dev libheif-dev libwebp-dev libarchive-dev wget curl && \
|
apt -y install ca-certificates locales libjxl-dev libheif-dev libwebp-dev libarchive-dev wget curl && \
|
||||||
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \
|
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen && \
|
||||||
locale-gen en_US.UTF-8 && \
|
locale-gen en_US.UTF-8 && \
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
"url": "https://github.com/gotson/komga/blob/master/LICENSE"
|
"url": "https://github.com/gotson/komga/blob/master/LICENSE"
|
||||||
},
|
},
|
||||||
"title": "Komga API",
|
"title": "Komga API",
|
||||||
"version": "1.24.2"
|
"version": "1.24.4"
|
||||||
},
|
},
|
||||||
"externalDocs": {
|
"externalDocs": {
|
||||||
"description": "Komga documentation",
|
"description": "Komga documentation",
|
||||||
|
|
|
||||||
|
|
@ -74,7 +74,7 @@ class KoboProxy(
|
||||||
* raw Kobo sync token returned, and added to the response headers.
|
* raw Kobo sync token returned, and added to the response headers.
|
||||||
*/
|
*/
|
||||||
fun proxyCurrentRequest(
|
fun proxyCurrentRequest(
|
||||||
body: Any? = null,
|
body: ByteArray? = null,
|
||||||
includeSyncToken: Boolean = false,
|
includeSyncToken: Boolean = false,
|
||||||
): ResponseEntity<JsonNode> {
|
): ResponseEntity<JsonNode> {
|
||||||
if (!komgaSettingsProvider.koboProxy) throw IllegalStateException("kobo proxying is disabled")
|
if (!komgaSettingsProvider.koboProxy) throw IllegalStateException("kobo proxying is disabled")
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import org.gotson.komga.domain.model.EpubTocEntry
|
||||||
import org.gotson.komga.infrastructure.util.getEntryBytes
|
import org.gotson.komga.infrastructure.util.getEntryBytes
|
||||||
import org.jsoup.Jsoup
|
import org.jsoup.Jsoup
|
||||||
import org.jsoup.nodes.Element
|
import org.jsoup.nodes.Element
|
||||||
|
import org.jsoup.parser.Parser
|
||||||
import java.net.URLDecoder
|
import java.net.URLDecoder
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
import kotlin.io.path.Path
|
import kotlin.io.path.Path
|
||||||
|
|
@ -20,7 +21,7 @@ fun processNav(
|
||||||
document: ResourceContent,
|
document: ResourceContent,
|
||||||
navElement: Epub3Nav,
|
navElement: Epub3Nav,
|
||||||
): List<EpubTocEntry> {
|
): List<EpubTocEntry> {
|
||||||
val doc = Jsoup.parse(document.content)
|
val doc = Jsoup.parse(document.content, "", Parser.xmlParser())
|
||||||
val nav =
|
val nav =
|
||||||
doc
|
doc
|
||||||
.select("nav")
|
.select("nav")
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ class OpdsGenerator(
|
||||||
links =
|
links =
|
||||||
listOf(
|
listOf(
|
||||||
WPLinkDto(rel = "help", href = "https://komga.org"),
|
WPLinkDto(rel = "help", href = "https://komga.org"),
|
||||||
WPLinkDto(rel = "logo", href = ServletUriComponentsBuilder.fromCurrentContextPath().path("android-chrome-512x512.png").toUriString()),
|
WPLinkDto(rel = "logo", href = ServletUriComponentsBuilder.fromCurrentContextPath().pathSegment("android-chrome-512x512.png").toUriString()),
|
||||||
),
|
),
|
||||||
authentication =
|
authentication =
|
||||||
listOf(
|
listOf(
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package org.gotson.komga.interfaces.api.kobo
|
||||||
import com.fasterxml.jackson.databind.JsonNode
|
import com.fasterxml.jackson.databind.JsonNode
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper
|
import com.fasterxml.jackson.databind.ObjectMapper
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode
|
import com.fasterxml.jackson.databind.node.ObjectNode
|
||||||
|
import com.fasterxml.jackson.module.kotlin.readValue
|
||||||
import com.fasterxml.jackson.module.kotlin.treeToValue
|
import com.fasterxml.jackson.module.kotlin.treeToValue
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine
|
import com.github.benmanes.caffeine.cache.Caffeine
|
||||||
import io.github.oshai.kotlinlogging.KotlinLogging
|
import io.github.oshai.kotlinlogging.KotlinLogging
|
||||||
|
|
@ -174,6 +175,7 @@ class KoboController(
|
||||||
private val imageConverter: ImageConverter,
|
private val imageConverter: ImageConverter,
|
||||||
private val mediaRepository: MediaRepository,
|
private val mediaRepository: MediaRepository,
|
||||||
private val contentRestrictionChecker: ContentRestrictionChecker,
|
private val contentRestrictionChecker: ContentRestrictionChecker,
|
||||||
|
private val objectMapper: ObjectMapper,
|
||||||
) {
|
) {
|
||||||
private val cachedKepub =
|
private val cachedKepub =
|
||||||
Caffeine
|
Caffeine
|
||||||
|
|
@ -230,14 +232,16 @@ class KoboController(
|
||||||
*/
|
*/
|
||||||
@PostMapping("v1/auth/device")
|
@PostMapping("v1/auth/device")
|
||||||
fun authDevice(
|
fun authDevice(
|
||||||
@RequestBody body: JsonNode,
|
@RequestBody rawBody: ByteArray,
|
||||||
): Any {
|
): Any {
|
||||||
try {
|
try {
|
||||||
return koboProxy.proxyCurrentRequest(body)
|
return koboProxy.proxyCurrentRequest(rawBody)
|
||||||
} catch (_: Exception) {
|
} catch (_: Exception) {
|
||||||
logger.warn { "Failed to get response from Kobo /v1/auth/device, fallback to noproxy" }
|
logger.warn { "Failed to get response from Kobo /v1/auth/device, fallback to noproxy" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val body = objectMapper.readTree(rawBody)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Komga does not use the /v1/auth/device API call for authentication/authorization.
|
* Komga does not use the /v1/auth/device API call for authentication/authorization.
|
||||||
* Return dummy data to keep the device happy.
|
* Return dummy data to keep the device happy.
|
||||||
|
|
@ -546,13 +550,15 @@ class KoboController(
|
||||||
fun updateState(
|
fun updateState(
|
||||||
@AuthenticationPrincipal principal: KomgaPrincipal,
|
@AuthenticationPrincipal principal: KomgaPrincipal,
|
||||||
@PathVariable bookId: String,
|
@PathVariable bookId: String,
|
||||||
@RequestBody body: ReadingStateStateUpdateDto,
|
@RequestBody rawBody: ByteArray,
|
||||||
@RequestHeader(name = X_KOBO_DEVICEID, required = false) koboDeviceId: String = "unknown",
|
@RequestHeader(name = X_KOBO_DEVICEID, required = false) koboDeviceId: String = "unknown",
|
||||||
): ResponseEntity<*> {
|
): ResponseEntity<*> {
|
||||||
|
val body = objectMapper.readValue<ReadingStateStateUpdateDto>(rawBody)
|
||||||
|
|
||||||
val book =
|
val book =
|
||||||
bookRepository.findByIdOrNull(bookId)
|
bookRepository.findByIdOrNull(bookId)
|
||||||
?: if (koboProxy.isEnabled())
|
?: if (koboProxy.isEnabled())
|
||||||
return koboProxy.proxyCurrentRequest(body)
|
return koboProxy.proxyCurrentRequest(rawBody)
|
||||||
else
|
else
|
||||||
throw ResponseStatusException(HttpStatus.NOT_FOUND)
|
throw ResponseStatusException(HttpStatus.NOT_FOUND)
|
||||||
|
|
||||||
|
|
@ -733,7 +739,7 @@ class KoboController(
|
||||||
method = [RequestMethod.GET, RequestMethod.PUT, RequestMethod.POST, RequestMethod.DELETE, RequestMethod.PATCH],
|
method = [RequestMethod.GET, RequestMethod.PUT, RequestMethod.POST, RequestMethod.DELETE, RequestMethod.PATCH],
|
||||||
)
|
)
|
||||||
fun catchAll(
|
fun catchAll(
|
||||||
@RequestBody body: Any?,
|
@RequestBody body: ByteArray?,
|
||||||
): ResponseEntity<JsonNode> =
|
): ResponseEntity<JsonNode> =
|
||||||
if (koboProxy.isEnabled())
|
if (koboProxy.isEnabled())
|
||||||
koboProxy.proxyCurrentRequest(body)
|
koboProxy.proxyCurrentRequest(body)
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import org.gotson.komga.infrastructure.security.KomgaPrincipal
|
||||||
import org.gotson.komga.interfaces.api.kosync.dto.DocumentProgressDto
|
import org.gotson.komga.interfaces.api.kosync.dto.DocumentProgressDto
|
||||||
import org.gotson.komga.interfaces.api.kosync.dto.UserAuthenticationDto
|
import org.gotson.komga.interfaces.api.kosync.dto.UserAuthenticationDto
|
||||||
import org.springframework.http.HttpStatus
|
import org.springframework.http.HttpStatus
|
||||||
|
import org.springframework.http.MediaType
|
||||||
import org.springframework.http.ResponseEntity
|
import org.springframework.http.ResponseEntity
|
||||||
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
import org.springframework.security.core.annotation.AuthenticationPrincipal
|
||||||
import org.springframework.web.bind.annotation.GetMapping
|
import org.springframework.web.bind.annotation.GetMapping
|
||||||
|
|
@ -29,7 +30,7 @@ import java.time.ZonedDateTime
|
||||||
private val logger = KotlinLogging.logger {}
|
private val logger = KotlinLogging.logger {}
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/koreader", produces = ["application/vnd.koreader.v1+json"])
|
@RequestMapping("/koreader", produces = [MediaType.APPLICATION_JSON_VALUE, "application/vnd.koreader.v1+json"])
|
||||||
class KoreaderSyncController(
|
class KoreaderSyncController(
|
||||||
private val bookRepository: BookRepository,
|
private val bookRepository: BookRepository,
|
||||||
private val mediaRepository: MediaRepository,
|
private val mediaRepository: MediaRepository,
|
||||||
|
|
|
||||||
|
|
@ -435,7 +435,7 @@ class Opds2Controller(
|
||||||
PageRequest.of(page.pageNumber, page.pageSize, Sort.by(Sort.Order.desc("lastModified"))),
|
PageRequest.of(page.pageNumber, page.pageSize, Sort.by(Sort.Order.desc("lastModified"))),
|
||||||
).map { it.toWPLinkDto() }
|
).map { it.toWPLinkDto() }
|
||||||
|
|
||||||
val uriBuilder = uriBuilder("libraries${if (library != null) "/${library.id}" else ""}/books/latest")
|
val uriBuilder = uriBuilder("libraries${if (library != null) "/${library.id}" else ""}/series/latest")
|
||||||
|
|
||||||
return FeedDto(
|
return FeedDto(
|
||||||
metadata =
|
metadata =
|
||||||
|
|
|
||||||
|
|
@ -112,10 +112,12 @@ class UserController(
|
||||||
restrictions =
|
restrictions =
|
||||||
ContentRestrictions(
|
ContentRestrictions(
|
||||||
ageRestriction =
|
ageRestriction =
|
||||||
if (ageRestriction == null || ageRestriction.restriction == AllowExcludeDto.NONE)
|
ageRestriction.let {
|
||||||
null
|
if (it == null || it.restriction == AllowExcludeDto.NONE)
|
||||||
else
|
null
|
||||||
AgeRestriction(ageRestriction.age, ageRestriction.restriction.toDomain()),
|
else
|
||||||
|
AgeRestriction(it.age, it.restriction.toDomain())
|
||||||
|
},
|
||||||
labelsAllow = labelsAllow ?: emptySet(),
|
labelsAllow = labelsAllow ?: emptySet(),
|
||||||
labelsExclude = labelsExclude ?: emptySet(),
|
labelsExclude = labelsExclude ?: emptySet(),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,12 @@
|
||||||
package org.gotson.komga.interfaces.api.rest.dto
|
package org.gotson.komga.interfaces.api.rest.dto
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude
|
||||||
import org.gotson.komga.domain.model.AgeRestriction
|
import org.gotson.komga.domain.model.AgeRestriction
|
||||||
import org.gotson.komga.domain.model.AllowExclude
|
import org.gotson.komga.domain.model.AllowExclude
|
||||||
import org.gotson.komga.domain.model.KomgaUser
|
import org.gotson.komga.domain.model.KomgaUser
|
||||||
import org.gotson.komga.infrastructure.security.KomgaPrincipal
|
import org.gotson.komga.infrastructure.security.KomgaPrincipal
|
||||||
|
|
||||||
|
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||||
data class UserDto(
|
data class UserDto(
|
||||||
val id: String,
|
val id: String,
|
||||||
val email: String,
|
val email: String,
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package org.gotson.komga.infrastructure.mediacontainer.epub
|
||||||
import org.assertj.core.api.Assertions.assertThat
|
import org.assertj.core.api.Assertions.assertThat
|
||||||
import org.gotson.komga.domain.model.EpubTocEntry
|
import org.gotson.komga.domain.model.EpubTocEntry
|
||||||
import org.jsoup.Jsoup
|
import org.jsoup.Jsoup
|
||||||
|
import org.jsoup.parser.Parser
|
||||||
import org.junit.jupiter.params.ParameterizedTest
|
import org.junit.jupiter.params.ParameterizedTest
|
||||||
import org.junit.jupiter.params.provider.ValueSource
|
import org.junit.jupiter.params.provider.ValueSource
|
||||||
import org.springframework.core.io.ClassPathResource
|
import org.springframework.core.io.ClassPathResource
|
||||||
|
|
@ -15,7 +16,7 @@ class OpfTest {
|
||||||
// given
|
// given
|
||||||
val opfResource = ClassPathResource("epub/clash.opf")
|
val opfResource = ClassPathResource("epub/clash.opf")
|
||||||
val opfString = opfResource.inputStream.readAllBytes().decodeToString()
|
val opfString = opfResource.inputStream.readAllBytes().decodeToString()
|
||||||
val opfDoc = Jsoup.parse(opfString)
|
val opfDoc = Jsoup.parse(opfString, "", Parser.xmlParser())
|
||||||
|
|
||||||
// when
|
// when
|
||||||
val opfLandmarks = processOpfGuide(opfDoc, if (prefix.isBlank()) null else Path.of(prefix))
|
val opfLandmarks = processOpfGuide(opfDoc, if (prefix.isBlank()) null else Path.of(prefix))
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,13 @@ import org.gotson.komga.domain.service.KomgaUserLifecycle
|
||||||
import org.junit.jupiter.api.AfterAll
|
import org.junit.jupiter.api.AfterAll
|
||||||
import org.junit.jupiter.api.BeforeAll
|
import org.junit.jupiter.api.BeforeAll
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest
|
||||||
|
import org.junit.jupiter.params.provider.ValueSource
|
||||||
import org.springframework.beans.factory.annotation.Autowired
|
import org.springframework.beans.factory.annotation.Autowired
|
||||||
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
|
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc
|
||||||
import org.springframework.boot.test.context.SpringBootTest
|
import org.springframework.boot.test.context.SpringBootTest
|
||||||
|
import org.springframework.http.HttpHeaders
|
||||||
|
import org.springframework.http.MediaType
|
||||||
import org.springframework.test.web.servlet.MockMvc
|
import org.springframework.test.web.servlet.MockMvc
|
||||||
import org.springframework.test.web.servlet.get
|
import org.springframework.test.web.servlet.get
|
||||||
import org.springframework.test.web.servlet.post
|
import org.springframework.test.web.servlet.post
|
||||||
|
|
@ -68,4 +72,17 @@ class KoreaderSyncControllerTest(
|
||||||
jsonPath("authorized") { value("OK") }
|
jsonPath("authorized") { value("OK") }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest
|
||||||
|
@ValueSource(strings = [MediaType.APPLICATION_JSON_VALUE, "application/vnd.koreader.v1+json"])
|
||||||
|
fun `given accept header when calling API user then returns OK`(acceptHeader: String) {
|
||||||
|
mockMvc
|
||||||
|
.get("/koreader/users/auth") {
|
||||||
|
header("x-auth-user", apiKey)
|
||||||
|
header(HttpHeaders.ACCEPT, acceptHeader)
|
||||||
|
}.andExpect {
|
||||||
|
status { isOk() }
|
||||||
|
jsonPath("authorized") { value("OK") }
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ class UserControllerTest(
|
||||||
jsonPath("$.sharedLibrariesId") { doesNotExist() }
|
jsonPath("$.sharedLibrariesId") { doesNotExist() }
|
||||||
jsonPath("$.labelsAllow") { isEmpty() }
|
jsonPath("$.labelsAllow") { isEmpty() }
|
||||||
jsonPath("$.labelsExclude") { isEmpty() }
|
jsonPath("$.labelsExclude") { isEmpty() }
|
||||||
jsonPath("$.ageRestriction") { isEmpty() }
|
jsonPath("$.ageRestriction") { doesNotExist() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue