From ef1d49b94ea04bf7ca8a80994b1257a3674df247 Mon Sep 17 00:00:00 2001 From: LitoMore Date: Wed, 18 Sep 2024 04:17:47 +0800 Subject: [PATCH] Avoid raw asset URLs (#11785) --- _data/simple-icons.json | 12 +++++----- scripts/lint/ourlint.js | 52 ++++++++++++++++++++++++++++++++--------- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/_data/simple-icons.json b/_data/simple-icons.json index 32bc3fddb..420a92f1f 100644 --- a/_data/simple-icons.json +++ b/_data/simple-icons.json @@ -2796,7 +2796,7 @@ { "title": "Carrefour", "hex": "004E9F", - "source": "https://upload.wikimedia.org/wikipedia/commons/5/5b/Carrefour_logo.svg" + "source": "https://en.wikipedia.org/wiki/File:Carrefour_logo_no_tag.svg" }, { "title": "Carto", @@ -3276,7 +3276,7 @@ { "title": "Coca Cola", "hex": "D00013", - "source": "https://upload.wikimedia.org/wikipedia/commons/c/ce/Coca-Cola_logo.svg" + "source": "https://commons.wikimedia.org/wiki/File:Coca-Cola_logo.svg" }, { "title": "Cockpit", @@ -3941,12 +3941,12 @@ { "title": "DaisyUI", "hex": "5A0EF8", - "source": "https://raw.githubusercontent.com/saadeghi/files/main/daisyui/logo-4.svg" + "source": "https://github.com/saadeghi/files/blob/5c82a1f4428b7c0af6ecfe921a424ebc9d92dc2c/daisyui/logo-4.svg" }, { "title": "Dapr", "hex": "0D2192", - "source": "https://raw.githubusercontent.com/dapr/dapr/18575823c74318c811d6cd6f57ffac76d5debe93/img/dapr_logo.svg" + "source": "https://github.com/dapr/dapr/blob/18575823c74318c811d6cd6f57ffac76d5debe93/img/dapr_logo.svg" }, { "title": "Dark Reader", @@ -5860,7 +5860,7 @@ { "title": "Game & Watch", "hex": "000000", - "source": "https://upload.wikimedia.org/wikipedia/commons/4/41/Game_and_watch_logo.svg" + "source": "https://commons.wikimedia.org/wiki/File:Game_and_watch_logo.svg" }, { "title": "Game Developer", @@ -6492,7 +6492,7 @@ { "title": "Google Maps", "hex": "4285F4", - "source": "https://upload.wikimedia.org/wikipedia/commons/a/a9/Google_Maps_icon.svg" + "source": "https://commons.wikimedia.org/wiki/File:Google_Maps_icon.svg" }, { "title": "Google Marketing Platform", diff --git a/scripts/lint/ourlint.js b/scripts/lint/ourlint.js index e7dd1a454..d0df76cff 100644 --- a/scripts/lint/ourlint.js +++ b/scripts/lint/ourlint.js @@ -11,6 +11,7 @@ * @typedef {IconData[]} IconsData */ +import path from 'node:path'; import process from 'node:process'; import fakeDiff from 'fake-diff'; import {collator, getIconsDataString, normalizeNewlines} from '../../sdk.mjs'; @@ -88,13 +89,27 @@ const TESTS = { checkUrl(data) { /** * Check if an URL has a redundant trailing slash. - * @param {string} url URL to check + * @param {URL} $url URL instance + * @param {string} url Original URL string * @returns {boolean} Whether the URL has a redundant trailing slash */ - const hasRedundantTrailingSlash = (url) => { - const {origin} = new global.URL(url); - return /^\/+$/.test(url.replace(origin, '')); - }; + const hasRedundantTrailingSlash = ($url, url) => url === $url.origin + '/'; + + /** + * Check if an URL is static wikimedia asset URL. + * @param {URL} $url URL instance + * @returns {boolean} Whether the URL is static wikimedia asset URL + */ + const isStaticWikimediaAssetUrl = ($url) => + $url.hostname === 'upload.wikimedia.org'; + + /** + * Check if an URL is raw GitHub asset URL. + * @param {string} $url URL instance + * @returns {boolean} Whether the URL is raw GitHub asset URL + */ + const isRawGithubAssetUrl = ($url) => + $url.hostname === 'raw.githubusercontent.com'; const allUrlFields = [ ...new Set( @@ -117,14 +132,29 @@ const TESTS = { ), ]; - const invalidUrls = allUrlFields.filter((url) => - hasRedundantTrailingSlash(url), - ); + const invalidUrls = []; + for (const url of allUrlFields) { + const $url = new global.URL(url); + + if (hasRedundantTrailingSlash($url, url)) { + invalidUrls.push(fakeDiff(url, $url.origin)); + } + + if (isStaticWikimediaAssetUrl($url)) { + const expectedUrl = `https://commons.wikimedia.org/wiki/File:${path.basename($url.pathname)}`; + invalidUrls.push(fakeDiff(url, expectedUrl)); + } + + if (isRawGithubAssetUrl($url)) { + // https://github.com/LitoMore/simple-icons-cdn/blob/main/media/imgcat-screenshot.webp + const [, owner, repo, hash, ...directory] = $url.pathname.split('/'); + const expectedUrl = `https://github.com/${owner}/${repo}/blob/${hash}/${directory.join('/')}`; + invalidUrls.push(fakeDiff(url, expectedUrl)); + } + } if (invalidUrls.length > 0) { - return `Some URLs have a redundant trailing slash:\n\n${invalidUrls.join( - '\n', - )}`; + return `Invalid URLs:\n\n${invalidUrls.join('\n\n')}`; } }, };