From 12a2d71ac9eaacd64d9d106aa0a6df5c0308d4ff Mon Sep 17 00:00:00 2001 From: James Allen Date: Mon, 7 Jan 2019 11:15:38 +0000 Subject: [PATCH] Merge pull request #1346 from sharelatex/ew-use-new-api-for-project-importing use different api to check if project is exporting GitOrigin-RevId: 720012669c833f7482be087ac9d588c354c45147 --- .../Features/Project/ProjectController.coffee | 5 +++-- .../Features/TokenAccess/TokenAccessHandler.coffee | 14 ++++---------- .../web/app/coffee/Features/V1/V1Handler.coffee | 11 +++++++++++ .../test/acceptance/coffee/TokenAccessTests.coffee | 4 ++-- .../acceptance/coffee/helpers/MockV1Api.coffee | 10 +++++----- .../TokenAccess/TokenAccessHandlerTests.coffee | 13 ------------- 6 files changed, 25 insertions(+), 32 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee index 4933e06c3b..28fc20e2cd 100644 --- a/services/web/app/coffee/Features/Project/ProjectController.coffee +++ b/services/web/app/coffee/Features/Project/ProjectController.coffee @@ -33,6 +33,7 @@ crypto = require 'crypto' Features = require('../../infrastructure/Features') BrandVariationsHandler = require("../BrandVariations/BrandVariationsHandler") { getUserAffiliations } = require("../Institutions/InstitutionsAPI") +V1Handler = require "../V1/V1Handler" module.exports = ProjectController = @@ -283,9 +284,9 @@ module.exports = ProjectController = return cb(null, project) unless project.overleaf?.id? and project.tokens?.readAndWrite? and Settings.projectImportingCheckMaxCreateDelta? createDelta = (new Date().getTime() - new Date(project._id.getTimestamp()).getTime()) / 1000 return cb(null, project) unless createDelta < Settings.projectImportingCheckMaxCreateDelta - TokenAccessHandler.getV1DocInfo project.tokens.readAndWrite, null, (err, doc_info) -> + V1Handler.getDocExported project.tokens.readAndWrite, (err, doc_exported) -> return next err if err? - project.exporting = doc_info.exporting + project.exporting = doc_exported.exporting cb(null, project) ) user: (cb)-> diff --git a/services/web/app/coffee/Features/TokenAccess/TokenAccessHandler.coffee b/services/web/app/coffee/Features/TokenAccess/TokenAccessHandler.coffee index 5985a42129..c7be6fbc6a 100644 --- a/services/web/app/coffee/Features/TokenAccess/TokenAccessHandler.coffee +++ b/services/web/app/coffee/Features/TokenAccess/TokenAccessHandler.coffee @@ -126,18 +126,12 @@ module.exports = TokenAccessHandler = return callback(null, { exists: true exported: false - exporting: false }) unless Settings.apis?.v1? - if v2UserId? - UserGetter.getUser v2UserId, { overleaf: 1 }, (err, user) -> - return callback(err) if err? - v1UserId = user.overleaf?.id - V1Api.request { url: "/api/v1/sharelatex/users/#{v1UserId}/docs/#{token}/info" }, (err, response, body) -> - return callback err if err? - callback null, body - else - V1Api.request { url: "/api/v1/sharelatex/docs/#{token}/info" }, (err, response, body) -> + UserGetter.getUser v2UserId, { overleaf: 1 }, (err, user) -> + return callback(err) if err? + v1UserId = user.overleaf?.id + V1Api.request { url: "/api/v1/sharelatex/users/#{v1UserId}/docs/#{token}/info" }, (err, response, body) -> return callback err if err? callback null, body diff --git a/services/web/app/coffee/Features/V1/V1Handler.coffee b/services/web/app/coffee/Features/V1/V1Handler.coffee index 92ed0456d3..f6dd20b268 100644 --- a/services/web/app/coffee/Features/V1/V1Handler.coffee +++ b/services/web/app/coffee/Features/V1/V1Handler.coffee @@ -47,3 +47,14 @@ module.exports = V1Handler = else err = new Error("Unexpected status from v1 password reset api: #{response.statusCode}") callback(err, false) + + getDocExported: (token, callback=(err, info)->) -> + # default to not exported + return callback(null, { + exported: false + exporting: false + }) unless Settings.apis?.v1? + + V1Api.request { url: "/api/v1/sharelatex/docs/#{token}/exported_to_v2" }, (err, response, body) -> + return callback err if err? + callback null, body diff --git a/services/web/test/acceptance/coffee/TokenAccessTests.coffee b/services/web/test/acceptance/coffee/TokenAccessTests.coffee index c6fc1b0a0e..63b2b4a90a 100644 --- a/services/web/test/acceptance/coffee/TokenAccessTests.coffee +++ b/services/web/test/acceptance/coffee/TokenAccessTests.coffee @@ -458,8 +458,8 @@ describe 'TokenAccess', -> @owner.getProject @project_id, (err, project) => return done(err) if err? @tokens = project.tokens - MockV1Api.setDocInfo @tokens.readAndWrite, exporting: true - MockV1Api.setDocInfo @tokens.readOnly, exporting: true + MockV1Api.setDocExported @tokens.readAndWrite, exporting: true + MockV1Api.setDocExported @tokens.readOnly, exporting: true done() after -> diff --git a/services/web/test/acceptance/coffee/helpers/MockV1Api.coffee b/services/web/test/acceptance/coffee/helpers/MockV1Api.coffee index 1697405cc1..2a65fb90c1 100644 --- a/services/web/test/acceptance/coffee/helpers/MockV1Api.coffee +++ b/services/web/test/acceptance/coffee/helpers/MockV1Api.coffee @@ -42,9 +42,9 @@ module.exports = MockV1Api = setAffiliations: (affiliations) -> @affiliations = affiliations - doc_info: {} + doc_exported: {} - setDocInfo: (token, info) -> @doc_info[token] = info + setDocExported: (token, info) -> @doc_exported[token] = info run: () -> app.get "/api/v1/sharelatex/users/:v1_user_id/plan_code", (req, res, next) => @@ -146,9 +146,9 @@ module.exports = MockV1Api = app.get '/api/v1/sharelatex/users/:user_id/docs/:token/info', (req, res, next) => res.json { exported: false } - app.get '/api/v1/sharelatex/docs/:token/info', (req, res, next) => - return res.json @doc_info[req.params.token] if @doc_info[req.params.token]? - res.json { exporting: false } + app.get '/api/v1/sharelatex/docs/:token/exported_to_v2', (req, res, next) => + return res.json @doc_exported[req.params.token] if @doc_exported[req.params.token]? + res.json { exporting: false, exported: false } app.listen 5000, (error) -> throw error if error? diff --git a/services/web/test/unit/coffee/TokenAccess/TokenAccessHandlerTests.coffee b/services/web/test/unit/coffee/TokenAccess/TokenAccessHandlerTests.coffee index c1a2fc9994..b75942e56e 100644 --- a/services/web/test/unit/coffee/TokenAccess/TokenAccessHandlerTests.coffee +++ b/services/web/test/unit/coffee/TokenAccess/TokenAccessHandlerTests.coffee @@ -541,7 +541,6 @@ describe "TokenAccessHandler", -> expect(@callback.calledWith null, { exists: true exported: false - exporting: false }).to.equal true describe 'when v1 api is set', -> @@ -580,18 +579,6 @@ describe "TokenAccessHandler", -> expect(@V1Api.request.calledWith { url: "/api/v1/sharelatex/users/#{@v1UserId}/docs/#{@token}/info" }).to.equal true expect(@callback.calledWith null, 'mock-data').to.equal true - describe 'when user id arg is null', -> - beforeEach -> - @v2UserId = null - @UserGetter.getUser = sinon.stub() - @V1Api.request = sinon.stub().callsArgWith(1, null, null, 'mock-data') - @TokenAccessHandler.getV1DocInfo @token, @v2UserId, @callback - - it 'should get info without user', -> - expect(@UserGetter.getUser.called).to.equal false - expect(@V1Api.request.calledWith { url: "/api/v1/sharelatex/docs/#{@token}/info" }).to.equal true - expect(@callback.calledWith null, 'mock-data').to.equal true - describe 'on V1Api.request error', -> beforeEach -> @UserGetter.getUser = sinon.stub().yields(null, {