token-access.js 2.4 KB

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