import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { uiConfig } from "@goauthentik/common/ui/config"; import { getRelativeTime } from "@goauthentik/common/utils"; import "@goauthentik/components/ak-status-label"; import "@goauthentik/elements/chips/Chip"; import "@goauthentik/elements/chips/ChipGroup"; import "@goauthentik/elements/forms/DeleteBulkForm"; import { PaginatedResponse } from "@goauthentik/elements/table/Table"; import { Table, TableColumn } from "@goauthentik/elements/table/Table"; import { msg } from "@lit/localize"; import { CSSResult, TemplateResult, html } from "lit"; import { customElement, property } from "lit/decorators.js"; import PFFlex from "@patternfly/patternfly/layouts/Flex/flex.css"; import { ExpiringBaseGrantModel, Oauth2Api, TokenModel } from "@goauthentik/api"; @customElement("ak-user-oauth-access-token-list") export class UserOAuthAccessTokenList extends Table { expandable = true; @property({ type: Number }) userId?: number; static get styles(): CSSResult[] { return super.styles.concat(PFFlex); } async apiEndpoint(page: number): Promise> { return new Oauth2Api(DEFAULT_CONFIG).oauth2AccessTokensList({ user: this.userId, ordering: "expires", page: page, pageSize: (await uiConfig()).pagination.perPage, }); } checkbox = true; order = "-expires"; columns(): TableColumn[] { return [ new TableColumn(msg("Provider"), "provider"), new TableColumn(msg("Revoked?"), "revoked"), new TableColumn(msg("Expires"), "expires"), new TableColumn(msg("Scopes"), "scope"), ]; } renderExpanded(item: TokenModel): TemplateResult { return html`

${msg("ID Token")}

${item.idToken}
`; } renderToolbarSelected(): TemplateResult { const disabled = this.selectedElements.length < 1; return html` { return new Oauth2Api(DEFAULT_CONFIG).oauth2AccessTokensUsedByList({ id: item.pk, }); }} .delete=${(item: ExpiringBaseGrantModel) => { return new Oauth2Api(DEFAULT_CONFIG).oauth2AccessTokensDestroy({ id: item.pk, }); }} > `; } row(item: TokenModel): TemplateResult[] { return [ html` ${item.provider?.name} `, html``, html`${item.expires ? html`
${getRelativeTime(item.expires)}
${item.expires.toLocaleString()}` : msg("-")}`, html` ${item.scope.map((scope) => { return html`${scope}`; })} `, ]; } }