diff --git a/check_gitea.py b/check_gitea.py new file mode 100644 index 0000000..cbb3919 --- /dev/null +++ b/check_gitea.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 + +import requests +import argparse +import sys + +def debug_print(debug, message): + if debug: + print(f"DEBUG: {message}") + +def check_gitea(server_address, repo_owner, repo_name, username, password, file_path, debug=False): + try: + base_url = f"https://{server_address}" + session = requests.Session() + + # 1. Sprawdzenie dostępności serwera Gitea + debug_print(debug, "Próba połączenia z serwerem Gitea...") + try: + response = session.get(base_url, timeout=10) + response.raise_for_status() + debug_print(debug, f"Serwer Gitea dostępny (HTTP {response.status_code})") + except requests.exceptions.RequestException as e: + print(f"CRITICAL - Nie można połączyć się z serwerem Gitea: {str(e)}") + return 2 + + # 2. Logowanie + login_url = f"{base_url}/user/login" + debug_print(debug, f"Próba logowania na konto {username}...") + + try: + response = session.get(login_url) + response.raise_for_status() + except requests.exceptions.RequestException as e: + print(f"CRITICAL - Nie można pobrać strony logowania: {str(e)}") + return 2 + + from bs4 import BeautifulSoup + soup = BeautifulSoup(response.text, 'html.parser') + csrf_token = soup.find('input', {'name': '_csrf'}) + + if not csrf_token: + print("CRITICAL - Nie można znaleźć tokena CSRF na stronie logowania") + return 2 + + csrf_token = csrf_token['value'] + debug_print(debug, f"Znaleziono token CSRF: {csrf_token}") + + login_data = { + "user_name": username, + "password": password, + "_csrf": csrf_token + } + + try: + response = session.post(login_url, data=login_data) + response.raise_for_status() + + if "invalid username or password" in response.text.lower() or "nieprawidłowa nazwa użytkownika lub hasło" in response.text.lower(): + print("CRITICAL - Błąd logowania do Gitea: nieprawidłowa nazwa użytkownika lub hasło") + return 2 + + debug_print(debug, "Logowanie zakończone sukcesem") + except requests.exceptions.RequestException as e: + print(f"CRITICAL - Błąd podczas logowania: {str(e)}") + return 2 + + # 3. Sprawdzenie repozytorium + repo_url = f"{base_url}/{repo_owner}/{repo_name}" + debug_print(debug, f"Sprawdzanie dostępności repozytorium {repo_owner}/{repo_name}...") + + try: + response = session.get(repo_url) + if response.status_code == 404: + print(f"CRITICAL - Repozytorium {repo_owner}/{repo_name} nie istnieje") + return 2 + response.raise_for_status() + debug_print(debug, f"Repozytorium {repo_owner}/{repo_name} dostępne") + except requests.exceptions.RequestException as e: + print(f"CRITICAL - Problem z dostępem do repozytorium: {str(e)}") + return 2 + + # 4. Sprawdzenie pliku w repozytorium - ZMIENIONA METODA DOSTĘPU + file_url = f"{base_url}/{repo_owner}/{repo_name}/raw/branch/master/{file_path}" + debug_print(debug, f"Próba odczytu pliku {file_path} z URL: {file_url}...") + + try: + response = session.get(file_url) + debug_print(debug, f"Odpowiedź HTTP: {response.status_code}") + + if response.status_code == 200: + # Dodatkowe sprawdzenie czy to na pewno plik + if response.text: # Jeśli odpowiedź zawiera treść + print(f"OK - Pomyślnie odczytano plik {file_path} z repozytorium {repo_owner}/{repo_name}") + return 0 + else: + print(f"WARNING - Plik {file_path} istnieje ale jest pusty") + return 1 + elif response.status_code == 404: + print(f"WARNING - Plik {file_path} nie istnieje w repozytorium {repo_owner}/{repo_name}") + debug_print(debug, f"Pełna ścieżka: {file_url}") + return 1 + else: + print(f"CRITICAL - Nie można odczytać pliku {file_path} (HTTP {response.status_code})") + return 2 + except requests.exceptions.RequestException as e: + print(f"CRITICAL - Błąd podczas odczytu pliku: {str(e)}") + return 2 + + except Exception as e: + print(f"CRITICAL - Wystąpił nieoczekiwany błąd: {str(e)}") + return 2 + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Skrypt do weryfikacji działania Gitea') + parser.add_argument('--server', required=True, help='Adres serwera Gitea (np. gitea.linuxiarz.pl)') + parser.add_argument('--repo-owner', required=True, help='Właściciel repozytorium') + parser.add_argument('--repo-name', required=True, help='Nazwa repozytorium') + parser.add_argument('--username', required=True, help='Nazwa użytkownika') + parser.add_argument('--password', required=True, help='Hasło użytkownika') + parser.add_argument('--file', required=True, help='Ścieżka do pliku do odczytu w repozytorium') + parser.add_argument('--debug', action='store_true', help='Wyświetl szczegółowe informacje debugowe') + + args = parser.parse_args() + + sys.exit(check_gitea( + args.server, + args.repo_owner, + args.repo_name, + args.username, + args.password, + args.file, + args.debug + )) + +# Przykładowa komenda: +# ./check_gitea.py --server gitea.domena.pl --repo-owner testuser --repo-name testrepo --username testuser --password testpass --file README.md --debug \ No newline at end of file