import { DEFAULT_CONFIG } from "@goauthentik/web/api/Config"; import { ERROR_CLASS, SECONDARY_CLASS, SUCCESS_CLASS } from "@goauthentik/web/constants"; import { PFSize } from "@goauthentik/web/elements/Spinner"; import { ActionButton } from "@goauthentik/web/elements/buttons/ActionButton"; import { MessageLevel } from "@goauthentik/web/elements/messages/Message"; import { showMessage } from "@goauthentik/web/elements/messages/MessageContainer"; import { TemplateResult, html } from "lit"; import { customElement, property } from "lit/decorators.js"; import { CoreApi, ResponseError } from "@goauthentik/api"; @customElement("ak-token-copy-button") export class TokenCopyButton extends ActionButton { @property() identifier?: string; @property() buttonClass: string = SECONDARY_CLASS; apiRequest: () => Promise = () => { this.setLoading(); if (!this.identifier) { return Promise.reject(); } return new CoreApi(DEFAULT_CONFIG) .coreTokensViewKeyRetrieve({ identifier: this.identifier, }) .then((token) => { if (!token.key) { return Promise.reject(); } setTimeout(() => { this.buttonClass = SECONDARY_CLASS; }, 1500); this.buttonClass = SUCCESS_CLASS; return token.key; }) .catch((err: Error | ResponseError | undefined) => { this.buttonClass = ERROR_CLASS; if (!(err instanceof ResponseError)) { setTimeout(() => { this.buttonClass = SECONDARY_CLASS; }, 1500); throw err; } return err.response.json().then((errResp) => { setTimeout(() => { this.buttonClass = SECONDARY_CLASS; }, 1500); throw new Error(errResp["detail"]); }); }); }; render(): TemplateResult { return html``; } }