76 lines
2.3 KiB
Bash
Executable File
76 lines
2.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# gitea-agent-setup.sh — Crée ou récupère un compte Gitea pour un agent IA
|
|
# Usage: ./scripts/gitea-agent-setup.sh <nom-agent>
|
|
# Ex: ./scripts/gitea-agent-setup.sh my-custom-agent
|
|
|
|
set -e
|
|
AGENT_NAME="${1:?Usage: $0 <nom-agent>}"
|
|
USERNAME="agent-${AGENT_NAME}"
|
|
BASE_URL="${GITEA_BASE_URL:-http://192.168.0.82:3000}"
|
|
TOKENS_FILE="$HOME/.agent-gitea-tokens"
|
|
|
|
# Load admin token
|
|
if [[ -f "$TOKENS_FILE" ]]; then
|
|
source "$TOKENS_FILE"
|
|
fi
|
|
ADMIN_TOKEN="${GITEA_ADMIN_TOKEN:-}"
|
|
|
|
if [[ -z "$ADMIN_TOKEN" ]]; then
|
|
echo "ERROR: GITEA_ADMIN_TOKEN non défini. Ajouter dans $TOKENS_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if user already exists
|
|
STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
|
|
-H "Authorization: token $ADMIN_TOKEN" \
|
|
"$BASE_URL/api/v1/users/$USERNAME")
|
|
|
|
if [[ "$STATUS" == "200" ]]; then
|
|
echo "Compte $USERNAME existe déjà."
|
|
else
|
|
echo "Création du compte $USERNAME..."
|
|
curl -sf -X POST "$BASE_URL/api/v1/admin/users" \
|
|
-H "Authorization: token $ADMIN_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d "{
|
|
\"username\": \"$USERNAME\",
|
|
\"email\": \"$USERNAME@labo.local\",
|
|
\"password\": \"$(openssl rand -base64 24)\",
|
|
\"full_name\": \"Agent $AGENT_NAME\",
|
|
\"login_name\": \"$USERNAME\",
|
|
\"source_id\": 0,
|
|
\"send_notify\": false,
|
|
\"must_change_password\": false
|
|
}" > /dev/null
|
|
echo "Compte $USERNAME créé."
|
|
fi
|
|
|
|
# Generate token via CLI (requires SSH to .82)
|
|
echo "Génération du token..."
|
|
TOKEN=$(ssh floppyrj45@192.168.0.82 \
|
|
"docker exec -u git gitea gitea admin user generate-access-token \
|
|
--username $USERNAME --token-name default --raw 2>/dev/null")
|
|
|
|
if [[ -z "$TOKEN" ]]; then
|
|
echo "ERROR: Impossible de générer le token."
|
|
exit 1
|
|
fi
|
|
|
|
VAR_NAME="GITEA_TOKEN_$(echo $AGENT_NAME | tr '[:lower:]-' '[:upper:]_')"
|
|
|
|
# Add to tokens file
|
|
if grep -q "$VAR_NAME" "$TOKENS_FILE" 2>/dev/null; then
|
|
sed -i "s|^${VAR_NAME}=.*|${VAR_NAME}=${TOKEN}|" "$TOKENS_FILE"
|
|
else
|
|
echo "${VAR_NAME}=${TOKEN}" >> "$TOKENS_FILE"
|
|
fi
|
|
|
|
echo "Token stocké dans $TOKENS_FILE"
|
|
echo ""
|
|
echo "Config Git pour $USERNAME :"
|
|
echo " git config user.name \"$USERNAME\""
|
|
echo " git config user.email \"$USERNAME@labo.local\""
|
|
echo ""
|
|
echo "Clone avec auth :"
|
|
echo " git clone http://$USERNAME:$TOKEN@192.168.0.82:3000/floppyrj45/REPO_NAME"
|