From 11ed661f86a512f78f66d604a10c1d47d39f2c39 Mon Sep 17 00:00:00 2001 From: Elias Schneider Date: Wed, 16 Oct 2024 08:49:19 +0200 Subject: [PATCH] feat: use improve table for users and audit logs --- .../internal/controller/oidc_controller.go | 4 +- .../src/lib/components/advanced-table.svelte | 4 + .../settings/admin/users/user-list.svelte | 170 ++++++------------ .../settings/audit-log/audit-log-list.svelte | 103 +++-------- 4 files changed, 87 insertions(+), 194 deletions(-) diff --git a/backend/internal/controller/oidc_controller.go b/backend/internal/controller/oidc_controller.go index 0bab3fb..8982c8a 100644 --- a/backend/internal/controller/oidc_controller.go +++ b/backend/internal/controller/oidc_controller.go @@ -18,7 +18,7 @@ func NewOidcController(group *gin.RouterGroup, jwtAuthMiddleware *middleware.Jwt group.POST("/oidc/authorize", jwtAuthMiddleware.Add(false), oc.authorizeHandler) group.POST("/oidc/authorize/new-client", jwtAuthMiddleware.Add(false), oc.authorizeNewClientHandler) - group.POST("/oidc/token", oc.createIDTokenHandler) + group.POST("/oidc/token", oc.createTokensHandler) group.GET("/oidc/userinfo", oc.userInfoHandler) group.GET("/oidc/clients", jwtAuthMiddleware.Add(true), oc.listClientsHandler) @@ -91,7 +91,7 @@ func (oc *OidcController) authorizeNewClientHandler(c *gin.Context) { c.JSON(http.StatusOK, response) } -func (oc *OidcController) createIDTokenHandler(c *gin.Context) { +func (oc *OidcController) createTokensHandler(c *gin.Context) { var input dto.OidcIdTokenDto if err := c.ShouldBind(&input); err != nil { diff --git a/frontend/src/lib/components/advanced-table.svelte b/frontend/src/lib/components/advanced-table.svelte index 5016d44..8e73485 100644 --- a/frontend/src/lib/components/advanced-table.svelte +++ b/frontend/src/lib/components/advanced-table.svelte @@ -11,12 +11,14 @@ let { items, selectedIds = $bindable(), + withoutSearch = false, fetchItems, columns, rows }: { items: Paginated; selectedIds?: string[]; + withoutSearch?: boolean; fetchItems: (search: string, page: number, limit: number) => Promise>; columns: (string | { label: string; hidden?: boolean })[]; rows: Snippet<[{ item: T }]>; @@ -65,12 +67,14 @@
+ {#if !withoutSearch} onSearch((e.target as HTMLInputElement).value)} /> + {/if} diff --git a/frontend/src/routes/settings/admin/users/user-list.svelte b/frontend/src/routes/settings/admin/users/user-list.svelte index 3bfbeab..b43b8cb 100644 --- a/frontend/src/routes/settings/admin/users/user-list.svelte +++ b/frontend/src/routes/settings/admin/users/user-list.svelte @@ -1,16 +1,14 @@ - debouncedSearch((e.target as HTMLInputElement).value)} -/> - - - - - - Email - Username - - - Actions - - - - - {#if users.data.length === 0} - - No users found - - {:else} - {#each users.data as user} - - - - {user.email} - {user.username} - - - - - - - - createOneTimeAccessToken(user.id)} - >One-time link - Edit - deleteUser(user)} - >Delete - - - - - {/each} - {/if} - - - -{#if users?.data?.length ?? 0 > 0} - - (users = await userService.list(search, { - page: p, - limit: pagination.limit - }))} - bind:page={users.pagination.currentPage} - let:pages - let:currentPage - > - - - - - {#each pages as page (page.key)} - {#if page.type === 'ellipsis'} - - - - {:else} - - - {page.value} - - - {/if} - {/each} - - - - - -{/if} + + {#snippet rows({ item })} + {item.firstName} + {item.lastName} + {item.email} + {item.username} + + + + + + + + createOneTimeAccessToken(item.id)} + >One-time link + Edit + deleteUser(item)} + >Delete + + + + {/snippet} + diff --git a/frontend/src/routes/settings/audit-log/audit-log-list.svelte b/frontend/src/routes/settings/audit-log/audit-log-list.svelte index f12bd8c..603eaaf 100644 --- a/frontend/src/routes/settings/audit-log/audit-log-list.svelte +++ b/frontend/src/routes/settings/audit-log/audit-log-list.svelte @@ -1,20 +1,22 @@ - - - - Time - Event - Approximate Location - IP Address - Device - Client - - - - {#if auditLogs.data.length === 0} - - No logs found - - {:else} - {#each auditLogs.data as auditLog} - - {new Date(auditLog.createdAt).toLocaleString()} - - {toFriendlyEventString(auditLog.event)} - - {auditLog.city && auditLog.country ? `${auditLog.city}, ${auditLog.country}` : 'Unknown'} - {auditLog.ipAddress} - {auditLog.device} - {auditLog.data.clientName} - - {/each} - {/if} - - - -{#if auditLogs?.data?.length ?? 0 > 0} - - (auditLogs = await auditLogService.list({ - page: p, - limit: pagination.limit - }))} - bind:page={auditLogs.pagination.currentPage} - let:pages - let:currentPage - > - - - - - {#each pages as page (page.key)} - {#if page.type === 'ellipsis'} - - - - {:else} - - - {page.value} - - - {/if} - {/each} - - - - - -{/if} + + {#snippet rows({ item })} + {new Date(item.createdAt).toLocaleString()} + + {toFriendlyEventString(item.event)} + + {item.city && item.country ? `${item.city}, ${item.country}` : 'Unknown'} + {item.ipAddress} + {item.device} + {item.data.clientName} + {/snippet} +