#!/usr/bin/env bash set -euo pipefail MYSQL_CONTAINER="git-kc-mysql" MYSQL_USER="root" MYSQL_DB="giteadb" MYSQL_ROOT_PASS="K0DprNKJ^vAu3Mx32hMZ%LCzWKElFRfA" GIT_HOST="root@vps.git" USERNAME=$(ego-mgr get default-username) if [[ -z "$USERNAME" ]]; then echo "Error: cannot get username from ego-mgr" >&2 exit 1 fi QUERY=" SELECT r.name, u.name as owner, r.is_private, (r.owner_id = u.id AND r.owner_id = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci) as is_owner, (r.owner_id = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci OR r.is_private = 0 OR a.user_id = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci OR EXISTS (SELECT 1 FROM team_user tu WHERE tu.uid = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci)) as can_see, COALESCE((r.owner_id = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci OR a.user_id = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci OR EXISTS (SELECT 1 FROM team_user tu JOIN team t ON t.id = tu.team_id WHERE tu.uid = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci AND (t.includes_all_repositories = 1 OR EXISTS (SELECT 1 FROM team_repo tr WHERE tr.team_id = t.id AND tr.repo_id = r.id)))), 0) as can_write FROM repository r JOIN user u ON r.owner_id = u.id LEFT JOIN access a ON a.repo_id = r.id AND a.user_id = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci WHERE r.is_archived = 0 AND (r.owner_id = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci OR r.is_private = 0 OR a.user_id = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci OR EXISTS (SELECT 1 FROM team_user tu WHERE tu.uid = (SELECT id FROM user WHERE lower_name = LOWER('$USERNAME')) COLLATE utf8mb4_unicode_ci)) ORDER BY r.name " RESULT=$(ssh -o StrictHostKeyChecking=no "$GIT_HOST" \ "docker exec $MYSQL_CONTAINER mysql -u $MYSQL_USER -p'$MYSQL_ROOT_PASS' -N -e \"$QUERY\" $MYSQL_DB" 2>/dev/null) if [[ -z "$RESULT" ]]; then echo "| proj-name | owner | url | can-write |" echo "|------------|-------|-----|-----------|" exit 0 fi echo "| proj-name | owner | url | can-write |" echo "|------------|-------|-----|-----------|" echo "$RESULT" | while IFS=$'\t' read -r name owner is_private is_owner can_see can_write; do can_write_val=$([[ "$can_write" == "1" ]] && echo "yes" || echo "no") echo "| $name | $owner | https://git.hangman-lab.top/$owner/$name.git | $can_write_val |" done