diff --git a/komga/src/main/kotlin/org/gotson/komga/domain/model/KomgaUser.kt b/komga/src/main/kotlin/org/gotson/komga/domain/model/KomgaUser.kt index 83e2a403..9d107325 100644 --- a/komga/src/main/kotlin/org/gotson/komga/domain/model/KomgaUser.kt +++ b/komga/src/main/kotlin/org/gotson/komga/domain/model/KomgaUser.kt @@ -57,6 +57,8 @@ class KomgaUser( field = if (roles.contains(UserRoles.ADMIN)) true else value } + fun isAdmin() = roles.contains(UserRoles.ADMIN) + fun canAccessBook(book: Book): Boolean { return sharedAllLibraries || sharedLibraries.any { it.id == book.series.library.id } } diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/BookController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/BookController.kt index 30bbb250..0ce1f875 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/BookController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/BookController.kt @@ -85,7 +85,7 @@ class BookController( } else { bookRepository.findAll(pageRequest) } - }.map { it.toDto() } + }.map { it.toDto(includeFullUrl = principal.user.isAdmin()) } } @@ -104,7 +104,7 @@ class BookController( bookRepository.findAll(pageRequest) } else { bookRepository.findBySeriesLibraryIn(principal.user.sharedLibraries, pageRequest) - }.map { it.toDto() } + }.map { it.toDto(includeFullUrl = principal.user.isAdmin()) } } @@ -123,7 +123,7 @@ class BookController( ): BookDto = bookRepository.findByIdOrNull(bookId)?.let { if (!principal.user.canAccessBook(it)) throw ResponseStatusException(HttpStatus.UNAUTHORIZED) - it.toDto() + it.toDto(includeFullUrl = principal.user.isAdmin()) } ?: throw ResponseStatusException(HttpStatus.NOT_FOUND) diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/Dto.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/Dto.kt index d0d25fc9..334bb8c0 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/Dto.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/Dto.kt @@ -1,6 +1,7 @@ package org.gotson.komga.interfaces.web.rest import com.fasterxml.jackson.annotation.JsonFormat +import org.apache.commons.io.FilenameUtils import org.gotson.komga.domain.model.Book import org.gotson.komga.domain.model.Series import java.time.LocalDateTime @@ -17,11 +18,11 @@ data class SeriesDto( val booksCount: Int ) -fun Series.toDto() = SeriesDto( +fun Series.toDto(includeUrl: Boolean) = SeriesDto( id = id, libraryId = library.id, name = name, - url = url.toString(), + url = if (includeUrl) url.toURI().path else "", lastModified = lastModifiedDate?.toUTC(), booksCount = books.size ) @@ -45,12 +46,12 @@ data class BookMetadataDto( val pagesCount: Int ) -fun Book.toDto() = +fun Book.toDto(includeFullUrl: Boolean) = BookDto( id = id, seriesId = series.id, name = name, - url = url.toURI().path, + url = if (includeFullUrl) url.toURI().path else FilenameUtils.getName(url.toURI().path), number = number, lastModified = lastModifiedDate?.toUTC(), sizeBytes = fileSize, diff --git a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/SeriesController.kt b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/SeriesController.kt index 0b4d2e23..b5932068 100644 --- a/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/SeriesController.kt +++ b/komga/src/main/kotlin/org/gotson/komga/interfaces/web/rest/SeriesController.kt @@ -76,7 +76,7 @@ class SeriesController( } else { seriesRepository.findAll(pageRequest) } - }.map { it.toDto() } + }.map { it.toDto(includeUrl = principal.user.isAdmin()) } } // all updated series, whether newly added or updated @@ -95,7 +95,7 @@ class SeriesController( seriesRepository.findAll(pageRequest) } else { seriesRepository.findByLibraryIn(principal.user.sharedLibraries, pageRequest) - }.map { it.toDto() } + }.map { it.toDto(includeUrl = principal.user.isAdmin()) } } // new series only, doesn't contain existing updated series @@ -114,7 +114,7 @@ class SeriesController( seriesRepository.findAll(pageRequest) } else { seriesRepository.findByLibraryIn(principal.user.sharedLibraries, pageRequest) - }.map { it.toDto() } + }.map { it.toDto(includeUrl = principal.user.isAdmin()) } } // updated series only, doesn't contain new series @@ -133,7 +133,7 @@ class SeriesController( seriesRepository.findRecentlyUpdated(pageRequest) } else { seriesRepository.findRecentlyUpdatedByLibraryIn(principal.user.sharedLibraries, pageRequest) - }.map { it.toDto() } + }.map { it.toDto(includeUrl = principal.user.isAdmin()) } } @GetMapping("{seriesId}") @@ -143,7 +143,7 @@ class SeriesController( ): SeriesDto = seriesRepository.findByIdOrNull(id)?.let { if (!principal.user.canAccessSeries(it)) throw ResponseStatusException(HttpStatus.UNAUTHORIZED) - it.toDto() + it.toDto(includeUrl = principal.user.isAdmin()) } ?: throw ResponseStatusException(HttpStatus.NOT_FOUND) @GetMapping(value = ["{seriesId}/thumbnail"], produces = [MediaType.IMAGE_JPEG_VALUE]) @@ -186,6 +186,6 @@ class SeriesController( bookRepository.findAllByMetadataStatusAndSeriesId(BookMetadata.Status.READY, id, pageRequest) } else { bookRepository.findAllBySeriesId(id, pageRequest) - }.map { it.toDto() } + }.map { it.toDto(includeFullUrl = principal.user.isAdmin()) } } }