mirror of
https://github.com/Suwayomi/Tachidesk.git
synced 2025-12-10 06:42:07 +01:00
* Basic JWT implementation * Move JWT to UI_LOGIN mode and bring back SIMPLE_LOGIN as before * Update server/src/main/kotlin/suwayomi/tachidesk/global/impl/util/Jwt.kt Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com> * Refresh: Update only access token Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com> * Implement JWT Audience * Store JWT key Generates the key on startup if not set * Handle invalid Base64 * Make JWT expiry configurable * Missing value parse * Update server/src/main/kotlin/suwayomi/tachidesk/global/impl/util/Jwt.kt Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com> * Simplify Duration parsing * JWT Protect Mutations * JWT Protect Queries and Subscriptions * JWT Protect v1 WebSockets * WebSockets allow sending token via protocol header * Also respect the `suwayomi-server-token` cookie * JWT reduce default token expiry * JWT Support cookie on WebSocket as well * Lint * Authenticate graphql subscription via connection_init payload * WebView: Prefer explicit token over cookie This hack was implemented because WebView sent `"null"` if no token was supplied, just don't send a bad token, then we can do this properly * WebView: Implement basic login dialog if no token supplied --------- Co-authored-by: Mitchell Syer <Syer10@users.noreply.github.com> Co-authored-by: schroda <50052685+schroda@users.noreply.github.com>
87 lines
4.0 KiB
Plaintext
87 lines
4.0 KiB
Plaintext
# Server ip and port bindings
|
|
server.ip = "0.0.0.0"
|
|
server.port = 4567
|
|
|
|
# Socks5 proxy
|
|
server.socksProxyEnabled = false
|
|
server.socksProxyVersion = 5 # 4 or 5
|
|
server.socksProxyHost = ""
|
|
server.socksProxyPort = ""
|
|
server.socksProxyUsername = ""
|
|
server.socksProxyPassword = ""
|
|
|
|
# webUI
|
|
server.webUIEnabled = true
|
|
server.webUIFlavor = "WebUI" # "WebUI", "VUI" or "Custom"
|
|
server.initialOpenInBrowserEnabled = true
|
|
server.webUIInterface = "browser" # "browser" or "electron"
|
|
server.electronPath = ""
|
|
server.webUIChannel = "stable" # "bundled" (the version bundled with the server release), "stable" or "preview" - the webUI version that should be used
|
|
server.webUIUpdateCheckInterval = 23 # time in hours - 0 to disable auto update - range: 1 <= n < 24 - default 23 hours - how often the server should check for webUI updates
|
|
|
|
# downloader
|
|
server.downloadAsCbz = false
|
|
server.downloadsPath = ""
|
|
server.autoDownloadNewChapters = false # if new chapters that have been retrieved should get automatically downloaded
|
|
server.excludeEntryWithUnreadChapters = true # ignore automatic chapter downloads of entries with unread chapters
|
|
server.autoDownloadNewChaptersLimit = 0 # 0 to disable it - how many unread downloaded chapters should be available - if the limit is reached, new chapters won't be downloaded automatically. this limit will also be applied to the auto download of new chapters on an update
|
|
server.autoDownloadIgnoreReUploads = false # decides if re-uploads should be ignored during auto download of new chapters
|
|
server.downloadConversions = {}
|
|
# map input mime type to conversion information, or "default" for others
|
|
# server.downloadConversions."image/webp" = {
|
|
# target = "image/jpeg" # image type to convert to
|
|
# compressionLevel = 0.8 # quality in range [0,1], leave away to use default compression
|
|
# }
|
|
|
|
# extension repos
|
|
server.extensionRepos = [
|
|
# an example: https://github.com/MY_ACCOUNT/MY_REPO/tree/repo
|
|
]
|
|
|
|
# requests
|
|
server.maxSourcesInParallel = 6 # range: 1 <= n <= 20 - default: 6 - sets how many sources can do requests (updates, downloads) in parallel. updates/downloads are grouped by source and all mangas of a source are updated/downloaded synchronously
|
|
|
|
# updater
|
|
server.excludeUnreadChapters = true
|
|
server.excludeNotStarted = true
|
|
server.excludeCompleted = true
|
|
server.globalUpdateInterval = 12 # time in hours - 0 to disable it - (doesn't have to be full hours e.g. 12.5) - range: 6 <= n < ∞ - default: 12 hours - interval in which the global update will be automatically triggered
|
|
server.updateMangas = false # if the mangas should be updated along with the chapter list during a library/category update
|
|
|
|
# Authentication
|
|
server.authMode = "none" # none, basic_auth, simple_login or ui_login
|
|
server.authUsername = ""
|
|
server.authPassword = ""
|
|
server.jwtAudience = "suwayomi-server-api"
|
|
server.jwtTokenExpiry = "5m"
|
|
server.jwtRefreshExpiry = "60d"
|
|
|
|
# misc
|
|
server.debugLogsEnabled = false
|
|
server.systemTrayEnabled = true
|
|
|
|
# backup
|
|
server.backupPath = ""
|
|
server.backupTime = "00:00" # range: hour: 0-23, minute: 0-59 - default: "00:00" - time of day at which the automated backup should be triggered
|
|
server.backupInterval = 1 # time in days - 0 to disable it - range: 1 <= n < ∞ - default: 1 day - interval in which the server will automatically create a backup
|
|
server.backupTTL = 14 # time in days - 0 to disable it - range: 1 <= n < ∞ - default: 14 days - how long backup files will be kept before they will get deleted
|
|
|
|
# local source
|
|
server.localSourcePath = ""
|
|
|
|
# Cloudflare bypass
|
|
server.flareSolverrEnabled = false
|
|
server.flareSolverrUrl = "http://localhost:8191"
|
|
server.flareSolverrTimeout = 60 # time in seconds
|
|
server.flareSolverrSessionName = "suwayomi"
|
|
server.flareSolverrSessionTtl = 15 # time in minutes
|
|
server.flareSolverrAsResponseFallback = false
|
|
|
|
# OPDS
|
|
server.opdsItemsPerPage = 50 # Range (10 - 5000)
|
|
server.opdsEnablePageReadProgress = true
|
|
server.opdsMarkAsReadOnDownload = false
|
|
server.opdsShowOnlyUnreadChapters = false
|
|
server.opdsShowOnlyDownloadedChapters = false
|
|
server.opdsChapterSortOrder = "DESC" # "ASC", "DESC"
|