diff --git a/package-lock.json b/package-lock.json index 09feb6e2..b6a9868c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -186,6 +186,7 @@ "tar-fs": "^2.1.1", "tar-stream": "^2.2.0", "terser-webpack-plugin": "^5.1.1", + "tldts": "^5.7.2", "ts-jest": "^26.5.0", "ts-node-dev": "^1.1.1", "tsconfig-paths": "^3.9.0", @@ -22360,6 +22361,24 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "dev": true }, + "node_modules/tldts": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-5.7.2.tgz", + "integrity": "sha512-fDgg3TD8uETU/713Vv/wB+TJHY5xjU+hHQcRynExe7bI9xUJLiltyVP2L6JMO1UlvzpCo313WhI73IVfY0s9rw==", + "dev": true, + "dependencies": { + "tldts-core": "^5.7.2" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-5.7.2.tgz", + "integrity": "sha512-lZyNJhui/CQbQ/NmDEpod8BvNRi28wBofotWLK3WudJETZcridgzIikHbGedVhBr1MBvq+ZVO3EmFwe1XfqpVg==", + "dev": true + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -41799,6 +41818,21 @@ "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", "dev": true }, + "tldts": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-5.7.2.tgz", + "integrity": "sha512-fDgg3TD8uETU/713Vv/wB+TJHY5xjU+hHQcRynExe7bI9xUJLiltyVP2L6JMO1UlvzpCo313WhI73IVfY0s9rw==", + "dev": true, + "requires": { + "tldts-core": "^5.7.2" + } + }, + "tldts-core": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-5.7.2.tgz", + "integrity": "sha512-lZyNJhui/CQbQ/NmDEpod8BvNRi28wBofotWLK3WudJETZcridgzIikHbGedVhBr1MBvq+ZVO3EmFwe1XfqpVg==", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", diff --git a/package.json b/package.json index acd8187b..c85dce6e 100644 --- a/package.json +++ b/package.json @@ -209,6 +209,7 @@ "tar-fs": "^2.1.1", "tar-stream": "^2.2.0", "terser-webpack-plugin": "^5.1.1", + "tldts": "^5.7.2", "ts-jest": "^26.5.0", "ts-node-dev": "^1.1.1", "tsconfig-paths": "^3.9.0", diff --git a/server/util/torrentPropertiesUtil.ts b/server/util/torrentPropertiesUtil.ts index 0179dd1a..3affce02 100644 --- a/server/util/torrentPropertiesUtil.ts +++ b/server/util/torrentPropertiesUtil.ts @@ -1,3 +1,5 @@ +import {getDomain} from 'tldts'; + import type {TorrentProperties} from '../../shared/types/Torrent'; export const hasTorrentFinished = ( @@ -22,15 +24,10 @@ export const hasTorrentFinished = ( export const getDomainsFromURLs = (urls: Array): Array => { return [ ...urls.reduce((memo: Set, url: string) => { - const fqdn = url.split('/')[2]?.split(':')[0]; + const domain = getDomain(url); - if (fqdn?.length > 0) { - const domainLastParts = fqdn.split('.').slice(-2); - - // ignore IP addresses. RFC 952: first char of a valid TLD must be an alpha char - if (!'0123456789'.includes(domainLastParts[domainLastParts.length - 1]?.[0])) { - memo.add(domainLastParts.join('.')); - } + if (domain != null) { + memo.add(domain); } return memo;