diff --git a/changelog.d/downloader/3129.enhance.rst b/changelog.d/downloader/3129.enhance.rst new file mode 100644 index 000000000..21b5b8394 --- /dev/null +++ b/changelog.d/downloader/3129.enhance.rst @@ -0,0 +1 @@ +Use sanitized url (without HTTP Basic Auth fragments) in `[p]findcog` command. \ No newline at end of file diff --git a/changelog.d/downloader/3129.misc.rst b/changelog.d/downloader/3129.misc.rst new file mode 100644 index 000000000..685ee9daa --- /dev/null +++ b/changelog.d/downloader/3129.misc.rst @@ -0,0 +1 @@ +Add `clean_url` property to :class:`redbot.cogs.downloader.repo_manager.Repo` which contains sanitized repo URL (without HTTP Basic Auth). \ No newline at end of file diff --git a/redbot/cogs/downloader/downloader.py b/redbot/cogs/downloader/downloader.py index be682431a..b12ac7ae2 100644 --- a/redbot/cogs/downloader/downloader.py +++ b/redbot/cogs/downloader/downloader.py @@ -1150,7 +1150,7 @@ class Downloader(commands.Cog): repo_url = ( _("Missing from installed repos") if cog_installable.repo is None - else cog_installable.repo.url + else cog_installable.repo.clean_url ) cog_name = cog_installable.name else: diff --git a/redbot/cogs/downloader/repo_manager.py b/redbot/cogs/downloader/repo_manager.py index 39ee18dce..276e59114 100644 --- a/redbot/cogs/downloader/repo_manager.py +++ b/redbot/cogs/downloader/repo_manager.py @@ -7,6 +7,7 @@ import pkgutil import shlex import shutil import re +import yarl from concurrent.futures import ThreadPoolExecutor from pathlib import Path from subprocess import run as sp_run, PIPE, CompletedProcess @@ -147,6 +148,13 @@ class Repo(RepoJSONMixin): self._loop = loop if loop is not None else asyncio.get_event_loop() + @property + def clean_url(self): + """Sanitized repo URL (with removed HTTP Basic Auth)""" + url = yarl.URL(self.url) + clean_url = url.with_user(None) + return clean_url + @classmethod async def convert(cls, ctx: commands.Context, argument: str) -> Repo: downloader_cog = ctx.bot.get_cog("Downloader")