Files
profilarr/backend/app/git/auth/authenticate.py
Samuel Chau e251a4e317 fix: clone permissions for private repos (#190)
- reverted back to Flask development server for development
- improved / suppressed git logging
- fixed cloning for private repos by including PAT in clone job
- add 'private repo' badge that replaces repository stats for private repos
2025-03-30 20:42:31 +10:30

50 lines
1.6 KiB
Python

# git/auth/authenticate.py
import os
import logging
logger = logging.getLogger(__name__)
class GitHubAuth:
"""
A modular authentication handler for GitHub repositories.
Supports Personal Access Tokens (PAT) for HTTPS authentication.
"""
@staticmethod
def get_authenticated_url(https_url):
"""
Convert an HTTPS URL to include authentication via PAT.
Ensures the token is not duplicated in the URL.
"""
token = os.getenv("PROFILARR_PAT")
if not token:
raise ValueError(
"PROFILARR_PAT is not set in environment variables")
# Check if the URL already contains authentication
if "@" in https_url:
# Already has some form of authentication, remove it to add our token
# This handles URLs that might have a token already
protocol_part, rest = https_url.split("://", 1)
if "@" in rest:
# Remove any existing authentication
_, server_part = rest.split("@", 1)
https_url = f"{protocol_part}://{server_part}"
# Now add our token
authenticated_url = https_url.replace("https://", f"https://{token}@")
return authenticated_url
@staticmethod
def verify_token():
"""
Verify if the Personal Access Token is valid.
"""
token = os.getenv("PROFILARR_PAT")
if not token:
logger.error("PROFILARR_PAT is not set")
return False
logger.info("Token verification skipped (assume valid)")
return True