Files
OliveTin/webui.dev/js/LoginForm.js
James Read 0283b51eca feature: Login/Logout links (#443)
* feature: Login/Logout links

* cicd: codestyle
2024-10-19 07:49:41 +00:00

91 lines
2.4 KiB
JavaScript

export class LoginForm extends window.HTMLElement {
setup () {
const tpl = document.getElementById('tplLoginForm')
this.content = tpl.content.cloneNode(true)
this.appendChild(this.content)
this.querySelector('#local-user-login').addEventListener('submit', (e) => {
e.preventDefault()
this.localLoginRequest()
})
}
localLoginRequest () {
const username = this.querySelector('input.username').value
const password = this.querySelector('input.password').value
document.querySelector('.error').innerHTML = ''
window.fetch('/api/LocalUserLogin', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
username: username,
password: password
})
}).then((response) => {
if (response.ok) {
const res = response.json()
if (res !== undefined) {
return res
} else {
throw new Error('Failed to login - no res')
}
} else {
throw new Error('Failed to login')
}
}).then((res) => {
if (res.success) {
window.location.href = '/'
} else {
document.querySelector('.error').innerHTML = 'Login failed.'
}
})
}
processOAuth2Providers (providers) {
if (providers === null) {
return
}
if (providers.length > 0) {
this.querySelector('.login-oauth2').hidden = false
this.querySelector('.login-disabled').hidden = true
for (const provider of providers) {
const providerForm = document.createElement('form')
providerForm.method = 'GET'
providerForm.action = '/oauth/login'
const hiddenField = document.createElement('input')
hiddenField.type = 'hidden'
hiddenField.name = 'provider'
hiddenField.value = provider.Name
providerForm.appendChild(hiddenField)
const providerButton = document.createElement('button')
providerButton.type = 'submit'
providerButton.innerHTML = '<span class = "oauth2-icon">' + provider.Icon + '</span> Login with ' + provider.Title
providerForm.appendChild(providerButton)
this.querySelector('.login-oauth2').appendChild(providerForm)
}
}
}
processLocalLogin (enabled) {
if (enabled) {
this.querySelector('.login-local').hidden = false
this.querySelector('.login-disabled').hidden = true
}
}
}
window.customElements.define('login-form', LoginForm)