Self-hosted audiobook and podcast server
125 matches across 8 categories. Click a row to expand file-level details.
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | test/server/utils/ffmpegHelpers.test.js | 15 | artist: 'John Doe', |
| LOW | test/server/utils/parsers/parseNameString.test.js | 24 | expect(result.names).to.deep.equal(['John Smith', 'Jane Doe']) |
| LOW | test/server/utils/parsers/parseNameString.test.js | 29 | expect(result.names).to.deep.equal(['John Smith', 'Jane Doe']) |
| LOW | test/server/utils/parsers/parseNameString.test.js | 34 | expect(result.names).to.deep.equal(['John Smith', 'Jane Doe', 'John Doe']) |
| LOW | test/server/utils/parsers/parseNameString.test.js | 34 | expect(result.names).to.deep.equal(['John Smith', 'Jane Doe', 'John Doe']) |
| LOW | test/server/utils/parsers/parseNameString.test.js | 39 | expect(result.names).to.deep.equal(['John Smith', 'Jane Doe']) |
| LOW | test/server/utils/parsers/parseNameString.test.js | 44 | expect(result.names).to.deep.equal(['John Smith', 'Jane Doe']) |
| LOW | test/server/finders/BookFinder.test.js | 405 | const bookResults = [{ duration: 10, title: 'The Great Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 407 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 416 | const bookResults = [{ duration: 21, title: 'The Great Novel', author: 'John Doe' }] // 21 min, diff = 11 min |
| LOW | test/server/finders/BookFinder.test.js | 418 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 427 | const bookResults = [{ duration: 16, title: 'The Great Novel', author: 'John Doe' }] // 16 min, diff = 6 min |
| LOW | test/server/finders/BookFinder.test.js | 429 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 438 | const bookResults = [{ duration: 14, title: 'The Great Novel', author: 'John Doe' }] // 14 min, diff = 4 min |
| LOW | test/server/finders/BookFinder.test.js | 440 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 449 | const bookResults = [{ duration: 11, title: 'The Great Novel', author: 'John Doe' }] // 11 min, diff = 1 min |
| LOW | test/server/finders/BookFinder.test.js | 451 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 460 | const bookResults = [{ duration: 10, title: 'The Great Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 462 | const results = await bookFinder.search({ media: {} }, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 469 | const bookResults = [{ title: 'The Great Novel', author: 'John Doe' }] // No duration in book |
| LOW | test/server/finders/BookFinder.test.js | 471 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 478 | const bookResults = [{ duration: 10, title: 'Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 484 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'Novel Ex', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 508 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 515 | const bookResults = [{ duration: 10, title: 'The Great Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 524 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 533 | const bookResults = [{ duration: 10, title: 'The Great Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 542 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 554 | const bookResults = [{ duration: 10, title: 'The Great Novel', subtitle: 'A Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 556 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel: A Novel', 'John |
| LOW | test/server/finders/BookFinder.test.js | 561 | const bookResults = [{ duration: 10, title: 'The Great Novel', subtitle: 'A Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 563 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | test/server/finders/BookFinder.test.js | 569 | const bookResults = [{ duration: 10, title: 'The Great Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 572 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel - A Novel', 'Jo |
| LOW | test/server/finders/BookFinder.test.js | 577 | const bookResults = [{ duration: 10, title: 'The Great Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 589 | const bookResults = [{ title: 'The Great Novel', author: 'John Doe' }] |
| LOW | test/server/finders/BookFinder.test.js | 591 | const results = await bookFinder.search(libraryItemPerfectDuration, provider, 'The Great Novel', 'John Doe') |
| LOW | client/cypress/tests/components/cards/AuthorCard.cy.js | 10 | name: 'John Doe', |
| LOW | client/cypress/tests/components/cards/AuthorCard.cy.js | 79 | .and('have.text', 'John Doe') |
| LOW | client/cypress/tests/components/cards/AuthorCard.cy.js | 137 | $post: cy.stub().resolves({ updated: false, author: { name: 'John Doe' } }) |
| LOW | client/cypress/tests/components/cards/AuthorCard.cy.js | 159 | $post: cy.stub().resolves({ updated: true, author: { name: 'John Doe' } }) |
| LOW | client/cypress/tests/components/cards/AuthorCard.cy.js | 181 | $post: cy.stub().resolves({ updated: true, author: { name: 'John Doe', imagePath: 'path/to/image' } }) |
| LOW | …ient/cypress/tests/components/cards/NarratorCard.cy.js | 5 | name: 'John Doe', |
| LOW | …ient/cypress/tests/components/cards/NarratorCard.cy.js | 36 | cy.get('&name').should('have.text', 'John Doe') |
| LOW | …ient/cypress/tests/components/cards/NarratorCard.cy.js | 47 | let propsData = { narrator: { name: 'John Doe', numBooks: 1 }, width: 200, height: 150 } |
| LOW | client/cypress/tests/components/cards/ItemSlider.cy.js | 8 | { name: 'John Doe', numBooks: 5 }, |
| LOW | client/cypress/tests/components/cards/ItemSlider.cy.js | 9 | { name: 'Jane Doe', numBooks: 3 }, |
| LOW | client/cypress/tests/components/cards/ItemSlider.cy.js | 14 | { id: 1, name: 'John Doe', numBooks: 5 }, |
| LOW | client/cypress/tests/components/cards/ItemSlider.cy.js | 15 | { id: 2, name: 'Jane Doe', numBooks: 3 }, |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | docker-compose.yml | 1 | ### EXAMPLE DOCKER COMPOSE ### |
| LOW | docker-compose.yml | 21 | # you are running ABS on |
| LOW | server/providers/FantLab.js | 1 | const axios = require('axios') |
| LOW | server/libs/async/index.js | 1 | // |
| LOW | server/libs/umzug/storage/json.js | 61 | //# sourceMappingURL=json.js.map |
| LOW | …ver/libs/archiver/archiverUtils/stringDecoder/index.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | server/libs/archiver/archiverUtils/minimatch/index.js | 101 | // a{b,c}d -> abd acd |
| LOW | server/libs/archiver/archiverUtils/minimatch/index.js | 281 | if (p === false) return false |
| LOW | server/libs/archiver/archiverUtils/minimatch/index.js | 301 | // - matchOne(b/x/y/z/c, b/**/c) |
| LOW | server/libs/archiver/archiverUtils/minimatch/index.js | 381 | // If the file ends in /, then it can only match a |
| LOW | server/libs/archiver/archiverUtils/minimatch/index.js | 601 | // a right bracket shall lose its special |
| LOW | …r/libs/archiver/archiverUtils/readableStream/stream.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …erUtils/readableStream/internal/streams/passthrough.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …hiverUtils/readableStream/internal/streams/readable.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …hiverUtils/readableStream/internal/streams/readable.js | 401 | // 2. If that resulting state will trigger a _read, then call _read. |
| LOW | …hiverUtils/readableStream/internal/streams/readable.js | 541 | // it's in progress. |
| LOW | …hiverUtils/readableStream/internal/streams/readable.js | 561 | // - No data in the buffer, and the stream is in flowing mode. In this mode |
| LOW | …hiverUtils/readableStream/internal/streams/writable.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …iverUtils/readableStream/internal/streams/transform.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …iverUtils/readableStream/internal/streams/transform.js | 21 | // a transform stream is a readable/writable stream where you do |
| LOW | …iverUtils/readableStream/internal/streams/transform.js | 41 | // _read(n) is called, it transforms the queued up data, calling the |
| LOW | …rchiverUtils/readableStream/internal/streams/duplex.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | server/libs/archiver/archiverUtils/glob/index.js | 1 | // Approach: |
| LOW | server/libs/archiver/archiverUtils/glob/index.js | 21 | // // by pruning it out, and testing the resulting pattern |
| LOW | server/libs/archiver/archiverUtils/fsRealpath/old.js | 1 | /* istanbul ignore file - tested in node */ |
| LOW | …/lazystream/readable-stream/lib/_stream_passthrough.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …ls/lazystream/readable-stream/lib/_stream_transform.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …ls/lazystream/readable-stream/lib/_stream_transform.js | 21 | |
| LOW | …ls/lazystream/readable-stream/lib/_stream_transform.js | 41 | // In a transform stream, the written data is placed in a buffer. When |
| LOW | …Utils/lazystream/readable-stream/lib/_stream_duplex.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …ils/lazystream/readable-stream/lib/_stream_readable.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …ils/lazystream/readable-stream/lib/_stream_readable.js | 401 | } |
| LOW | …ils/lazystream/readable-stream/lib/_stream_writable.js | 1 | // Copyright Joyent, Inc. and other Node contributors. |
| LOW | …ils/lazystream/readable-stream/lib/_stream_writable.js | 141 | // when 'finish' is emitted |
| LOW | server/libs/libarchive/wasm-module.js | 161 | // void * archive_open( const void * buffer, size_t buffer_size) |
| LOW | server/libs/sanitizeHtml/index.js | 81 | |
| LOW | server/libs/sanitizeHtml/index.js | 381 | // Chrome accepts \ as a substitute for / in the // at the |
| LOW | server/libs/sanitizeHtml/index.js | 421 | } |
| LOW | server/libs/sanitizeHtml/index.js | 441 | // if (!parsed.length) { |
| LOW | server/libs/sanitizeHtml/index.js | 481 | if (a === 'style') { |
| LOW | server/libs/fsExtra/remove/rimraf.js | 61 | // Two possible strategies. |
| LOW | server/finders/BookFinder.js | 461 | */ |
| LOW | client/cypress/support/component.js | 1 | // *********************************************************** |
| LOW | client/cypress/support/commands.js | 1 | // *********************************************** |
| Severity | File | Line | Snippet |
|---|---|---|---|
| CRITICAL | client/components/cards/LazyBookCard.vue | 549 | subitems: this.store.state.libraries.ereaderDevices.map((d) => { |
| CRITICAL | client/static/libs/marked/index.js | 6 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?de |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | server/managers/MigrationManager.js | 118 | // Step 3: If migration fails, save the failed original and restore the backup |
| LOW | server/utils/scandir.js | 49 | // Step 1: Filter out non-book-media files in root dir (with depth of 0) |
| LOW | server/utils/scandir.js | 54 | // Step 2: Separate media files and other files |
| LOW | server/utils/scandir.js | 68 | // Step 3: Group media files (or non-media files if includeNonMediaFiles is true) in library items |
| LOW | server/utils/scandir.js | 102 | // Step 4: Add other files into library item groups |
| LOW | server/utils/queries/libraryItemsBookFilters.js | 851 | // Step 1: Get the first book of every series that hasnt been started yet |
| LOW | server/utils/queries/libraryItemsBookFilters.js | 995 | // Step 3: Map books to library items |
| LOW | …ver/libs/archiver/archiverUtils/stringDecoder/index.js | 233 | // number of bytes available, we need to check if we end on a leading/high |
| LOW | …hiverUtils/readableStream/internal/streams/readable.js | 840 | // We need to check if there is someone still listening to |
| LOW | …hiverUtils/readableStream/internal/streams/readable.js | 858 | // We need to check if there is someone still listening to |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | server/utils/podcastUtils.js | 78 | function extractFirstArrayItemString(json, key) { |
| LOW | server/utils/ffmpegHelpers.js | 302 | async function addCoverAndMetadataToFile(audioFilePath, coverFilePath, metadataFilePath, track, mimeType, progressCB = n |
| LOW | server/utils/scandir.js | 48 | function groupFileItemsIntoLibraryItemDirs(mediaType, fileItems, audiobooksOnly, includeNonMediaFiles = false) { |
| LOW | server/utils/parsers/parseOverdriveMediaMarkers.js | 6 | function cleanOverdriveMediaMarkers(overdriveMediaMarkers) { |
| LOW | server/utils/parsers/parseOverdriveMediaMarkers.js | 63 | function objectValuesArrayToString(arrayOfObjects) { |
| LOW | server/libs/nodeStreamZip/index.js | 224 | function readCentralDirectoryComplete() { |
| LOW | server/libs/requestIp/index.js | 16 | function getClientIpFromXForwardedFor(value) { |
| LOW | server/libs/umzug/storage/mongodb.js | 4 | function isMongoDBCollectionOptions(arg) { |
| LOW | …hiverUtils/readableStream/internal/streams/readable.js | 756 | return function pipeOnDrainFunctionResult() { |
| LOW | server/libs/libarchive/wasm-libarchive.js | 11 | var Module = typeof libarchive !== "undefined" ? libarchive : {}; var moduleOverrides = {}; var key; for (key in M |
| LOW | server/controllers/LibraryItemController.js | 48 | function ensureUserCanAccessLibraryItemsForBatch(req, res, libraryItems) { |
| LOW | server/scanner/LibraryScanner.js | 661 | async function findLibraryItemByItemToItemInoMatch(libraryId, fullPath) { |
| LOW | server/scanner/LibraryScanner.js | 672 | async function findLibraryItemByItemToFileInoMatch(libraryId, fullPath, isSingleMedia) { |
| LOW | server/scanner/LibraryScanner.js | 694 | async function findLibraryItemByFileToItemInoMatch(libraryId, fullPath, isSingleMedia, itemFiles) { |
| LOW | client/components/ui/VueTrix.vue | 48 | function enableBreakParagraphOnReturn() { |
| LOW | client/static/libarchive/wasm-gen/libarchive.js | 8 | var Module = typeof libarchive !== "undefined" ? libarchive : {}; var moduleOverrides = {}; var key; for (key in M |
| Severity | File | Line | Snippet |
|---|---|---|---|
| HIGH | server/libs/libarchive/wasm-module.js | 149 | print(...text) { |
| Severity | File | Line | Snippet |
|---|---|---|---|
| MEDIUM | server/utils/parsers/parseOverdriveMediaMarkers.js | 112 | // this allows us to leverage the individual track durations when calculating the start times of chapters in track |
| Severity | File | Line | Snippet |
|---|---|---|---|
| LOW | server/libs/libarchive/wasm-libarchive.js | 11 | var Module = typeof libarchive !== "undefined" ? libarchive : {}; var moduleOverrides = {}; var key; for (key in M |
| LOW | client/static/libarchive/wasm-gen/libarchive.js | 8 | var Module = typeof libarchive !== "undefined" ? libarchive : {}; var moduleOverrides = {}; var key; for (key in M |