forked from baron/baron-sso
접속이력 브라우저 컬럼 추가
This commit is contained in:
@@ -509,6 +509,7 @@ saved_success = "Saved successfully."
|
|||||||
greeting = "Hello, {{name}}."
|
greeting = "Hello, {{name}}."
|
||||||
|
|
||||||
[msg.userfront.audit]
|
[msg.userfront.audit]
|
||||||
|
browser = "Browser: {{value}}"
|
||||||
date = "Date: {{value}}"
|
date = "Date: {{value}}"
|
||||||
device = "Device: {{value}}"
|
device = "Device: {{value}}"
|
||||||
end = "No more items to show."
|
end = "No more items to show."
|
||||||
@@ -2058,6 +2059,7 @@ dev_console = "Dev Console"
|
|||||||
action = "Action"
|
action = "Action"
|
||||||
app = "App"
|
app = "App"
|
||||||
auth_method = "Auth Method"
|
auth_method = "Auth Method"
|
||||||
|
browser = "Browser"
|
||||||
date = "Date"
|
date = "Date"
|
||||||
device = "Device"
|
device = "Device"
|
||||||
ip = "IP"
|
ip = "IP"
|
||||||
|
|||||||
@@ -171,6 +171,7 @@ missing_jwks_uri = "JWKS URI를 입력해야 합니다."
|
|||||||
private_key_jwt_requires_public_key = "서명 키 기반 인증을 사용하려면 JWKS URI가 필요합니다."
|
private_key_jwt_requires_public_key = "서명 키 기반 인증을 사용하려면 JWKS URI가 필요합니다."
|
||||||
|
|
||||||
[msg.userfront.audit]
|
[msg.userfront.audit]
|
||||||
|
browser = "브라우저: {{value}}"
|
||||||
date = "접속일자: {{value}}"
|
date = "접속일자: {{value}}"
|
||||||
device = "접속환경: {{value}}"
|
device = "접속환경: {{value}}"
|
||||||
end = "더 이상 항목이 없습니다."
|
end = "더 이상 항목이 없습니다."
|
||||||
@@ -2452,6 +2453,7 @@ dev_console = "Dev Console"
|
|||||||
action = "관리"
|
action = "관리"
|
||||||
app = "애플리케이션"
|
app = "애플리케이션"
|
||||||
auth_method = "인증수단"
|
auth_method = "인증수단"
|
||||||
|
browser = "브라우저"
|
||||||
date = "접속일자"
|
date = "접속일자"
|
||||||
device = "접속환경"
|
device = "접속환경"
|
||||||
ip = "IP"
|
ip = "IP"
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ missing = "No active session was found."
|
|||||||
greeting = "Hello, {name}."
|
greeting = "Hello, {name}."
|
||||||
|
|
||||||
[msg.userfront.audit]
|
[msg.userfront.audit]
|
||||||
|
browser = "Browser: {value}"
|
||||||
date = "Date: {value}"
|
date = "Date: {value}"
|
||||||
device = "Device: {value}"
|
device = "Device: {value}"
|
||||||
end = "No more items to show."
|
end = "No more items to show."
|
||||||
@@ -444,6 +445,7 @@ toggle_label = "Active only"
|
|||||||
action = "Action"
|
action = "Action"
|
||||||
app = "App"
|
app = "App"
|
||||||
auth_method = "Auth Method"
|
auth_method = "Auth Method"
|
||||||
|
browser = "Browser"
|
||||||
date = "Date"
|
date = "Date"
|
||||||
device = "Device"
|
device = "Device"
|
||||||
ip = "IP"
|
ip = "IP"
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ verify_code_failed = "인증 실패: {error}"
|
|||||||
missing = "활성 세션이 없습니다."
|
missing = "활성 세션이 없습니다."
|
||||||
|
|
||||||
[msg.userfront.audit]
|
[msg.userfront.audit]
|
||||||
|
browser = "브라우저: {value}"
|
||||||
date = "접속일자: {value}"
|
date = "접속일자: {value}"
|
||||||
device = "접속환경: {value}"
|
device = "접속환경: {value}"
|
||||||
end = "더 이상 항목이 없습니다."
|
end = "더 이상 항목이 없습니다."
|
||||||
@@ -647,6 +648,7 @@ toggle_label = "활성 세션만"
|
|||||||
action = "관리"
|
action = "관리"
|
||||||
app = "애플리케이션"
|
app = "애플리케이션"
|
||||||
auth_method = "인증수단"
|
auth_method = "인증수단"
|
||||||
|
browser = "브라우저"
|
||||||
date = "접속일자"
|
date = "접속일자"
|
||||||
device = "접속환경"
|
device = "접속환경"
|
||||||
ip = "IP"
|
ip = "IP"
|
||||||
|
|||||||
@@ -223,6 +223,7 @@ title = ""
|
|||||||
greeting = ""
|
greeting = ""
|
||||||
|
|
||||||
[msg.userfront.audit]
|
[msg.userfront.audit]
|
||||||
|
browser = ""
|
||||||
date = ""
|
date = ""
|
||||||
device = ""
|
device = ""
|
||||||
end = ""
|
end = ""
|
||||||
@@ -622,6 +623,7 @@ toggle_label = ""
|
|||||||
action = ""
|
action = ""
|
||||||
app = ""
|
app = ""
|
||||||
auth_method = ""
|
auth_method = ""
|
||||||
|
browser = ""
|
||||||
date = ""
|
date = ""
|
||||||
device = ""
|
device = ""
|
||||||
ip = ""
|
ip = ""
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
static const double _historySessionMinWidth = 92;
|
static const double _historySessionMinWidth = 92;
|
||||||
static const double _historyOtherColumnsBaselineWidth = 780;
|
static const double _historyOtherColumnsBaselineWidth = 780;
|
||||||
static const int _historySessionMinVisibleChars = 8;
|
static const int _historySessionMinVisibleChars = 8;
|
||||||
|
static const double _historyStatusColumnWidth = 92;
|
||||||
|
static const double _historyActionColumnWidth = 108;
|
||||||
|
|
||||||
final ScrollController _pageScrollController = ScrollController();
|
final ScrollController _pageScrollController = ScrollController();
|
||||||
final ScrollController _rpScrollController = ScrollController();
|
final ScrollController _rpScrollController = ScrollController();
|
||||||
@@ -1678,18 +1680,23 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildHistoryStatusBadge(_HistorySessionStatus status) {
|
Widget _buildHistoryStatusBadge(_HistorySessionStatus status) {
|
||||||
return Container(
|
return SizedBox(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
width: _historyStatusColumnWidth,
|
||||||
decoration: BoxDecoration(
|
child: Center(
|
||||||
color: _historySessionStatusColor(status),
|
child: Container(
|
||||||
borderRadius: BorderRadius.circular(999),
|
padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4),
|
||||||
),
|
decoration: BoxDecoration(
|
||||||
child: Text(
|
color: _historySessionStatusColor(status),
|
||||||
_historySessionStatusLabel(status),
|
borderRadius: BorderRadius.circular(999),
|
||||||
style: const TextStyle(
|
),
|
||||||
fontSize: 11,
|
child: Text(
|
||||||
color: Colors.white,
|
_historySessionStatusLabel(status),
|
||||||
fontWeight: FontWeight.w600,
|
style: const TextStyle(
|
||||||
|
fontSize: 11,
|
||||||
|
color: Colors.white,
|
||||||
|
fontWeight: FontWeight.w600,
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -1703,7 +1710,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
final canRevoke =
|
final canRevoke =
|
||||||
!isCurrent && _revokingSessionId == null && session.isActive;
|
!isCurrent && _revokingSessionId == null && session.isActive;
|
||||||
return SizedBox(
|
return SizedBox(
|
||||||
width: 108,
|
width: _historyActionColumnWidth,
|
||||||
child: OutlinedButton(
|
child: OutlinedButton(
|
||||||
onPressed: canRevoke ? () => _onRevokeSession(session) : null,
|
onPressed: canRevoke ? () => _onRevokeSession(session) : null,
|
||||||
style: OutlinedButton.styleFrom(
|
style: OutlinedButton.styleFrom(
|
||||||
@@ -1797,6 +1804,9 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
DataColumn(
|
DataColumn(
|
||||||
label: Text(tr('ui.userfront.audit.table.device')),
|
label: Text(tr('ui.userfront.audit.table.device')),
|
||||||
),
|
),
|
||||||
|
DataColumn(
|
||||||
|
label: Text(tr('ui.userfront.audit.table.browser')),
|
||||||
|
),
|
||||||
DataColumn(
|
DataColumn(
|
||||||
label: Text(tr('ui.userfront.audit.table.auth_method')),
|
label: Text(tr('ui.userfront.audit.table.auth_method')),
|
||||||
),
|
),
|
||||||
@@ -1804,10 +1814,20 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
label: Text(tr('ui.userfront.audit.table.result')),
|
label: Text(tr('ui.userfront.audit.table.result')),
|
||||||
),
|
),
|
||||||
DataColumn(
|
DataColumn(
|
||||||
label: Text(tr('ui.userfront.audit.table.status')),
|
label: SizedBox(
|
||||||
|
width: _historyStatusColumnWidth,
|
||||||
|
child: Center(
|
||||||
|
child: Text(tr('ui.userfront.audit.table.status')),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
DataColumn(
|
DataColumn(
|
||||||
label: Text(tr('ui.userfront.audit.table.action')),
|
label: SizedBox(
|
||||||
|
width: _historyActionColumnWidth,
|
||||||
|
child: Center(
|
||||||
|
child: Text(tr('ui.userfront.audit.table.action')),
|
||||||
|
),
|
||||||
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
rows: items.map((log) {
|
rows: items.map((log) {
|
||||||
@@ -1828,6 +1848,7 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
final deviceLabel = _deviceLabelFromUserAgent(
|
final deviceLabel = _deviceLabelFromUserAgent(
|
||||||
log.userAgent,
|
log.userAgent,
|
||||||
);
|
);
|
||||||
|
final browserLabel = _sessionBrowserLabel(log.userAgent);
|
||||||
return DataRow(
|
return DataRow(
|
||||||
cells: [
|
cells: [
|
||||||
DataCell(
|
DataCell(
|
||||||
@@ -1853,6 +1874,13 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
DataCell(_selectableText(deviceLabel)),
|
DataCell(_selectableText(deviceLabel)),
|
||||||
|
DataCell(
|
||||||
|
_selectableText(
|
||||||
|
browserLabel.isEmpty
|
||||||
|
? tr('ui.common.hyphen', fallback: '-')
|
||||||
|
: browserLabel,
|
||||||
|
),
|
||||||
|
),
|
||||||
DataCell(_buildAuthMethodCell(log, authMethod)),
|
DataCell(_buildAuthMethodCell(log, authMethod)),
|
||||||
DataCell(
|
DataCell(
|
||||||
_selectableText(
|
_selectableText(
|
||||||
@@ -2005,6 +2033,16 @@ class _DashboardScreenState extends ConsumerState<DashboardScreen> {
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
_selectableText(
|
||||||
|
tr(
|
||||||
|
'msg.userfront.audit.browser',
|
||||||
|
params: {
|
||||||
|
'value': _sessionBrowserLabel(log.userAgent).isEmpty
|
||||||
|
? tr('ui.common.hyphen', fallback: '-')
|
||||||
|
: _sessionBrowserLabel(log.userAgent),
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
_buildAuthMethodLine(
|
_buildAuthMethodLine(
|
||||||
log,
|
log,
|
||||||
log.authMethod.isNotEmpty
|
log.authMethod.isNotEmpty
|
||||||
|
|||||||
@@ -413,6 +413,7 @@ const Map<String, String> koStrings = {
|
|||||||
"msg.dev.sidebar.notice": "개발자 전용 콘솔입니다.",
|
"msg.dev.sidebar.notice": "개발자 전용 콘솔입니다.",
|
||||||
"msg.dev.sidebar.notice_detail": "연동 앱 등록 및 관리를 수행할 수 있습니다.",
|
"msg.dev.sidebar.notice_detail": "연동 앱 등록 및 관리를 수행할 수 있습니다.",
|
||||||
"msg.info.saved_success": "저장이 완료되었습니다.",
|
"msg.info.saved_success": "저장이 완료되었습니다.",
|
||||||
|
"msg.userfront.audit.browser": "브라우저: {{value}}",
|
||||||
"msg.userfront.audit.date": "접속일자: {{value}}",
|
"msg.userfront.audit.date": "접속일자: {{value}}",
|
||||||
"msg.userfront.audit.device": "접속환경: {{value}}",
|
"msg.userfront.audit.device": "접속환경: {{value}}",
|
||||||
"msg.userfront.audit.end": "더 이상 항목이 없습니다.",
|
"msg.userfront.audit.end": "더 이상 항목이 없습니다.",
|
||||||
@@ -1697,6 +1698,7 @@ const Map<String, String> koStrings = {
|
|||||||
"ui.userfront.audit.table.action": "관리",
|
"ui.userfront.audit.table.action": "관리",
|
||||||
"ui.userfront.audit.table.app": "애플리케이션",
|
"ui.userfront.audit.table.app": "애플리케이션",
|
||||||
"ui.userfront.audit.table.auth_method": "인증수단",
|
"ui.userfront.audit.table.auth_method": "인증수단",
|
||||||
|
"ui.userfront.audit.table.browser": "브라우저",
|
||||||
"ui.userfront.audit.table.date": "접속일자",
|
"ui.userfront.audit.table.date": "접속일자",
|
||||||
"ui.userfront.audit.table.device": "접속환경",
|
"ui.userfront.audit.table.device": "접속환경",
|
||||||
"ui.userfront.audit.table.ip": "IP",
|
"ui.userfront.audit.table.ip": "IP",
|
||||||
@@ -2316,6 +2318,7 @@ const Map<String, String> enStrings = {
|
|||||||
"msg.dev.sidebar.notice": "Developer Console",
|
"msg.dev.sidebar.notice": "Developer Console",
|
||||||
"msg.dev.sidebar.notice_detail": "Register and manage client applications.",
|
"msg.dev.sidebar.notice_detail": "Register and manage client applications.",
|
||||||
"msg.info.saved_success": "Saved successfully.",
|
"msg.info.saved_success": "Saved successfully.",
|
||||||
|
"msg.userfront.audit.browser": "Browser: {{value}}",
|
||||||
"msg.userfront.audit.date": "Date: {{value}}",
|
"msg.userfront.audit.date": "Date: {{value}}",
|
||||||
"msg.userfront.audit.device": "Device: {{value}}",
|
"msg.userfront.audit.device": "Device: {{value}}",
|
||||||
"msg.userfront.audit.end": "No more items to show.",
|
"msg.userfront.audit.end": "No more items to show.",
|
||||||
@@ -3705,6 +3708,7 @@ const Map<String, String> enStrings = {
|
|||||||
"ui.userfront.audit.table.action": "Action",
|
"ui.userfront.audit.table.action": "Action",
|
||||||
"ui.userfront.audit.table.app": "App",
|
"ui.userfront.audit.table.app": "App",
|
||||||
"ui.userfront.audit.table.auth_method": "Auth Method",
|
"ui.userfront.audit.table.auth_method": "Auth Method",
|
||||||
|
"ui.userfront.audit.table.browser": "Browser",
|
||||||
"ui.userfront.audit.table.date": "Date",
|
"ui.userfront.audit.table.date": "Date",
|
||||||
"ui.userfront.audit.table.device": "Device",
|
"ui.userfront.audit.table.device": "Device",
|
||||||
"ui.userfront.audit.table.ip": "IP",
|
"ui.userfront.audit.table.ip": "IP",
|
||||||
|
|||||||
Reference in New Issue
Block a user