token-access.js 2.7 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. tokenHashPrefix: window.location.hash,
  46. },
  47. }).then(
  48. function successCallback(response) {
  49. $scope.accessInFlight = false
  50. $scope.accessError = false
  51. const { data } = response
  52. if (data.redirect) {
  53. const redirect = response.data.redirect
  54. if (!redirect) {
  55. debugConsole.warn(
  56. 'no redirect supplied in success response data',
  57. response
  58. )
  59. $scope.accessError = true
  60. return
  61. }
  62. window.location.replace(redirect)
  63. } else if (data.v1Import) {
  64. $scope.mode = 'v1Import'
  65. $scope.v1ImportData = data.v1Import
  66. } else if (data.requireAccept) {
  67. $scope.mode = 'requireAccept'
  68. $scope.requireAccept = data.requireAccept
  69. } else {
  70. debugConsole.warn(
  71. 'invalid data from server in success response',
  72. response
  73. )
  74. $scope.accessError = true
  75. }
  76. },
  77. function errorCallback(response) {
  78. debugConsole.warn('error response from server', response)
  79. $scope.accessInFlight = false
  80. $scope.accessError = response.status === 404 ? 'not_found' : 'error'
  81. }
  82. )
  83. }
  84. },
  85. ])