SkateSpots/scripts/inject-backup-policy.mjs

41 lines
1.5 KiB
JavaScript

#!/usr/bin/env node
/**
* Disable Android Auto Backup for SkateSpots.
*
* The app stores identity material, local settings, pending escrow tokens and
* other private state in its WebView storage. Android Auto Backup can copy that
* data to a cloud account without the user ever asking for a backup. Keep it
* device-local: SkateSpots has its own explicit export/backup flows.
*
* Idempotent; exits quietly when android/ has not been generated yet.
*/
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
import { dirname, join } from 'node:path';
import { fileURLToPath } from 'node:url';
const root = join(dirname(fileURLToPath(import.meta.url)), '..');
const manifestPath = join(root, 'android', 'app', 'src', 'main', 'AndroidManifest.xml');
if (!existsSync(manifestPath)) {
console.log('[inject-backup-policy] android/ not generated yet — skipping.');
process.exit(0);
}
let manifest = readFileSync(manifestPath, 'utf8');
const before = manifest;
if (/android:allowBackup="[^"]*"/.test(manifest)) {
manifest = manifest.replace(/android:allowBackup="[^"]*"/, 'android:allowBackup="false"');
} else {
manifest = manifest.replace(
/<application\b/,
'<application android:allowBackup="false"',
);
}
if (manifest === before) {
console.log('[inject-backup-policy] allowBackup already disabled.');
} else {
writeFileSync(manifestPath, manifest);
console.log('[inject-backup-policy] ✓ Disabled Android cloud backup (allowBackup=false).');
}