import 'dart:io'; import 'app_config.dart'; /// 生产环境强制守卫。 /// /// 设计目标:本构建(APK)**永远无法进入生产模式**。 /// - 编译期常量 [kAllowProduction] 恒为 false; /// - 运行期校验当前后端地址 host 不在生产拒绝名单中; /// 任一命中即打印清晰报错并 [exit],阻断后续执行。 class ProductionGuard { ProductionGuard._(); /// 编译期开关:绝不允许开启。 static const bool kAllowProduction = false; /// 生产环境 host/IP 拒绝名单(精确匹配,区分大小写前已小写化)。 static const List _productionHostDenyList = [ '58.220.83.58', // 生产服务器 IP 'api.ainetv.com', 'ainetv.com', ]; /// 启动期执行:断言非生产,命中即失败退出。 /// /// 同时作为构建期守卫([assert] 在 debug/profile 构建抛错)与运行期守卫 /// (release 构建中 [assert] 被剥离,但 host 校验仍生效)。 static void enforce() { // 编译期常量断言:若有人将 kAllowProduction 改为 true,调试构建立即崩溃。 assert(!kAllowProduction, '生产模式被编译期禁用 (kAllowProduction=false)'); // 解析当前后端地址并校验 host,禁止任何生产标识。 final full = AppConfig.apiFullBaseUrl; final host = Uri.parse(full).host.toLowerCase(); if (_productionHostDenyList.contains(host) || host.contains('prod')) { _failAndExit( '检测到生产环境地址 host=$host(来自 $full),已强制阻断启动', ); } } /// 打印清晰报错并退出进程,阻断后续执行。 static Never _failAndExit(String reason) { // ignore: avoid_print print('[PRODUCTION-GUARD] 启动被拒绝:$reason'); exit(1); } }