mirror of
git://f0xx.org/android_cast
synced 2026-07-29 04:57:40 +03:00
small sync
This commit is contained in:
103
examples/crash_reporter/backend/scripts/ensure_url_shortener_prod_config.php
Executable file
103
examples/crash_reporter/backend/scripts/ensure_url_shortener_prod_config.php
Executable file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env php81
|
||||
<?php
|
||||
/**
|
||||
* Restore url-shortener prod config after rsync/submodule deploy (config.php is gitignored).
|
||||
*
|
||||
* On BE (as user that can read crashes config.php):
|
||||
* php81 examples/crash_reporter/backend/scripts/ensure_url_shortener_prod_config.php
|
||||
*
|
||||
* - Writes backend/url-shortener/config/config.php (via apps/s symlink when present)
|
||||
* - Ensures crashes config.php has url_shortener.enabled + db block
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
$repoRoot = realpath(dirname(__DIR__, 3)) ?: dirname(__DIR__, 3);
|
||||
$crashConfigPath = $repoRoot . '/examples/crash_reporter/backend/config/config.php';
|
||||
$urlConfigDir = $repoRoot . '/backend/url-shortener/config';
|
||||
$urlConfigPath = $urlConfigDir . '/config.php';
|
||||
|
||||
$sLink = '/var/www/localhost/htdocs/apps/s';
|
||||
if (is_link($sLink)) {
|
||||
$resolved = realpath($sLink);
|
||||
if ($resolved !== false) {
|
||||
$urlConfigDir = $resolved . '/config';
|
||||
$urlConfigPath = $urlConfigDir . '/config.php';
|
||||
}
|
||||
}
|
||||
|
||||
function fail(string $msg): void {
|
||||
fwrite(STDERR, "ensure_url_shortener_prod_config: $msg\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (!is_readable($crashConfigPath)) {
|
||||
fail("missing crashes config: $crashConfigPath");
|
||||
}
|
||||
|
||||
/** @var array<string,mixed> $crash */
|
||||
$crash = require $crashConfigPath;
|
||||
$m = $crash['db']['mysql'] ?? null;
|
||||
if (!is_array($m) || ($m['password'] ?? '') === '') {
|
||||
fail('crashes db.mysql.password not set in config.php');
|
||||
}
|
||||
|
||||
$user = (string) ($m['username'] ?? 'androidcast');
|
||||
$pass = (string) $m['password'];
|
||||
$socket = (string) ($m['socket'] ?? '/run/mysqld/mysqld.sock');
|
||||
|
||||
try {
|
||||
$pdo = new PDO(
|
||||
"mysql:unix_socket={$socket};dbname=url_shortener;charset=utf8mb4",
|
||||
$user,
|
||||
$pass,
|
||||
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]
|
||||
);
|
||||
$pdo->query('SELECT 1');
|
||||
} catch (Throwable $e) {
|
||||
fail('url_shortener DB ping failed: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
$urlBlock = [
|
||||
'db' => [
|
||||
'driver' => 'mysql',
|
||||
'mysql' => [
|
||||
'host' => '127.0.0.1',
|
||||
'port' => 3306,
|
||||
'socket' => $socket,
|
||||
'database' => 'url_shortener',
|
||||
'username' => $user,
|
||||
'password' => $pass,
|
||||
'charset' => 'utf8mb4',
|
||||
],
|
||||
],
|
||||
'public_base' => 'https://s.f0xx.org',
|
||||
];
|
||||
|
||||
if (!is_dir($urlConfigDir)) {
|
||||
fail("url-shortener config dir missing: $urlConfigDir");
|
||||
}
|
||||
|
||||
file_put_contents($urlConfigPath, "<?php\nreturn " . var_export($urlBlock, true) . ";\n");
|
||||
chmod($urlConfigPath, 0644);
|
||||
|
||||
$crashUrl = [
|
||||
'enabled' => true,
|
||||
'public_base' => 'https://s.f0xx.org',
|
||||
'db' => [
|
||||
'mysql' => [
|
||||
'host' => '127.0.0.1',
|
||||
'port' => 3306,
|
||||
'socket' => $socket,
|
||||
'database' => 'url_shortener',
|
||||
'username' => $user,
|
||||
'password' => $pass,
|
||||
'charset' => 'utf8mb4',
|
||||
],
|
||||
],
|
||||
];
|
||||
|
||||
$crash['url_shortener'] = $crashUrl;
|
||||
file_put_contents($crashConfigPath, "<?php\nreturn " . var_export($crash, true) . ";\n");
|
||||
|
||||
echo "ok: $urlConfigPath\n";
|
||||
echo "ok: crashes url_shortener.enabled=true\n";
|
||||
@@ -106,25 +106,7 @@ resolve_gitea_owner() {
|
||||
}
|
||||
|
||||
resolve_push_token() {
|
||||
if [ -n "${GITEA_ADMIN_TOKEN:-}" ]; then
|
||||
printf '%s' "$GITEA_ADMIN_TOKEN"
|
||||
return 0
|
||||
fi
|
||||
_token=""
|
||||
_token="$(gitea_cli "admin" "user" "generate-access-token" \
|
||||
"--username" "$GITEA_OWNER" \
|
||||
"--token-name" "attach-$$" \
|
||||
"--scopes" "all" \
|
||||
"--raw" 2>/dev/null)" && [ -n "$_token" ] && printf '%s' "$_token" && return 0
|
||||
_admin="$(gitea_pick_owner_username)"
|
||||
if [ -n "$_admin" ] && [ "$_admin" != "$GITEA_OWNER" ]; then
|
||||
_token="$(gitea_cli "admin" "user" "generate-access-token" \
|
||||
"--username" "$_admin" \
|
||||
"--token-name" "attach-$$" \
|
||||
"--scopes" "all" \
|
||||
"--raw" 2>/dev/null)" && [ -n "$_token" ] && printf '%s' "$_token" && return 0
|
||||
fi
|
||||
return 1
|
||||
gitea_resolve_push_token
|
||||
}
|
||||
|
||||
create_repo_via_cli() {
|
||||
@@ -173,15 +155,7 @@ create_repo_via_api() {
|
||||
}
|
||||
|
||||
gitea_owner_uid() {
|
||||
need_cmd curl
|
||||
_token="${GITEA_ADMIN_TOKEN:-}"
|
||||
[ -n "$_token" ] || _token="$(resolve_push_token)" || return 1
|
||||
_api="$(gitea_api_base)"
|
||||
_uid="$(curl -sS "$_api/users/$GITEA_OWNER" \
|
||||
-H "Authorization: token $_token" \
|
||||
| awk -F'"' '/"id"/ { print $4; exit }')"
|
||||
[ -n "$_uid" ] || return 1
|
||||
printf '%s' "$_uid"
|
||||
gitea_entity_uid_for "$GITEA_OWNER"
|
||||
}
|
||||
|
||||
migrate_via_api() {
|
||||
|
||||
@@ -66,17 +66,24 @@ for _from in $GITEA_TRANSFER_SOURCES; do
|
||||
fi
|
||||
done
|
||||
|
||||
# 3) Pull mirror (attach when missing).
|
||||
# 3) Pull mirror (attach when missing). Resolve PAT once for all API calls this run.
|
||||
_gitea_token="$(gitea_resolve_push_token)" || true
|
||||
[ -n "$_gitea_token" ] && GITEA_ADMIN_TOKEN="$_gitea_token" && export GITEA_ADMIN_TOKEN
|
||||
|
||||
if gitea_repo_exists_api "$GITEA_OWNER" "$GITEA_REPO"; then
|
||||
log "repo exists — trigger mirror sync"
|
||||
gitea_sync_mirror_api "$GITEA_OWNER" "$GITEA_REPO" || warn "mirror sync API failed — try gitea_sync_mirror.sh"
|
||||
else
|
||||
log "attach pull mirror via gitea_attach_remote.sh ..."
|
||||
GITEA_OWNER="$GITEA_OWNER" GITEA_REPO="$GITEA_REPO" \
|
||||
GITEA_MIRROR_URL="$GITEA_MIRROR_URL" \
|
||||
GITEA_MIRROR_INTERVAL="$GITEA_MIRROR_INTERVAL" \
|
||||
GITEA_PRIVATE="$GITEA_PRIVATE" \
|
||||
sh "$SCRIPT_DIR/gitea_attach_remote.sh" "$GITEA_MIRROR_URL" || exit 1
|
||||
log "attach pull mirror (API migrate) ..."
|
||||
if ! gitea_mirror_pull_repo "$GITEA_MIRROR_URL" "$GITEA_REPO" "$GITEA_OWNER" \
|
||||
"$GITEA_MIRROR_INTERVAL" ""; then
|
||||
warn "API migrate failed — trying gitea_attach_remote.sh fallback ..."
|
||||
GITEA_OWNER="$GITEA_OWNER" GITEA_REPO="$GITEA_REPO" \
|
||||
GITEA_MIRROR_URL="$GITEA_MIRROR_URL" \
|
||||
GITEA_MIRROR_INTERVAL="$GITEA_MIRROR_INTERVAL" \
|
||||
GITEA_PRIVATE="$GITEA_PRIVATE" \
|
||||
sh "$SCRIPT_DIR/gitea_attach_remote.sh" "$GITEA_MIRROR_URL" || exit 1
|
||||
fi
|
||||
gitea_sync_mirror_api "$GITEA_OWNER" "$GITEA_REPO" || warn "initial sync pending — check [migrations] / git daemon"
|
||||
fi
|
||||
|
||||
|
||||
@@ -42,20 +42,32 @@ gitea_rm_path() {
|
||||
rm -rf "$1" 2>/dev/null || true
|
||||
}
|
||||
|
||||
# First numeric "id" from Gitea JSON (handles "id":2 and "id":"2").
|
||||
gitea_json_extract_id() {
|
||||
printf '%s' "$1" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*'
|
||||
}
|
||||
|
||||
gitea_resolve_push_token() {
|
||||
if [ -n "${GITEA_ADMIN_TOKEN:-}" ]; then
|
||||
printf '%s' "$GITEA_ADMIN_TOKEN"
|
||||
return 0
|
||||
fi
|
||||
# One PAT per script run (re-generating with the same --token-name fails).
|
||||
if [ -n "${_GITEA_RESOLVED_TOKEN:-}" ]; then
|
||||
printf '%s' "$_GITEA_RESOLVED_TOKEN"
|
||||
return 0
|
||||
fi
|
||||
_admin="$(gitea_pick_owner_username)"
|
||||
[ -n "$_admin" ] || return 1
|
||||
_token=""
|
||||
_token="$(gitea_cli "admin" "user" "generate-access-token" \
|
||||
"--username" "$_admin" \
|
||||
"--token-name" "mirror-$$" \
|
||||
"--token-name" "mirror-$$-$(date +%s)-${RANDOM:-0}" \
|
||||
"--scopes" "all" \
|
||||
"--raw" 2>/dev/null)" && [ -n "$_token" ] && printf '%s' "$_token" && return 0
|
||||
return 1
|
||||
"--raw" 2>/dev/null)" && [ -n "$_token" ] || return 1
|
||||
_GITEA_RESOLVED_TOKEN="$_token"
|
||||
export _GITEA_RESOLVED_TOKEN GITEA_ADMIN_TOKEN="$_token"
|
||||
printf '%s' "$_token"
|
||||
}
|
||||
|
||||
gitea_owner_uid_for() {
|
||||
@@ -76,7 +88,7 @@ gitea_entity_uid_for() {
|
||||
else
|
||||
_json="$(curl -sS "$_api/users/$_owner" -H "Authorization: token $_token")"
|
||||
fi
|
||||
_uid="$(printf '%s' "$_json" | awk -F'"' '/"id":/ { print $4; exit }')"
|
||||
_uid="$(gitea_json_extract_id "$_json")"
|
||||
[ -n "$_uid" ] || return 1
|
||||
printf '%s' "$_uid"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user