forked from baron/baron-sso
make dev/dev-debug 구분.
This commit is contained in:
@@ -29,23 +29,37 @@ class LogPolicy {
|
||||
env == 'staging';
|
||||
}
|
||||
|
||||
static bool parseBoolFlag(String? raw) {
|
||||
static ({bool enabled, bool specified}) parseOptionalBoolFlag(String? raw) {
|
||||
final value = (raw ?? '').trim().toLowerCase();
|
||||
return value == '1' ||
|
||||
if (value == '1' ||
|
||||
value == 'true' ||
|
||||
value == 'yes' ||
|
||||
value == 'y' ||
|
||||
value == 'on';
|
||||
value == 'on') {
|
||||
return (enabled: true, specified: true);
|
||||
}
|
||||
if (value == '0' ||
|
||||
value == 'false' ||
|
||||
value == 'no' ||
|
||||
value == 'n' ||
|
||||
value == 'off') {
|
||||
return (enabled: false, specified: true);
|
||||
}
|
||||
return (enabled: false, specified: false);
|
||||
}
|
||||
|
||||
static bool debugEnabled({
|
||||
required String? appEnv,
|
||||
required String? productionDebugFlag,
|
||||
}) {
|
||||
final flag = parseOptionalBoolFlag(productionDebugFlag);
|
||||
if (flag.specified) {
|
||||
return flag.enabled;
|
||||
}
|
||||
if (!isProductionEnv(appEnv)) {
|
||||
return true;
|
||||
}
|
||||
return parseBoolFlag(productionDebugFlag);
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool shouldRelayClientLog({
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import 'dart:convert';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
import 'package:logging/logging.dart' as std_log;
|
||||
import 'package:logger/logger.dart' as pretty_log;
|
||||
import 'auth_proxy_service.dart';
|
||||
import 'log_policy.dart';
|
||||
import 'runtime_env.dart';
|
||||
|
||||
/// Global Logger Service for Baron SSO Frontend
|
||||
class LoggerService {
|
||||
@@ -16,10 +16,10 @@ class LoggerService {
|
||||
late final String _productionDebugFlag;
|
||||
|
||||
LoggerService._internal() {
|
||||
_appEnv = _envOrDefault('APP_ENV', 'dev');
|
||||
_productionDebugFlag = _envOrDefault(
|
||||
_appEnv = envOrDefault('APP_ENV', 'dev');
|
||||
_productionDebugFlag = envOrDefault(
|
||||
'CLIENT_LOG_DEBUG',
|
||||
_envOrDefault('USERFRONT_DEBUG_LOG', ''),
|
||||
envOrDefault('USERFRONT_DEBUG_LOG', ''),
|
||||
);
|
||||
final debugEnabled = LogPolicy.debugEnabled(
|
||||
appEnv: _appEnv,
|
||||
@@ -54,17 +54,6 @@ class LoggerService {
|
||||
});
|
||||
}
|
||||
|
||||
static String _envOrDefault(String key, String fallback) {
|
||||
if (!dotenv.isInitialized) {
|
||||
return fallback;
|
||||
}
|
||||
final value = dotenv.env[key];
|
||||
if (value == null || value.trim().isEmpty) {
|
||||
return fallback;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
/// Initialize the logger. Call this in main.dart
|
||||
static void init() {
|
||||
// Accessing the instance triggers the constructor
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||
|
||||
const _compileTimeEnv = {
|
||||
'APP_ENV': String.fromEnvironment('APP_ENV'),
|
||||
'CLIENT_LOG_DEBUG': String.fromEnvironment('CLIENT_LOG_DEBUG'),
|
||||
'USERFRONT_DEBUG_LOG': String.fromEnvironment('USERFRONT_DEBUG_LOG'),
|
||||
};
|
||||
|
||||
String runtimeOriginFallback() {
|
||||
try {
|
||||
final origin = Uri.base.origin;
|
||||
@@ -11,14 +17,18 @@ String runtimeOriginFallback() {
|
||||
}
|
||||
|
||||
String envOrDefault(String key, String fallback) {
|
||||
if (!dotenv.isInitialized) {
|
||||
return fallback;
|
||||
if (dotenv.isInitialized) {
|
||||
final value = dotenv.env[key];
|
||||
if (value != null && value.trim().isNotEmpty) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
final value = dotenv.env[key];
|
||||
if (value == null || value.trim().isEmpty) {
|
||||
return fallback;
|
||||
|
||||
final compileTimeValue = _compileTimeEnv[key];
|
||||
if (compileTimeValue != null && compileTimeValue.trim().isNotEmpty) {
|
||||
return compileTimeValue;
|
||||
}
|
||||
return value;
|
||||
return fallback;
|
||||
}
|
||||
|
||||
String sanitizedUrl(String value) {
|
||||
|
||||
@@ -5,10 +5,14 @@ cd /workspace
|
||||
/bin/sh ./scripts/sync_userfront_locales.sh
|
||||
|
||||
cd /workspace/userfront
|
||||
exec flutter run \
|
||||
set -- flutter run \
|
||||
-d web-server \
|
||||
--web-hostname 0.0.0.0 \
|
||||
--web-port "${USERFRONT_INTERNAL_PORT:-5000}" \
|
||||
--wasm \
|
||||
--debug \
|
||||
--dart-define=CLIENT_LOG_DEBUG="${CLIENT_LOG_DEBUG:-false}" \
|
||||
--dart-define=APP_ENV="${APP_ENV:-dev}" \
|
||||
${USERFRONT_FLUTTER_RUN_FLAGS:-} \
|
||||
--no-web-resources-cdn
|
||||
|
||||
exec "$@"
|
||||
|
||||
@@ -9,14 +9,30 @@ void main() {
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
LogPolicy.debugEnabled(
|
||||
appEnv: 'development',
|
||||
productionDebugFlag: 'false',
|
||||
),
|
||||
LogPolicy.debugEnabled(appEnv: 'development', productionDebugFlag: ''),
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
|
||||
test('explicit debug flag applies in development-like environment', () {
|
||||
expect(
|
||||
LogPolicy.debugEnabled(appEnv: 'dev', productionDebugFlag: 'true'),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
LogPolicy.debugEnabled(appEnv: 'development', productionDebugFlag: '1'),
|
||||
isTrue,
|
||||
);
|
||||
expect(
|
||||
LogPolicy.debugEnabled(appEnv: 'dev', productionDebugFlag: 'false'),
|
||||
isFalse,
|
||||
);
|
||||
expect(
|
||||
LogPolicy.debugEnabled(appEnv: 'development', productionDebugFlag: '0'),
|
||||
isFalse,
|
||||
);
|
||||
});
|
||||
|
||||
test('production disables debug unless explicitly enabled', () {
|
||||
expect(
|
||||
LogPolicy.debugEnabled(appEnv: 'production', productionDebugFlag: ''),
|
||||
@@ -94,6 +110,28 @@ void main() {
|
||||
isTrue,
|
||||
);
|
||||
});
|
||||
|
||||
test(
|
||||
'explicit development debug false forwards only warning or higher',
|
||||
() {
|
||||
expect(
|
||||
LogPolicy.shouldRelayClientLog(
|
||||
level: 'INFO',
|
||||
appEnv: 'dev',
|
||||
productionDebugFlag: 'false',
|
||||
),
|
||||
isFalse,
|
||||
);
|
||||
expect(
|
||||
LogPolicy.shouldRelayClientLog(
|
||||
level: 'WARN',
|
||||
appEnv: 'dev',
|
||||
productionDebugFlag: 'false',
|
||||
),
|
||||
isTrue,
|
||||
);
|
||||
},
|
||||
);
|
||||
});
|
||||
|
||||
group('LogPolicy.sanitize', () {
|
||||
|
||||
Reference in New Issue
Block a user