token-access.js 2.6 KB

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