LoginForm.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. export class LoginForm extends window.HTMLElement {
  2. setup () {
  3. const tpl = document.getElementById('tplLoginForm')
  4. this.content = tpl.content.cloneNode(true)
  5. this.appendChild(this.content)
  6. this.querySelector('#local-user-login').addEventListener('submit', (e) => {
  7. e.preventDefault()
  8. this.localLoginRequest()
  9. })
  10. }
  11. localLoginRequest () {
  12. const username = this.querySelector('input.username').value
  13. const password = this.querySelector('input.password').value
  14. document.querySelector('.error').innerHTML = ''
  15. window.fetch('/api/LocalUserLogin', {
  16. method: 'POST',
  17. headers: {
  18. 'Content-Type': 'application/json'
  19. },
  20. body: JSON.stringify({
  21. username: username,
  22. password: password
  23. })
  24. }).then((response) => {
  25. if (response.ok) {
  26. const res = response.json()
  27. if (res !== undefined) {
  28. return res
  29. } else {
  30. throw new Error('Failed to login - no res')
  31. }
  32. } else {
  33. throw new Error('Failed to login')
  34. }
  35. }).then((res) => {
  36. if (res.success) {
  37. window.location.href = '/'
  38. } else {
  39. document.querySelector('.error').innerHTML = 'Login failed.'
  40. }
  41. })
  42. }
  43. processOAuth2Providers (providers) {
  44. if (providers === null) {
  45. return
  46. }
  47. if (providers.length > 0) {
  48. this.querySelector('.login-oauth2').hidden = false
  49. this.querySelector('.login-disabled').hidden = true
  50. for (const provider of providers) {
  51. const providerForm = document.createElement('form')
  52. providerForm.method = 'GET'
  53. providerForm.action = '/oauth/login'
  54. const hiddenField = document.createElement('input')
  55. hiddenField.type = 'hidden'
  56. hiddenField.name = 'provider'
  57. hiddenField.value = provider.Name
  58. providerForm.appendChild(hiddenField)
  59. const providerButton = document.createElement('button')
  60. providerButton.type = 'submit'
  61. providerButton.innerHTML = '<span class = "oauth2-icon">' + provider.Icon + '</span> Login with ' + provider.Title
  62. providerForm.appendChild(providerButton)
  63. this.querySelector('.login-oauth2').appendChild(providerForm)
  64. }
  65. }
  66. }
  67. processLocalLogin (enabled) {
  68. if (enabled) {
  69. this.querySelector('.login-local').hidden = false
  70. this.querySelector('.login-disabled').hidden = true
  71. }
  72. }
  73. }
  74. window.customElements.define('login-form', LoginForm)