Add support for Gitea and Forgejo in token handling

- Enhanced the `with_token` function to support Gitea and Forgejo URLs by constructing the appropriate authentication format for generic HTTPS.
- Updated tests to validate the new functionality, ensuring correct token injection for Gitea URLs while maintaining existing behavior for GitHub and GitLab.
- Improved overall robustness of token handling across different platforms.
This commit is contained in:
Leonid Pershin
2026-08-21 10:45:54 +03:00
parent 506369548c
commit 6cdd6ecfa1
2 changed files with 14 additions and 0 deletions
+10
View File
@@ -47,6 +47,16 @@ def with_token(url: str, token: str) -> str:
return "https://x-access-token:" + token + "@github.com/" + url[len("https://github.com/") :] return "https://x-access-token:" + token + "@github.com/" + url[len("https://github.com/") :]
if url.startswith("https://gitlab.com/"): if url.startswith("https://gitlab.com/"):
return "https://oauth2:" + token + "@gitlab.com/" + url[len("https://gitlab.com/") :] return "https://oauth2:" + token + "@gitlab.com/" + url[len("https://gitlab.com/") :]
# Gitea / Forgejo / generic HTTPS — oauth2:TOKEN@host (skip if URL already has userinfo)
if url.startswith("https://"):
parts = urlsplit(url)
if parts.hostname and not parts.username:
netloc = f"oauth2:{token}@{parts.hostname}"
if parts.port:
netloc = f"{netloc}:{parts.port}"
return urlunsplit(
(parts.scheme, netloc, parts.path, parts.query, parts.fragment)
)
return url return url
+4
View File
@@ -55,6 +55,10 @@ def test_git_token_injection():
url = "https://github.com/org/Ext.git" url = "https://github.com/org/Ext.git"
assert "x-access-token:secret@" in with_token(url, "secret") assert "x-access-token:secret@" in with_token(url, "secret")
assert strip_auth(with_token(url, "secret")) == url assert strip_auth(with_token(url, "secret")) == url
gitea = "https://gitea.hsrv.site/mrleo1nid/swarm-assistent.git"
authed = with_token(gitea, "secret")
assert "oauth2:secret@gitea.hsrv.site" in authed
assert strip_auth(authed) == gitea
assert is_sha("a" * 40) assert is_sha("a" * 40)
assert not is_sha("main") assert not is_sha("main")