mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-02-01 00:18:14 +01:00
Move pagination limit/page query param validation to middleware & check for positive integer
This commit is contained in:
parent
8ba17db877
commit
64b78b5822
@ -479,8 +479,6 @@ export default {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
async fetchAllAuthors() {
|
async fetchAllAuthors() {
|
||||||
const authors = []
|
|
||||||
|
|
||||||
// fetch all authors from the server, in the order that they are currently displayed
|
// fetch all authors from the server, in the order that they are currently displayed
|
||||||
const response = await this.$axios.$get(`/api/libraries/${this.currentLibraryId}/authors?sort=${this.settings.authorSortBy}&desc=${this.settings.authorSortDesc}`)
|
const response = await this.$axios.$get(`/api/libraries/${this.currentLibraryId}/authors?sort=${this.settings.authorSortBy}&desc=${this.settings.authorSortDesc}`)
|
||||||
return response.authors
|
return response.authors
|
||||||
|
@ -493,8 +493,8 @@ class LibraryController {
|
|||||||
const payload = {
|
const payload = {
|
||||||
results: [],
|
results: [],
|
||||||
total: undefined,
|
total: undefined,
|
||||||
limit: req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 0,
|
limit: req.query.limit,
|
||||||
page: req.query.page && !isNaN(req.query.page) ? Number(req.query.page) : 0,
|
page: req.query.page,
|
||||||
sortBy: req.query.sort,
|
sortBy: req.query.sort,
|
||||||
sortDesc: req.query.desc === '1',
|
sortDesc: req.query.desc === '1',
|
||||||
filterBy: req.query.filter,
|
filterBy: req.query.filter,
|
||||||
@ -504,13 +504,6 @@ class LibraryController {
|
|||||||
include: include.join(',')
|
include: include.join(',')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Number.isInteger(payload.limit) || payload.limit < 0) {
|
|
||||||
return res.status(400).send('Invalid request. Limit must be a positive integer')
|
|
||||||
}
|
|
||||||
if (!Number.isInteger(payload.page) || payload.page < 0) {
|
|
||||||
return res.status(400).send('Invalid request. Page must be a positive integer')
|
|
||||||
}
|
|
||||||
|
|
||||||
payload.offset = payload.page * payload.limit
|
payload.offset = payload.page * payload.limit
|
||||||
|
|
||||||
// TODO: Temporary way of handling collapse sub-series. Either remove feature or handle through sql queries
|
// TODO: Temporary way of handling collapse sub-series. Either remove feature or handle through sql queries
|
||||||
@ -602,8 +595,8 @@ class LibraryController {
|
|||||||
const payload = {
|
const payload = {
|
||||||
results: [],
|
results: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
limit: req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 0,
|
limit: req.query.limit,
|
||||||
page: req.query.page && !isNaN(req.query.page) ? Number(req.query.page) : 0,
|
page: req.query.page,
|
||||||
sortBy: req.query.sort,
|
sortBy: req.query.sort,
|
||||||
sortDesc: req.query.desc === '1',
|
sortDesc: req.query.desc === '1',
|
||||||
filterBy: req.query.filter,
|
filterBy: req.query.filter,
|
||||||
@ -674,8 +667,8 @@ class LibraryController {
|
|||||||
const payload = {
|
const payload = {
|
||||||
results: [],
|
results: [],
|
||||||
total: 0,
|
total: 0,
|
||||||
limit: req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 0,
|
limit: req.query.limit,
|
||||||
page: req.query.page && !isNaN(req.query.page) ? Number(req.query.page) : 0,
|
page: req.query.page,
|
||||||
sortBy: req.query.sort,
|
sortBy: req.query.sort,
|
||||||
sortDesc: req.query.desc === '1',
|
sortDesc: req.query.desc === '1',
|
||||||
filterBy: req.query.filter,
|
filterBy: req.query.filter,
|
||||||
@ -710,8 +703,8 @@ class LibraryController {
|
|||||||
const payload = {
|
const payload = {
|
||||||
results: [],
|
results: [],
|
||||||
total: playlistsForUser.length,
|
total: playlistsForUser.length,
|
||||||
limit: req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 0,
|
limit: req.query.limit,
|
||||||
page: req.query.page && !isNaN(req.query.page) ? Number(req.query.page) : 0
|
page: req.query.page
|
||||||
}
|
}
|
||||||
|
|
||||||
if (payload.limit) {
|
if (payload.limit) {
|
||||||
@ -742,7 +735,7 @@ class LibraryController {
|
|||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
async getUserPersonalizedShelves(req, res) {
|
async getUserPersonalizedShelves(req, res) {
|
||||||
const limitPerShelf = req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) || 10 : 10
|
const limitPerShelf = req.query.limit || 10
|
||||||
const include = (req.query.include || '')
|
const include = (req.query.include || '')
|
||||||
.split(',')
|
.split(',')
|
||||||
.map((v) => v.trim().toLowerCase())
|
.map((v) => v.trim().toLowerCase())
|
||||||
@ -815,7 +808,7 @@ class LibraryController {
|
|||||||
return res.status(400).send('Invalid request. Query param "q" must be a string')
|
return res.status(400).send('Invalid request. Query param "q" must be a string')
|
||||||
}
|
}
|
||||||
|
|
||||||
const limit = req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 12
|
const limit = req.query.limit || 12
|
||||||
const query = asciiOnlyToLowerCase(req.query.q.trim())
|
const query = asciiOnlyToLowerCase(req.query.q.trim())
|
||||||
|
|
||||||
const matches = await libraryItemFilters.search(req.user, req.library, query, limit)
|
const matches = await libraryItemFilters.search(req.user, req.library, query, limit)
|
||||||
@ -873,7 +866,7 @@ class LibraryController {
|
|||||||
* @param {Response} res
|
* @param {Response} res
|
||||||
*/
|
*/
|
||||||
async getAuthors(req, res) {
|
async getAuthors(req, res) {
|
||||||
const isPaginated = req.query.limit && !isNaN(req.query.limit) && req.query.page && !isNaN(req.query.page)
|
const isPaginated = req.query.limit && !isNaN(req.query.limit) && !isNaN(req.query.page)
|
||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
results: [],
|
results: [],
|
||||||
@ -1147,8 +1140,8 @@ class LibraryController {
|
|||||||
|
|
||||||
const payload = {
|
const payload = {
|
||||||
episodes: [],
|
episodes: [],
|
||||||
limit: req.query.limit && !isNaN(req.query.limit) ? Number(req.query.limit) : 0,
|
limit: req.query.limit,
|
||||||
page: req.query.page && !isNaN(req.query.page) ? Number(req.query.page) : 0
|
page: req.query.page
|
||||||
}
|
}
|
||||||
|
|
||||||
const offset = payload.page * payload.limit
|
const offset = payload.page * payload.limit
|
||||||
@ -1251,6 +1244,17 @@ class LibraryController {
|
|||||||
return res.status(404).send('Library not found')
|
return res.status(404).send('Library not found')
|
||||||
}
|
}
|
||||||
req.library = library
|
req.library = library
|
||||||
|
|
||||||
|
// Ensure pagination query params are positive integers
|
||||||
|
for (const queryKey of ['limit', 'page']) {
|
||||||
|
if (req.query[queryKey] !== undefined) {
|
||||||
|
req.query[queryKey] = !isNaN(req.query[queryKey]) ? Number(req.query[queryKey]) : 0
|
||||||
|
if (!Number.isInteger(req.query[queryKey]) || req.query[queryKey] < 0) {
|
||||||
|
return res.status(400).send(`Invalid request. ${queryKey} must be a positive integer`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
next()
|
next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user