import { PlexSource, SourcesApi, FlowsApi, FlowDesignationEnum, PlexSourceUserMatchingModeEnum } from "authentik-api"; import { t } from "@lingui/macro"; import { customElement, property } from "lit-element"; import { html, TemplateResult } from "lit-html"; import { DEFAULT_CONFIG } from "../../../api/Config"; import "../../../elements/forms/FormGroup"; import "../../../elements/forms/HorizontalFormElement"; import { ifDefined } from "lit-html/directives/if-defined"; import { until } from "lit-html/directives/until"; import { first, randomString } from "../../../utils"; import { PlexAPIClient, PlexResource, popupCenterScreen} from "../../../flows/sources/plex/API"; import { ModelForm } from "../../../elements/forms/ModelForm"; @customElement("ak-source-plex-form") export class PlexSourceForm extends ModelForm { loadInstance(pk: string): Promise { return new SourcesApi(DEFAULT_CONFIG).sourcesPlexRead({ slug: pk, }).then(source => { this.plexToken = source.plexToken; this.loadServers(); return source; }); } @property() plexToken?: string; @property({attribute: false}) plexResources?: PlexResource[]; get defaultInstance(): PlexSource | undefined { return { clientId: randomString(40) } as PlexSource; } getSuccessMessage(): string { if (this.instance) { return t`Successfully updated source.`; } else { return t`Successfully created source.`; } } send = (data: PlexSource): Promise => { data.plexToken = this.plexToken; if (this.instance?.slug) { return new SourcesApi(DEFAULT_CONFIG).sourcesPlexUpdate({ slug: this.instance.slug, data: data }); } else { return new SourcesApi(DEFAULT_CONFIG).sourcesPlexCreate({ data: data }); } }; async doAuth(): Promise { const authInfo = await PlexAPIClient.getPin(this.instance?.clientId || ""); const authWindow = popupCenterScreen(authInfo.authUrl, "plex auth", 550, 700); PlexAPIClient.pinPoll(this.instance?.clientId || "", authInfo.pin.id).then(token => { authWindow?.close(); this.plexToken = token; this.loadServers(); }); } async loadServers(): Promise { if (!this.plexToken) { return; } this.plexResources = await new PlexAPIClient(this.plexToken).getServers(); } renderSettings(): TemplateResult { if (!this.plexToken) { return html` `; } return html`

${t`Select which server a user has to be a member of to be allowed to authenticate.`}

${t`Hold control/command to select multiple items.`}

`; } renderForm(): TemplateResult { return html`
${t`Protocol settings`}
${this.renderSettings()}
${t`Flow settings`}

${t`Flow to use when authenticating existing users.`}

${t`Flow to use when enrolling new users.`}

`; } }