 680db9bae6
			
		
	
	680db9bae6
	
	
	
		
			
			* unrelated: dont show nested for user Signed-off-by: Jens Langhammer <jens@goauthentik.io> * unrelated: fix error when no extents in. map Signed-off-by: Jens Langhammer <jens@goauthentik.io> * events: use pending_user when possible Signed-off-by: Jens Langhammer <jens@goauthentik.io> * fix for identification stage "fake" user Signed-off-by: Jens Langhammer <jens@goauthentik.io> * better username rendering Signed-off-by: Jens Langhammer <jens@goauthentik.io> --------- Signed-off-by: Jens Langhammer <jens@goauthentik.io>
		
			
				
	
	
		
			82 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import { renderEventUser } from "@goauthentik/admin/events/utils";
 | |
| import { DEFAULT_CONFIG } from "@goauthentik/common/api/config";
 | |
| import { EventWithContext } from "@goauthentik/common/events";
 | |
| import { actionToLabel } from "@goauthentik/common/labels";
 | |
| import { formatElapsedTime } from "@goauthentik/common/temporal";
 | |
| import "@goauthentik/components/ak-event-info";
 | |
| import "@goauthentik/elements/Tabs";
 | |
| import "@goauthentik/elements/buttons/Dropdown";
 | |
| import "@goauthentik/elements/buttons/ModalButton";
 | |
| import "@goauthentik/elements/buttons/SpinnerButton";
 | |
| import { PaginatedResponse, Table, TableColumn } from "@goauthentik/elements/table/Table";
 | |
| import { SlottedTemplateResult } from "@goauthentik/elements/types";
 | |
| 
 | |
| import { msg } from "@lit/localize";
 | |
| import { TemplateResult, html } from "lit";
 | |
| import { customElement, property } from "lit/decorators.js";
 | |
| 
 | |
| import { Event, EventsApi } from "@goauthentik/api";
 | |
| 
 | |
| @customElement("ak-events-user")
 | |
| export class UserEvents extends Table<Event> {
 | |
|     expandable = true;
 | |
| 
 | |
|     @property()
 | |
|     order = "-created";
 | |
| 
 | |
|     @property()
 | |
|     targetUser!: string;
 | |
| 
 | |
|     async apiEndpoint(): Promise<PaginatedResponse<Event>> {
 | |
|         return new EventsApi(DEFAULT_CONFIG).eventsEventsList({
 | |
|             ...(await this.defaultEndpointConfig()),
 | |
|             username: this.targetUser,
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     columns(): TableColumn[] {
 | |
|         return [
 | |
|             new TableColumn(msg("Action"), "action"),
 | |
|             new TableColumn(msg("User"), "enabled"),
 | |
|             new TableColumn(msg("Creation Date"), "created"),
 | |
|             new TableColumn(msg("Client IP"), "client_ip"),
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     row(item: EventWithContext): SlottedTemplateResult[] {
 | |
|         return [
 | |
|             html`${actionToLabel(item.action)}`,
 | |
|             renderEventUser(item),
 | |
|             html`<div>${formatElapsedTime(item.created)}</div>
 | |
|                 <small>${item.created.toLocaleString()}</small>`,
 | |
|             html`<span>${item.clientIp || msg("-")}</span>`,
 | |
|         ];
 | |
|     }
 | |
| 
 | |
|     renderExpanded(item: Event): TemplateResult {
 | |
|         return html` <td role="cell" colspan="4">
 | |
|                 <div class="pf-c-table__expandable-row-content">
 | |
|                     <ak-event-info .event=${item as EventWithContext}></ak-event-info>
 | |
|                 </div>
 | |
|             </td>
 | |
|             <td></td>
 | |
|             <td></td>
 | |
|             <td></td>`;
 | |
|     }
 | |
| 
 | |
|     renderEmpty(): TemplateResult {
 | |
|         return super.renderEmpty(
 | |
|             html`<ak-empty-state
 | |
|                 ><span>${msg("No Events found.")}</span>
 | |
|                 <div slot="body">${msg("No matching events could be found.")}</div>
 | |
|             </ak-empty-state>`,
 | |
|         );
 | |
|     }
 | |
| }
 | |
| 
 | |
| declare global {
 | |
|     interface HTMLElementTagNameMap {
 | |
|         "ak-events-user": UserEvents;
 | |
|     }
 | |
| }
 |