LaunchpadController.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /* eslint-disable
  2. max-len,
  3. no-return-assign,
  4. no-undef,
  5. */
  6. // TODO: This file was created by bulk-decaffeinate.
  7. // Fix any style issues and re-enable lint.
  8. /*
  9. * decaffeinate suggestions:
  10. * DS102: Remove unnecessary code created because of implicit returns
  11. * DS207: Consider shorter variations of null checks
  12. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  13. */
  14. define(['base'], App =>
  15. App.controller('LaunchpadController', function($scope, $http, $timeout) {
  16. $scope.adminUserExists = window.data.adminUserExists
  17. $scope.ideJsPath = window.data.ideJsPath
  18. $scope.authMethod = window.data.authMethod
  19. $scope.createAdminSuccess = null
  20. $scope.createAdminError = null
  21. $scope.statusChecks = {
  22. ideJs: { status: 'inflight', error: null },
  23. websocket: { status: 'inflight', error: null },
  24. healthCheck: { status: 'inflight', error: null }
  25. }
  26. $scope.testEmail = {
  27. emailAddress: '',
  28. inflight: false,
  29. status: null // | 'ok' | 'success'
  30. }
  31. $scope.shouldShowAdminForm = () => !$scope.adminUserExists
  32. $scope.onCreateAdminSuccess = function(response) {
  33. const { status } = response
  34. if (status >= 200 && status < 300) {
  35. return ($scope.createAdminSuccess = true)
  36. }
  37. }
  38. $scope.onCreateAdminError = () => ($scope.createAdminError = true)
  39. $scope.sendTestEmail = function() {
  40. $scope.testEmail.inflight = true
  41. $scope.testEmail.status = null
  42. return $http
  43. .post('/launchpad/send_test_email', {
  44. email: $scope.testEmail.emailAddress,
  45. _csrf: window.csrfToken
  46. })
  47. .then(function(response) {
  48. const { status } = response
  49. $scope.testEmail.inflight = false
  50. if (status >= 200 && status < 300) {
  51. return ($scope.testEmail.status = 'ok')
  52. }
  53. })
  54. .catch(function() {
  55. $scope.testEmail.inflight = false
  56. return ($scope.testEmail.status = 'error')
  57. })
  58. }
  59. $scope.tryFetchIdeJs = function() {
  60. $scope.statusChecks.ideJs.status = 'inflight'
  61. return $timeout(
  62. () =>
  63. $http
  64. .get($scope.ideJsPath)
  65. .then(function(response) {
  66. const { status } = response
  67. if (status >= 200 && status < 300) {
  68. return ($scope.statusChecks.ideJs.status = 'ok')
  69. }
  70. })
  71. .catch(function(response) {
  72. const { status } = response
  73. $scope.statusChecks.ideJs.status = 'error'
  74. return ($scope.statusChecks.ideJs.error = new Error(
  75. `Http status: ${status}`
  76. ))
  77. }),
  78. 1000
  79. )
  80. }
  81. $scope.tryOpenWebSocket = function() {
  82. $scope.statusChecks.websocket.status = 'inflight'
  83. return $timeout(function() {
  84. if (typeof io === 'undefined' || io === null) {
  85. $scope.statusChecks.websocket.status = 'error'
  86. $scope.statusChecks.websocket.error = 'socket.io not loaded'
  87. return
  88. }
  89. const socket = io.connect(
  90. null,
  91. {
  92. reconnect: false,
  93. 'connect timeout': 30 * 1000,
  94. 'force new connection': true
  95. }
  96. )
  97. socket.on('connectionAccepted', function() {
  98. $scope.statusChecks.websocket.status = 'ok'
  99. return $scope.$apply(function() {})
  100. })
  101. socket.on('connectionRejected', function(err) {
  102. $scope.statusChecks.websocket.status = 'error'
  103. $scope.statusChecks.websocket.error = err
  104. return $scope.$apply(function() {})
  105. })
  106. return socket.on('connect_failed', function(err) {
  107. $scope.statusChecks.websocket.status = 'error'
  108. $scope.statusChecks.websocket.error = err
  109. return $scope.$apply(function() {})
  110. })
  111. }, 1000)
  112. }
  113. $scope.tryHealthCheck = function() {
  114. $scope.statusChecks.healthCheck.status = 'inflight'
  115. return $http
  116. .get('/health_check')
  117. .then(function(response) {
  118. const { status } = response
  119. if (status >= 200 && status < 300) {
  120. return ($scope.statusChecks.healthCheck.status = 'ok')
  121. }
  122. })
  123. .catch(function(response) {
  124. const { status } = response
  125. $scope.statusChecks.healthCheck.status = 'error'
  126. return ($scope.statusChecks.healthCheck.error = new Error(
  127. `Http status: ${status}`
  128. ))
  129. })
  130. }
  131. $scope.runStatusChecks = function() {
  132. $timeout(() => $scope.tryFetchIdeJs(), 1000)
  133. return $timeout(() => $scope.tryOpenWebSocket(), 2000)
  134. }
  135. // kick off the status checks on load
  136. if ($scope.adminUserExists) {
  137. return $scope.runStatusChecks()
  138. }
  139. }))