Authentication token generation WIP (#98)

First working version.
This commit is contained in:
John Livingston
2024-06-17 14:54:29 +02:00
parent 6bb29d79f8
commit a9b6474b8f
7 changed files with 75 additions and 32 deletions

View File

@ -16,7 +16,6 @@ export function tplTokenList (el: LivechatTokenListElement): TemplateResult {
<tr>
<th scope="col"></th>
<th scope="col">${ptTr(LOC_TOKEN_LABEL)}</th>
<th scope="col">${ptTr(LOC_TOKEN_JID)}</th>
<th scope="col">${ptTr(LOC_TOKEN_PASSWORD)}</th>
<th scope="col"></th>
</tr>
@ -24,19 +23,29 @@ export function tplTokenList (el: LivechatTokenListElement): TemplateResult {
<tbody>
${
repeat(el.tokenList ?? [], (token) => token.id, (token) => {
html`<tr>
return html`<tr>
<td>${
el.mode === 'select'
? html`<input
type="radio"
?selected=${el.currentSelectedToken?.id === token.id}
@click=${el.selectToken}
name="livechat-token"
value=${token.id}
id=${`livechat-token-radio-${token.id}`}
?checked=${el.currentSelectedToken?.id === token.id}
@click=${(ev: Event) => el.selectToken(ev, token)}
/>`
: ''
}</td>
<td>${token.label}</td>
<td>${token.jid}</td>
<td>${token.password}</td>
<td>
<label for=${`livechat-token-radio-${token.id}`}>
${token.label}
</label>
</td>
<td>
<label for=${`livechat-token-radio-${token.id}`}>
${token.password}
</label>
</td>
<td>
<button type="button"
class="livechat-revoke-token"

View File

@ -42,6 +42,10 @@ export class LivechatTokenListElement extends LivechatElement {
return new Task(this, {
task: async () => {
this.tokenList = await this._tokenListService.fetchTokenList()
if (this.mode === 'select' && this.tokenList.length) {
this.currentSelectedToken = this.tokenList[0]
this.dispatchEvent(new CustomEvent('update', {}))
}
this.actionDisabled = false
},
args: () => []
@ -57,13 +61,17 @@ export class LivechatTokenListElement extends LivechatElement {
}
public selectToken (ev: Event, token: LivechatToken): void {
ev.preventDefault()
if (!this.tokenList?.includes(token)) { return }
this.currentSelectedToken = token
this.requestUpdate('tokenList')
this.dispatchEvent(new CustomEvent('update', {}))
}
public async revokeToken (token: LivechatToken): Promise<void> {
const confirmMsg = await this.ptTranslate(LOC_TOKEN_ACTION_REVOKE_CONFIRM)
// Note: we can't use peertube showModal to confirm if we already are in a modal...
if (!window.confirm(confirmMsg)) { return }
this.actionDisabled = true
try {
await this._tokenListService.revokeToken(token)