token-access.js 2.5 KB

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