Force simulate mode when OSM OAuth secrets are missing

Preview/PR builds don't have access to GitHub Secrets, so the OAuth
client IDs are empty. Previously this caused a runtime crash from
keys.dart throwing on empty values. Now we detect missing secrets
and force simulate mode, which already fully supports fake auth
and uploads.

Also fixes a latent bug where forceLogin() would crash with
LateInitializationError in simulate mode since _helper is never
initialized when OAuth setup is skipped.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Doug Borg
2026-03-07 11:25:17 -07:00
co-authored by Claude Opus 4.6
parent aeb1903bbc
commit 5728b4f70f
5 changed files with 106 additions and 15 deletions
+10 -6
View File
@@ -1,16 +1,20 @@
// OpenStreetMap OAuth client IDs for this app.
// These must be provided via --dart-define at build time.
/// Whether OSM OAuth secrets were provided at build time.
/// When false, the app should force simulate mode.
bool get kHasOsmSecrets {
const prod = String.fromEnvironment('OSM_PROD_CLIENTID');
const sandbox = String.fromEnvironment('OSM_SANDBOX_CLIENTID');
return prod.isNotEmpty && sandbox.isNotEmpty;
}
String get kOsmProdClientId {
const fromBuild = String.fromEnvironment('OSM_PROD_CLIENTID');
if (fromBuild.isNotEmpty) return fromBuild;
throw Exception('OSM_PROD_CLIENTID not configured. Use --dart-define=OSM_PROD_CLIENTID=your_id');
return fromBuild;
}
String get kOsmSandboxClientId {
const fromBuild = String.fromEnvironment('OSM_SANDBOX_CLIENTID');
if (fromBuild.isNotEmpty) return fromBuild;
throw Exception('OSM_SANDBOX_CLIENTID not configured. Use --dart-define=OSM_SANDBOX_CLIENTID=your_id');
return fromBuild;
}