Update:Validate ASIN for author, chapter and match requests

This commit is contained in:
advplyr 2024-06-09 13:43:03 -05:00
parent ee501f70ed
commit a018374d26
5 changed files with 72 additions and 45 deletions

View file

@ -9,7 +9,7 @@ const CacheManager = require('../managers/CacheManager')
const CoverManager = require('../managers/CoverManager')
const AuthorFinder = require('../finders/AuthorFinder')
const { reqSupportsWebp } = require('../utils/index')
const { reqSupportsWebp, isValidASIN } = require('../utils/index')
const naturalSort = createNewSortInstance({
comparer: new Intl.Collator(undefined, { numeric: true, sensitivity: 'base' }).compare
@ -252,7 +252,7 @@ class AuthorController {
async match(req, res) {
let authorData = null
const region = req.body.region || 'us'
if (req.body.asin) {
if (req.body.asin && isValidASIN(req.body.asin.toUpperCase?.())) {
authorData = await AuthorFinder.findAuthorByASIN(req.body.asin, region)
} else {
authorData = await AuthorFinder.findAuthorByName(req.body.q, region)

View file

@ -1,12 +1,13 @@
const Logger = require("../Logger")
const Logger = require('../Logger')
const BookFinder = require('../finders/BookFinder')
const PodcastFinder = require('../finders/PodcastFinder')
const AuthorFinder = require('../finders/AuthorFinder')
const MusicFinder = require('../finders/MusicFinder')
const Database = require("../Database")
const Database = require('../Database')
const { isValidASIN } = require('../utils')
class SearchController {
constructor() { }
constructor() {}
async findBooks(req, res) {
const id = req.query.id
@ -37,9 +38,9 @@ class SearchController {
/**
* Find podcast RSS feeds given a term
*
* @param {import('express').Request} req
* @param {import('express').Response} res
*
* @param {import('express').Request} req
* @param {import('express').Response} res
*/
async findPodcasts(req, res) {
const term = req.query.term
@ -63,6 +64,9 @@ class SearchController {
async findChapters(req, res) {
const asin = req.query.asin
if (!isValidASIN(asin.toUpperCase())) {
return res.json({ error: 'Invalid ASIN' })
}
const region = (req.query.region || 'us').toLowerCase()
const chapterData = await BookFinder.findChapters(asin, region)
if (!chapterData) {
@ -78,4 +82,4 @@ class SearchController {
})
}
}
module.exports = new SearchController()
module.exports = new SearchController()