#!/bin/bash GITEA_URL="https://gitea.kasimirat.de" GITEA_USER="thomas" GITEA_TOKEN="289ac11a4ad2938fa34e6baa29bec74bdbcbb57b" validate_repo_name() { local name="$1" # Leerzeichen durch Bindestrich ersetzen name="${name// /-}" # Prüfen auf erlaubte Zeichen if [[ ! "$name" =~ ^[A-Za-z0-9._-]+$ ]]; then echo "Ungültiger Repo-Name! Nur Buchstaben, Zahlen, Bindestrich (-), Unterstrich (_) und Punkt (.) sind erlaubt." return 1 fi echo "$name" } while true; do clear echo "==== Git & Gitea Menü ====" echo "1) Repository klonen" echo "2) Status anzeigen" echo "3) Pull" echo "4) Push" echo "5) Branch wechseln" echo "6) Commit" echo "7) Gitea: Repo-Liste anzeigen" echo "8) Gitea: Neues Repo anlegen" echo "9) Gitea: Issue anzeigen" echo "10) Gitea: Issue erstellen" echo "q) Beenden" echo read -p "Bitte Auswahl eingeben: " auswahl case $auswahl in 1) read -p "Repo-URL (z.B. https://gitea.kasimirat.de/thomas/repo.git, z für zurück): " url [[ "$url" =~ ^[zZ]$ ]] && continue repo_name=$(basename -s .git "$url") valid_name=$(validate_repo_name "$repo_name") || { read -p "Weiter mit Enter..."; continue; } url_valid=$(echo "$url" | sed "s|$repo_name|$valid_name|") git clone "$url_valid" read -p "Weiter mit Enter..." ;; 2) git status read -p "Weiter mit Enter... (z für zurück)" z; [[ "$z" =~ ^[zZ]$ ]] && continue ;; 3) git pull read -p "Weiter mit Enter... (z für zurück)" z; [[ "$z" =~ ^[zZ]$ ]] && continue ;; 4) git push read -p "Weiter mit Enter... (z für zurück)" z; [[ "$z" =~ ^[zZ]$ ]] && continue ;; 5) git branch read -p "Branch-Name (z für zurück): " br [[ "$br" =~ ^[zZ]$ ]] && continue git checkout "$br" read -p "Weiter mit Enter..." ;; 6) git status read -p "Commit-Message (z für zurück): " msg [[ "$msg" =~ ^[zZ]$ ]] && continue git add . git commit -m "$msg" read -p "Weiter mit Enter..." ;; 7) curl -s -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/user/repos" | jq '.[] | .full_name' read -p "Weiter mit Enter... (z für zurück)" z; [[ "$z" =~ ^[zZ]$ ]] && continue ;; 8) read -p "Neuer Repo-Name (z für zurück): " repo [[ "$repo" =~ ^[zZ]$ ]] && continue valid_name=$(validate_repo_name "$repo") || { read -p "Weiter mit Enter..."; continue; } curl -s -X POST -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \ -d '{"name":"'$valid_name'","private":false}' "$GITEA_URL/api/v1/user/repos" > /dev/null echo "Repository mit dem Namen $valid_name wurde angelegt." read -p "Weiter mit Enter..." ;; 9) read -p "Repo (z.B. thomas/repo, z für zurück): " repo [[ "$repo" =~ ^[zZ]$ ]] && continue user_part=$(echo "$repo" | cut -d'/' -f1) repo_part=$(echo "$repo" | cut -d'/' -f2) valid_repo_part=$(validate_repo_name "$repo_part") || { read -p "Weiter mit Enter..."; continue; } repo_valid="$user_part/$valid_repo_part" read -p "Issue-Nummer (z für zurück): " num [[ "$num" =~ ^[zZ]$ ]] && continue curl -s -H "Authorization: token $GITEA_TOKEN" "$GITEA_URL/api/v1/repos/$repo_valid/issues/$num" | jq read -p "Weiter mit Enter..." ;; 10) read -p "Repo (z.B. thomas/repo, z für zurück): " repo [[ "$repo" =~ ^[zZ]$ ]] && continue user_part=$(echo "$repo" | cut -d'/' -f1) repo_part=$(echo "$repo" | cut -d'/' -f2) valid_repo_part=$(validate_repo_name "$repo_part") || { read -p "Weiter mit Enter..."; continue; } repo_valid="$user_part/$valid_repo_part" read -p "Titel (z für zurück): " titel [[ "$titel" =~ ^[zZ]$ ]] && continue read -p "Beschreibung (z für zurück): " desc [[ "$desc" =~ ^[zZ]$ ]] && continue curl -s -X POST -H "Content-Type: application/json" -H "Authorization: token $GITEA_TOKEN" \ -d '{"title":"'$titel'","body":"'$desc'"}' "$GITEA_URL/api/v1/repos/$repo_valid/issues" > /dev/null echo "Issue erstellt." read -p "Weiter mit Enter..." ;; q) echo "Beende Menü." exit 0 ;; *) echo "Ungültige Auswahl." read -p "Weiter mit Enter..." ;; esac done