Add check_gitea.py

This commit is contained in:
gru
2025-06-14 23:02:41 +02:00
parent 859746893a
commit 5779e2eae4

136
check_gitea.py Normal file
View File

@ -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