token-access.js 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import App from '../base'
  2. import { debugConsole } from '@/utils/debugging'
  3. App.controller('TokenAccessPageController', [
  4. '$scope',
  5. '$http',
  6. '$location',
  7. function ($scope, $http, $location) {
  8. window.S = $scope
  9. $scope.mode = 'accessAttempt' // 'accessAttempt' | 'v1Import' | 'requireAccept'
  10. $scope.v1ImportData = null
  11. $scope.requireAccept = null
  12. $scope.accessInFlight = false
  13. $scope.accessSuccess = false
  14. $scope.accessError = false
  15. $scope.currentPath = () => {
  16. return $location.path()
  17. }
  18. $scope.buildZipDownloadPath = projectId => {
  19. return `/overleaf/project/${projectId}/download/zip`
  20. }
  21. $scope.getProjectName = () => {
  22. if ($scope.v1ImportData?.name) {
  23. return $scope.v1ImportData.name
  24. } else if ($scope.requireAccept?.projectName) {
  25. return $scope.requireAccept.projectName
  26. } else {
  27. return 'This project'
  28. }
  29. }
  30. $scope.postConfirmedByUser = () => {
  31. $scope.post(true)
  32. }
  33. $scope.post = (confirmedByUser = false) => {
  34. $scope.mode = 'accessAttempt'
  35. const textData = $('#overleaf-token-access-data').text()
  36. const parsedData = JSON.parse(textData)
  37. const { postUrl, csrfToken } = parsedData
  38. $scope.accessInFlight = true
  39. $http({
  40. method: 'POST',
  41. url: postUrl,
  42. data: {
  43. _csrf: csrfToken,
  44. confirmedByUser,
  45. },
  46. }).then(
  47. function successCallback(response) {
  48. $scope.accessInFlight = false
  49. $scope.accessError = false
  50. const { data } = response
  51. if (data.redirect) {
  52. const redirect = response.data.redirect
  53. if (!redirect) {
  54. debugConsole.warn(
  55. 'no redirect supplied in success response data',
  56. response
  57. )
  58. $scope.accessError = true
  59. return
  60. }
  61. window.location.replace(redirect)
  62. } else if (data.v1Import) {
  63. $scope.mode = 'v1Import'
  64. $scope.v1ImportData = data.v1Import
  65. } else if (data.requireAccept) {
  66. $scope.mode = 'requireAccept'
  67. $scope.requireAccept = data.requireAccept
  68. } else {
  69. debugConsole.warn(
  70. 'invalid data from server in success response',
  71. response
  72. )
  73. $scope.accessError = true
  74. }
  75. },
  76. function errorCallback(response) {
  77. debugConsole.warn('error response from server', response)
  78. $scope.accessInFlight = false
  79. $scope.accessError = response.status === 404 ? 'not_found' : 'error'
  80. }
  81. )
  82. }
  83. },
  84. ])