diff --git a/Dockerfile b/Dockerfile index 1793470..0e57811 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,6 +19,8 @@ ENV USERNAME="" \ NTFY_URL="" \ GHNTFY_TIMEOUT="3600" \ GHNTFY_TOKEN="" \ + DOCKER_USERNAME="" \ + DOCKER_PASSWORD="" \ FLASK_ENV=production # Exposer le port 5000 pour l'API et le port 80 pour le serveur web diff --git a/README.md b/README.md index 726e06d..42358c2 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,8 @@ services: - NTFY_URL=ntfy_url # Required - GHNTFY_TIMEOUT=timeout # Default is 3600 (1 hour) - GHNTFY_TOKEN= # Default is empty (Github token) + - DOCKER_USERNAME= # Default is empty (Docker Hub username) + - DOCKER_PASSWORD= # Default is empty (Docker Hub password) volumes: - /path/to/github-ntfy:/github-ntfy/ ports: diff --git a/ntfy.py b/ntfy.py index e030406..75edf3c 100644 --- a/ntfy.py +++ b/ntfy.py @@ -14,6 +14,32 @@ github_headers = {} if github_token: github_headers['Authorization'] = f"token {github_token}" +docker_username = os.environ.get('DOCKER_USERNAME') +docker_password = os.environ.get('DOCKER_PASSWORD') + + +def create_dockerhub_token(username, password): + url = "https://hub.docker.com//v2/users/login" + headers = {"Content-Type": "application/json"} + data = json.dumps({"username": username, "password": password}) + + response = requests.post(url, headers=headers, data=data) + + if response.status_code == 200: + token = response.json().get("token") + if token: + return token + else: + logger.error("Failed to get Docker Hub token.") + else: + logger.error(f"Failed to get Docker Hub token. Status code: {response.status_code}") + return None + + +docker_token = create_dockerhub_token(docker_username, docker_password) +docker_header = {} +if docker_token: + docker_header['Authorization'] = f"Bearer {docker_token}" # Connecting to the database to store previous versions conn = sqlite3.connect('/github-ntfy/ghntfy_versions.db', check_same_thread=False) cursor = conn.cursor() @@ -88,7 +114,7 @@ def get_latest_docker_releases(watched_repos): releases = [] for repo in watched_repos: url = f"https://hub.docker.com/v2/repositories/{repo_name}/tags/latest" - response = requests.get(url) + response = requests.get(url, headers=docker_header) if response.status_code == 200: release_info = response.json() release_date=release_info["last_upated"]