2026-01-29 15:54:22 +00:00
|
|
|
|
import 'secrets.local.dart' as local;
|
|
|
|
|
|
|
|
|
|
|
|
/// アプリケーションの機密情報と設定を管理するクラス
|
|
|
|
|
|
///
|
|
|
|
|
|
/// ビルド時に環境変数を使って値を上書きできます:
|
|
|
|
|
|
/// ```bash
|
|
|
|
|
|
/// flutter build apk --dart-define=AI_PROXY_URL=http://your-server:8080
|
|
|
|
|
|
/// ```
|
|
|
|
|
|
///
|
|
|
|
|
|
/// ローカル開発時:
|
|
|
|
|
|
/// 1. lib/secrets.local.dart.example をコピーして lib/secrets.local.dart を作成
|
|
|
|
|
|
/// 2. 新しく発行したAPIキーを設定
|
|
|
|
|
|
/// 3. secrets.local.dart は .gitignore に含まれているため安全
|
|
|
|
|
|
class Secrets {
|
|
|
|
|
|
/// AI Proxy サーバーのベースURL
|
|
|
|
|
|
///
|
2026-04-12 02:47:35 +00:00
|
|
|
|
/// useProxy=true 時のみ使用(consumer APK では useProxy=false のため到達しない)
|
|
|
|
|
|
/// ビルド時に必ず --dart-define=AI_PROXY_URL=... で指定すること
|
2026-01-29 15:54:22 +00:00
|
|
|
|
static const String aiProxyBaseUrl = String.fromEnvironment(
|
|
|
|
|
|
'AI_PROXY_URL',
|
2026-04-12 02:47:35 +00:00
|
|
|
|
defaultValue: '', // 内部ネットワーク情報をバイナリに含めない
|
2026-01-29 15:54:22 +00:00
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/// AI Mode: Proxy(Home) vs Direct(Cloud)
|
2026-04-12 02:47:35 +00:00
|
|
|
|
///
|
|
|
|
|
|
/// false: Gemini API に直接接続(consumer APK デフォルト)
|
|
|
|
|
|
/// API キーは --dart-define=GEMINI_API_KEY=... でビルド時に埋め込む
|
|
|
|
|
|
/// true: 内部プロキシ経由(開発・検証用、--dart-define=USE_PROXY=true)
|
2026-02-15 15:13:12 +00:00
|
|
|
|
static const bool useProxy = bool.fromEnvironment(
|
|
|
|
|
|
'USE_PROXY',
|
2026-04-12 02:47:35 +00:00
|
|
|
|
defaultValue: false,
|
2026-02-15 15:13:12 +00:00
|
|
|
|
);
|
2026-01-29 15:54:22 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// AI Proxy サーバーの解析エンドポイントURL
|
|
|
|
|
|
static const String aiProxyAnalyzeUrl = '$aiProxyBaseUrl/analyze';
|
|
|
|
|
|
|
2026-02-16 02:34:00 +00:00
|
|
|
|
/// AI Proxy 認証トークン
|
|
|
|
|
|
/// Proxy経由モード(useProxy=true)時に使用するBearer Token
|
|
|
|
|
|
/// ビルド時の上書き: --dart-define=PROXY_AUTH_TOKEN=...
|
|
|
|
|
|
static const String _proxyAuthTokenEnv = String.fromEnvironment(
|
|
|
|
|
|
'PROXY_AUTH_TOKEN',
|
|
|
|
|
|
defaultValue: '',
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/// 実際に使用するProxy認証トークン
|
|
|
|
|
|
/// 優先順位: 環境変数 > ローカル設定ファイル
|
|
|
|
|
|
static String get proxyAuthToken {
|
|
|
|
|
|
if (_proxyAuthTokenEnv.isNotEmpty) {
|
|
|
|
|
|
return _proxyAuthTokenEnv;
|
|
|
|
|
|
}
|
|
|
|
|
|
return local.SecretsLocal.proxyAuthToken;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-29 15:54:22 +00:00
|
|
|
|
/// Gemini API Key
|
|
|
|
|
|
/// ⚠️ セキュリティのため、defaultValueは空です
|
|
|
|
|
|
/// ローカル開発時: lib/secrets.local.dart を作成してキーを設定
|
|
|
|
|
|
/// ビルド時の上書き: --dart-define=GEMINI_API_KEY=...
|
|
|
|
|
|
static const String _geminiApiKeyEnv = String.fromEnvironment(
|
|
|
|
|
|
'GEMINI_API_KEY',
|
|
|
|
|
|
defaultValue: '', // セキュリティのため空文字列
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
/// 実際に使用するGemini APIキー
|
|
|
|
|
|
/// 優先順位: 環境変数 > ローカル設定ファイル
|
|
|
|
|
|
static String get geminiApiKey {
|
|
|
|
|
|
// 1. 環境変数が設定されていればそれを使用
|
|
|
|
|
|
if (_geminiApiKeyEnv.isNotEmpty) {
|
|
|
|
|
|
return _geminiApiKeyEnv;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 2. ローカル設定ファイルから取得
|
|
|
|
|
|
return local.SecretsLocal.geminiApiKey;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-10 15:16:52 +00:00
|
|
|
|
/// Posimai メインサーバーのベースURL(ライセンス検証に使用)
|
|
|
|
|
|
static const String posimaiBaseUrl = String.fromEnvironment(
|
|
|
|
|
|
'POSIMAI_BASE_URL',
|
|
|
|
|
|
defaultValue: 'https://api.soar-enrich.com',
|
|
|
|
|
|
);
|
|
|
|
|
|
|
2026-01-29 15:54:22 +00:00
|
|
|
|
// static const String driveClientId = String.fromEnvironment('DRIVE_CLIENT_ID', defaultValue: '');
|
|
|
|
|
|
}
|