LaunchpadController.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /* global io */
  2. /* eslint-disable
  3. max-len,
  4. no-return-assign,
  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. import App from '../../../../../../frontend/js/base'
  15. export default App.controller('LaunchpadController', function(
  16. $scope,
  17. $http,
  18. $timeout
  19. ) {
  20. $scope.adminUserExists = window.data.adminUserExists
  21. $scope.ideJsPath = window.data.ideJsPath
  22. $scope.authMethod = window.data.authMethod
  23. $scope.createAdminSuccess = null
  24. $scope.createAdminError = null
  25. $scope.statusChecks = {
  26. ideJs: { status: 'inflight', error: null },
  27. websocket: { status: 'inflight', error: null },
  28. healthCheck: { status: 'inflight', error: null }
  29. }
  30. $scope.testEmail = {
  31. emailAddress: '',
  32. inflight: false,
  33. status: null // | 'ok' | 'success'
  34. }
  35. $scope.shouldShowAdminForm = () => !$scope.adminUserExists
  36. $scope.onCreateAdminSuccess = function(response) {
  37. const { status } = response
  38. if (status >= 200 && status < 300) {
  39. return ($scope.createAdminSuccess = true)
  40. }
  41. }
  42. $scope.onCreateAdminError = () => ($scope.createAdminError = true)
  43. $scope.sendTestEmail = function() {
  44. $scope.testEmail.inflight = true
  45. $scope.testEmail.status = null
  46. return $http
  47. .post('/launchpad/send_test_email', {
  48. email: $scope.testEmail.emailAddress,
  49. _csrf: window.csrfToken
  50. })
  51. .then(function(response) {
  52. const { status } = response
  53. $scope.testEmail.inflight = false
  54. if (status >= 200 && status < 300) {
  55. return ($scope.testEmail.status = 'ok')
  56. }
  57. })
  58. .catch(function() {
  59. $scope.testEmail.inflight = false
  60. return ($scope.testEmail.status = 'error')
  61. })
  62. }
  63. $scope.tryFetchIdeJs = function() {
  64. $scope.statusChecks.ideJs.status = 'inflight'
  65. return $timeout(
  66. () =>
  67. $http
  68. .get($scope.ideJsPath)
  69. .then(function(response) {
  70. const { status } = response
  71. if (status >= 200 && status < 300) {
  72. return ($scope.statusChecks.ideJs.status = 'ok')
  73. }
  74. })
  75. .catch(function(response) {
  76. const { status } = response
  77. $scope.statusChecks.ideJs.status = 'error'
  78. return ($scope.statusChecks.ideJs.error = new Error(
  79. `Http status: ${status}`
  80. ))
  81. }),
  82. 1000
  83. )
  84. }
  85. $scope.tryOpenWebSocket = function() {
  86. $scope.statusChecks.websocket.status = 'inflight'
  87. return $timeout(function() {
  88. if (typeof io === 'undefined' || io === null) {
  89. $scope.statusChecks.websocket.status = 'error'
  90. $scope.statusChecks.websocket.error = 'socket.io not loaded'
  91. return
  92. }
  93. const socket = io.connect(
  94. null,
  95. {
  96. reconnect: false,
  97. 'connect timeout': 30 * 1000,
  98. 'force new connection': true
  99. }
  100. )
  101. socket.on('connectionAccepted', function() {
  102. $scope.statusChecks.websocket.status = 'ok'
  103. return $scope.$apply(function() {})
  104. })
  105. socket.on('connectionRejected', function(err) {
  106. $scope.statusChecks.websocket.status = 'error'
  107. $scope.statusChecks.websocket.error = err
  108. return $scope.$apply(function() {})
  109. })
  110. return socket.on('connect_failed', function(err) {
  111. $scope.statusChecks.websocket.status = 'error'
  112. $scope.statusChecks.websocket.error = err
  113. return $scope.$apply(function() {})
  114. })
  115. }, 1000)
  116. }
  117. $scope.tryHealthCheck = function() {
  118. $scope.statusChecks.healthCheck.status = 'inflight'
  119. return $http
  120. .get('/health_check')
  121. .then(function(response) {
  122. const { status } = response
  123. if (status >= 200 && status < 300) {
  124. return ($scope.statusChecks.healthCheck.status = 'ok')
  125. }
  126. })
  127. .catch(function(response) {
  128. const { status } = response
  129. $scope.statusChecks.healthCheck.status = 'error'
  130. return ($scope.statusChecks.healthCheck.error = new Error(
  131. `Http status: ${status}`
  132. ))
  133. })
  134. }
  135. $scope.runStatusChecks = function() {
  136. $timeout(() => $scope.tryFetchIdeJs(), 1000)
  137. return $timeout(() => $scope.tryOpenWebSocket(), 2000)
  138. }
  139. // kick off the status checks on load
  140. if ($scope.adminUserExists) {
  141. return $scope.runStatusChecks()
  142. }
  143. })