import { DEFAULT_CONFIG } from "@goauthentik/common/api/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-refresh-token-list") export class UserOAuthRefreshTokenList extends Table { expandable = true; @property({ type: Number }) userId?: number; static get styles(): CSSResult[] { return super.styles.concat(PFFlex); } async apiEndpoint(): Promise> { return new Oauth2Api(DEFAULT_CONFIG).oauth2RefreshTokensList({ ...(await this.defaultEndpointConfig()), user: this.userId, }); } checkbox = true; clearOnRefresh = 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).oauth2RefreshTokensUsedByList({ id: item.pk, }); }} .delete=${(item: ExpiringBaseGrantModel) => { return new Oauth2Api(DEFAULT_CONFIG).oauth2RefreshTokensDestroy({ 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}`; })} `, ]; } } declare global { interface HTMLElementTagNameMap { "ak-user-oauth-refresh-token-list": UserOAuthRefreshTokenList; } }