From c4b21f3184e57f1b95ffd56ea741eeb149e73710 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 16 Feb 2015 23:16:38 +0000 Subject: [PATCH 01/32] added some null checks to message.user.id --- .../coffee/ide/chat/controllers/ChatButtonController.coffee | 2 +- .../web/public/coffee/ide/chat/services/chatMessages.coffee | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/web/public/coffee/ide/chat/controllers/ChatButtonController.coffee b/services/web/public/coffee/ide/chat/controllers/ChatButtonController.coffee index f4e1e27df0..cf97c4ab9b 100644 --- a/services/web/public/coffee/ide/chat/controllers/ChatButtonController.coffee +++ b/services/web/public/coffee/ide/chat/controllers/ChatButtonController.coffee @@ -15,7 +15,7 @@ define [ $scope.$on "chat:newMessage", (e, message) -> if message? - if message.user.id != ide.$scope.user.id + if message?.user?.id != ide.$scope.user.id if !$scope.ui.chatOpen $scope.unreadMessages += 1 flashTitle() diff --git a/services/web/public/coffee/ide/chat/services/chatMessages.coffee b/services/web/public/coffee/ide/chat/services/chatMessages.coffee index f9e47f6e99..91d4009900 100644 --- a/services/web/public/coffee/ide/chat/services/chatMessages.coffee +++ b/services/web/public/coffee/ide/chat/services/chatMessages.coffee @@ -18,7 +18,7 @@ define [ justSent = false ide.socket.on "new-chat-message", (message) => - if message.user.id == ide.$scope.user.id and justSent + if message?.user?.id == ide.$scope.user.id and justSent # Nothing to do else ide.$scope.$apply () -> @@ -65,7 +65,7 @@ define [ prependMessage = (message) -> firstMessage = chat.state.messages[0] shouldGroup = firstMessage? and - firstMessage.user.id == message.user.id and + firstMessage.user.id == message?.user?.id and firstMessage.timestamp - message.timestamp < TIMESTAMP_GROUP_SIZE if shouldGroup firstMessage.timestamp = message.timestamp @@ -86,7 +86,7 @@ define [ lastMessage = chat.state.messages[chat.state.messages.length - 1] shouldGroup = lastMessage? and - lastMessage.user.id == message.user.id and + lastMessage.user.id == message?.user?.id and message.timestamp - lastMessage.timestamp < TIMESTAMP_GROUP_SIZE if shouldGroup lastMessage.timestamp = message.timestamp From 1a7d4f6be19d4abd4b34ece75ccaf553d4d55b42 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 17 Feb 2015 11:21:14 +0000 Subject: [PATCH 02/32] Fix smoke tests --- .../web/test/smoke/coffee/SmokeTests.coffee | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/services/web/test/smoke/coffee/SmokeTests.coffee b/services/web/test/smoke/coffee/SmokeTests.coffee index a882db1998..d14a334b99 100644 --- a/services/web/test/smoke/coffee/SmokeTests.coffee +++ b/services/web/test/smoke/coffee/SmokeTests.coffee @@ -10,6 +10,18 @@ cookeFilePath = "/tmp/smoke-test-cookie-#{port}.txt" buildUrl = (path) -> " -b #{cookeFilePath} --resolve 'smoke#{Settings.cookieDomain}:#{port}:127.0.0.1' http://smoke#{Settings.cookieDomain}:#{port}/#{path}?setLng=en" logger = require "logger-sharelatex" +# Change cookie to be non secure so curl will send it +convertCookieFile = (callback) -> + fs = require("fs") + fs.readFile cookeFilePath, "utf8", (err, data) -> + return callback(err) if err + firstTrue = data.indexOf("TRUE") + secondTrue = data.indexOf("TRUE", firstTrue+4) + result = data.slice(0, secondTrue)+"FALSE"+data.slice(secondTrue+4) + fs.writeFile cookeFilePath, result, "utf8", (err) -> + return callback(err) if err + callback() + describe "Opening", -> before (done) -> @@ -26,20 +38,14 @@ describe "Opening", -> return done("smoke test: does not have csrf token") csrf = csrfMatches[1] - # Change cookie to be non secure so curl will send it - fs = require("fs") - fs.readFile cookeFilePath, "utf8", (err, data) -> - return done(err) if err - firstTrue = data.indexOf("TRUE") - secondTrue = data.indexOf("TRUE", firstTrue+4) - result = data.slice(0, secondTrue)+"FALSE"+data.slice(secondTrue+4) - fs.writeFile cookeFilePath, result, "utf8", (err) -> - return done(err) if err - - command = """ - curl -H "Content-Type: application/json" -H "X-Forwarded-Proto: https" -d '{"_csrf":"#{csrf}", "email":"#{Settings.smokeTest.user}", "password":"#{Settings.smokeTest.password}"}' #{buildUrl('register')} - """ - child.exec command, done + convertCookieFile (err) -> + return done(err) if err? + command = """ + curl -c #{cookeFilePath} -H "Content-Type: application/json" -H "X-Forwarded-Proto: https" -d '{"_csrf":"#{csrf}", "email":"#{Settings.smokeTest.user}", "password":"#{Settings.smokeTest.password}"}' #{buildUrl('register')} + """ + child.exec command, (err) -> + return done(err) if err? + convertCookieFile done after (done)-> command = """ From 000f01fbebe68f0b4511f8f9a99ccd2e96cc5621 Mon Sep 17 00:00:00 2001 From: James Allen Date: Tue, 17 Feb 2015 11:21:50 +0000 Subject: [PATCH 03/32] Remove unneeded uid module --- .../Features/Authentication/AuthenticationController.coffee | 1 - services/web/package.json | 1 - 2 files changed, 2 deletions(-) diff --git a/services/web/app/coffee/Features/Authentication/AuthenticationController.coffee b/services/web/app/coffee/Features/Authentication/AuthenticationController.coffee index 9653e302b5..7428bd4b40 100644 --- a/services/web/app/coffee/Features/Authentication/AuthenticationController.coffee +++ b/services/web/app/coffee/Features/Authentication/AuthenticationController.coffee @@ -6,7 +6,6 @@ Metrics = require('../../infrastructure/Metrics') logger = require("logger-sharelatex") querystring = require('querystring') Url = require("url") -uid = require "uid" module.exports = AuthenticationController = login: (req, res, next = (error) ->) -> diff --git a/services/web/package.json b/services/web/package.json index cec26f13e7..18b3e5ab5d 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -39,7 +39,6 @@ "settings-sharelatex": "git+https://github.com/sharelatex/settings-sharelatex.git#v1.0.0", "socket.io": "0.9.16", "translations-sharelatex": "git+https://github.com/sharelatex/translations-sharelatex.git#master", - "uid": "0.0.2", "underscore": "1.6.0", "underscore.string": "^3.0.2", "v8-profiler": "^5.2.3", From 766bfbf5ef99d84250b30507a32f001ba87145e7 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 18 Feb 2015 17:50:14 +0000 Subject: [PATCH 04/32] Provide easy way out of track-changes --- services/web/app/views/project/editor/track-changes.jade | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/web/app/views/project/editor/track-changes.jade b/services/web/app/views/project/editor/track-changes.jade index 10f4070dee..9300172afc 100644 --- a/services/web/app/views/project/editor/track-changes.jade +++ b/services/web/app/views/project/editor/track-changes.jade @@ -8,9 +8,14 @@ div#trackChanges(ng-show="ui.view == 'track-changes'") ng-class="buttonClass" ng-click="startFreeTrial('track-changes')" ) #{translate("start_free_trial")} + |     + a.small(href, ng-click="toggleTrackChanges()") #{translate("cancel")} p.small(ng-show="startedFreeTrial") #{translate("refresh_page_after_starting_free_trial")} + .message(ng-show="project.owner._id != user.id") p #{translate("ask_proj_owner_to_upgrade_for_history")} + p + a.small(href, ng-click="toggleTrackChanges()") #{translate("cancel")} aside.change-list( ng-controller="TrackChangesListController" From 21a01d94d4ea6f870aaae8d909639f10048649b4 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 21:25:53 +0000 Subject: [PATCH 05/32] check that content exists before adding it to getAllDocs. causing error which I think is blowing up the mongo driver elsewhere --- .../Features/Project/ProjectEntityHandler.coffee | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee b/services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee index e060c8ebd5..1ac7d78918 100644 --- a/services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee +++ b/services/web/app/coffee/Features/Project/ProjectEntityHandler.coffee @@ -48,12 +48,13 @@ module.exports = ProjectEntityHandler = for folderPath, folder of folders for doc in folder.docs content = docContents[doc._id.toString()] - docs[path.join(folderPath, doc.name)] = { - _id: doc._id - name: doc.name - lines: content.lines - rev: content.rev - } + if content? + docs[path.join(folderPath, doc.name)] = { + _id: doc._id + name: doc.name + lines: content.lines + rev: content.rev + } logger.log count:_.keys(docs).length, project_id:project_id, "returning docs for project" callback null, docs From f8e3fa630838db24a59d46155fd4834dd4074f33 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 21:27:59 +0000 Subject: [PATCH 06/32] increase the auto compile limit a little --- .../web/app/coffee/Features/Compile/CompileManager.coffee | 4 ++-- .../test/UnitTests/coffee/Compile/CompileManagerTests.coffee | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/web/app/coffee/Features/Compile/CompileManager.coffee b/services/web/app/coffee/Features/Compile/CompileManager.coffee index 0089eb7b34..6e7056813d 100755 --- a/services/web/app/coffee/Features/Compile/CompileManager.coffee +++ b/services/web/app/coffee/Features/Compile/CompileManager.coffee @@ -71,9 +71,9 @@ module.exports = CompileManager = return callback(null, true) opts = endpointName:"auto_compile" - timeInterval:15 + timeInterval:20 subjectName:"everyone" - throttle: 15 + throttle: 25 rateLimiter.addCount opts, (err, canCompile)-> if err? canCompile = false diff --git a/services/web/test/UnitTests/coffee/Compile/CompileManagerTests.coffee b/services/web/test/UnitTests/coffee/Compile/CompileManagerTests.coffee index fbcf6787cf..9f4031e776 100644 --- a/services/web/test/UnitTests/coffee/Compile/CompileManagerTests.coffee +++ b/services/web/test/UnitTests/coffee/Compile/CompileManagerTests.coffee @@ -241,9 +241,9 @@ describe "CompileManager", -> @ratelimiter.addCount.callsArgWith(1, null, true) @CompileManager._checkIfAutoCompileLimitHasBeenHit true, (err, canCompile)=> args = @ratelimiter.addCount.args[0][0] - args.throttle.should.equal 15 + args.throttle.should.equal 25 args.subjectName.should.equal "everyone" - args.timeInterval.should.equal 15 + args.timeInterval.should.equal 20 args.endpointName.should.equal "auto_compile" canCompile.should.equal true done() From 455d78773ebb3e1fe1a4ca36c25afeb0b0fb1ec9 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 21:40:15 +0000 Subject: [PATCH 07/32] change the meta tags a little to help with so --- services/web/app/views/layout.jade | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/web/app/views/layout.jade b/services/web/app/views/layout.jade index f623df7386..409ca7b1a5 100644 --- a/services/web/app/views/layout.jade +++ b/services/web/app/views/layout.jade @@ -27,11 +27,11 @@ html(itemscope, itemtype='http://schema.org/Product') meta(itemprop="name", content="ShareLaTeX, the Online LaTeX Editor") -if (typeof(meta) == "undefined") - meta(itemprop="description", content="An online LaTeX editor that's easy to use. No installation, real-time collaboration, version control, hundreds of LaTeX templates, and more.") + meta(itemprop="description", name="description", content="An online LaTeX editor that's easy to use. No installation, real-time collaboration, version control, hundreds of LaTeX templates, and more.") -else - meta(itemprop="description", content=meta) + meta(itemprop="description", name="description" , content=meta) - meta(itemprop="image", content="https://www.sharelatex.com/favicon.ico") + meta(itemprop="image", name="image", content="https://www.sharelatex.com/favicon.ico") - if (typeof(gaToken) != "undefined") script(type='text/javascript'). @@ -99,6 +99,7 @@ html(itemscope, itemtype='http://schema.org/Product') /127\.0\.0\.1:4001\/isrunning/i, // Cacaoweb /webappstoolbarba\.texthelp\.com\//i, /metrics\.itunes\.apple\.com\.edgesuite\.net\//i + /a\.disquscdn\.com/i ], shouldSendCallback: function(data) { // only send a fraction of errors From a9660a3a075750d4c4e395a44efbc31113b8bf0c Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 21:41:03 +0000 Subject: [PATCH 08/32] add err and null project test for locating project element --- .../Features/Project/ProjectLocator.coffee | 2 ++ .../coffee/Project/ProjectLocatorTests.coffee | 21 +++++++++++++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectLocator.coffee b/services/web/app/coffee/Features/Project/ProjectLocator.coffee index bfdb34142d..d855dfc97b 100644 --- a/services/web/app/coffee/Features/Project/ProjectLocator.coffee +++ b/services/web/app/coffee/Features/Project/ProjectLocator.coffee @@ -92,6 +92,8 @@ module.exports = Project.getProject project_or_id, "", (err, project)-> + if err? or !project? + return callback("project could not be found for finding a element #{project_or_id}") if needlePath == '' || needlePath == '/' return callback(null, project.rootFolder[0]) diff --git a/services/web/test/UnitTests/coffee/Project/ProjectLocatorTests.coffee b/services/web/test/UnitTests/coffee/Project/ProjectLocatorTests.coffee index 08c4da865a..b1e2cb9139 100644 --- a/services/web/test/UnitTests/coffee/Project/ProjectLocatorTests.coffee +++ b/services/web/test/UnitTests/coffee/Project/ProjectLocatorTests.coffee @@ -6,7 +6,7 @@ modulePath = "../../../../app/js/Features/Project/ProjectLocator" SandboxedModule = require('sandboxed-module') sinon = require('sinon') Errors = require "../../../../app/js/errors" - +expect = require("chai").expect Project = class Project project = _id : "1234566", rootFolder:[] @@ -221,6 +221,7 @@ describe 'project model', -> assert.equal element, undefined done() + describe "where duplicate folder exists", -> beforeEach -> @@ -266,7 +267,23 @@ describe 'project model', -> element.name.should.equal "other.tex" done() - + + describe "with a null project", -> + beforeEach -> + @project = + rootFolder:[ + folders: [] + fileRefs: [] + docs: [{name:"main.tex"}, null, {name:"other.tex"}] + ] + Project.getProject = sinon.stub() + Project.getProject.callsArgWith(2, null) + + it "should not crash with a null", (done)-> + callback = sinon.stub() + @locator.findElementByPath project._id, "/other.tex", (err, element)-> + expect(err).to.exist + done() describe 'finding a project by user_id and project name', ()-> From 4ec05364bbd505d6139b742a2f925a1cef4ff71c Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 22:06:18 +0000 Subject: [PATCH 09/32] set chat message to empty string by default --- .../public/coffee/ide/chat/controllers/ChatController.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/public/coffee/ide/chat/controllers/ChatController.coffee b/services/web/public/coffee/ide/chat/controllers/ChatController.coffee index 80a9e9a3e8..85e1818f0b 100644 --- a/services/web/public/coffee/ide/chat/controllers/ChatController.coffee +++ b/services/web/public/coffee/ide/chat/controllers/ChatController.coffee @@ -30,7 +30,7 @@ define [ $scope.loadMoreMessages = -> chatMessages.loadMoreMessages() - $scope.linkify = (message)-> + $scope.linkify = (message = "")-> return autolinker.link(message) \ No newline at end of file From c15484db6b4b1798a171188d7169244764309c17 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 22:16:29 +0000 Subject: [PATCH 10/32] added null check on log entry files in the client --- .../ide/pdf/controllers/PdfController.coffee | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee index bd17965d26..b13bf17455 100644 --- a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee +++ b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee @@ -70,16 +70,17 @@ define [ $scope.pdf.logEntryAnnotations = {} for entry in logEntries.all - entry.file = normalizeFilePath(entry.file) + if entry.file? + entry.file = normalizeFilePath(entry.file) - entity = ide.fileTreeManager.findEntityByPath(entry.file) - if entity? - $scope.pdf.logEntryAnnotations[entity.id] ||= [] - $scope.pdf.logEntryAnnotations[entity.id].push { - row: entry.line - 1 - type: if entry.level == "error" then "error" else "warning" - text: entry.message - } + entity = ide.fileTreeManager.findEntityByPath(entry.file) + if entity? + $scope.pdf.logEntryAnnotations[entity.id] ||= [] + $scope.pdf.logEntryAnnotations[entity.id].push { + row: entry.line - 1 + type: if entry.level == "error" then "error" else "warning" + text: entry.message + } .error () -> $scope.pdf.logEntries = [] From 5d09999da5db0e57e750adc16ab24e57582ee9a7 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 22:19:49 +0000 Subject: [PATCH 11/32] ignore errors from twitter loading --- services/web/app/views/layout.jade | 1 + 1 file changed, 1 insertion(+) diff --git a/services/web/app/views/layout.jade b/services/web/app/views/layout.jade index 409ca7b1a5..612a69b6d0 100644 --- a/services/web/app/views/layout.jade +++ b/services/web/app/views/layout.jade @@ -100,6 +100,7 @@ html(itemscope, itemtype='http://schema.org/Product') /webappstoolbarba\.texthelp\.com\//i, /metrics\.itunes\.apple\.com\.edgesuite\.net\//i /a\.disquscdn\.com/i + /platform\.twitter\.com/i ], shouldSendCallback: function(data) { // only send a fraction of errors From ad5de0e93ac2fd4ddd66696897798069cae3f8cd Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 22:25:58 +0000 Subject: [PATCH 12/32] added null check on Facebook --- services/web/app/views/referal/bonus.jade | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/web/app/views/referal/bonus.jade b/services/web/app/views/referal/bonus.jade index 6c83c67967..5b0183d9c1 100644 --- a/services/web/app/views/referal/bonus.jade +++ b/services/web/app/views/referal/bonus.jade @@ -143,8 +143,9 @@ block content function callback(response) { // document.getElementById('msg').innerHTML = "Post ID: " + response['post_id']; } - - FB.ui(obj, callback); + if (typeof FB !== "undefined" && FB !== null) { + FB.ui(obj, callback); + } } script(type="text/javascript"). From 2c3b19e43d9beecb7599bd8842ac954c27c61b7c Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 22:28:02 +0000 Subject: [PATCH 13/32] null check on deleting entry from scope --- services/web/public/coffee/ide/file-tree/FileTreeManager.coffee | 1 + 1 file changed, 1 insertion(+) diff --git a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee index 13b0f8abf6..c9c1b4405f 100644 --- a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee +++ b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee @@ -306,6 +306,7 @@ define [ return (child_path.slice(0, parent_path.length) == parent_path) _deleteEntityFromScope: (entity, options = { moveToDeleted: true }) -> + return if !entity? parent_folder = null @forEachEntity (possible_entity, folder) -> if possible_entity == entity From e8b50e2ffd101d4a1fa299f01e6f0d7913714505 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 22:29:07 +0000 Subject: [PATCH 14/32] null check highlights before removing them --- .../web/public/coffee/ide/pdfng/directives/pdfHighlights.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/public/coffee/ide/pdfng/directives/pdfHighlights.coffee b/services/web/public/coffee/ide/pdfng/directives/pdfHighlights.coffee index fc2b72bd79..45ec988c38 100644 --- a/services/web/public/coffee/ide/pdfng/directives/pdfHighlights.coffee +++ b/services/web/public/coffee/ide/pdfng/directives/pdfHighlights.coffee @@ -24,6 +24,6 @@ define [ clearHighlights: () -> for h in @highlightElements - h.remove() + h?.remove() @highlightElements = [] ] From 67f4929e49901583d06cc0af7ccf2fd68bd5f5f4 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Wed, 18 Feb 2015 22:31:45 +0000 Subject: [PATCH 15/32] null check on loadRootFolder --- .../web/public/coffee/ide/file-tree/FileTreeManager.coffee | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee index c9c1b4405f..9ea27ae62c 100644 --- a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee +++ b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee @@ -162,13 +162,8 @@ define [ return if !path? return path.split("/").slice(0, -1).join("/") - # forEachFolder: (callback) -> - # @forEachEntity (entity) -> - # if entity.type == "folder" - # callback(entity) - loadRootFolder: () -> - @$scope.rootFolder = @_parseFolder(@$scope.project.rootFolder[0]) + @$scope.rootFolder = @_parseFolder(@$scope?.project?.rootFolder[0]) _parseFolder: (rawFolder) -> folder = { From 4eed88c1abece416c94182fd5d8fb4252aee3c57 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Thu, 19 Feb 2015 10:54:28 +0000 Subject: [PATCH 16/32] broken a err and null check into 2 lines --- .../web/app/coffee/Features/Project/ProjectLocator.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/web/app/coffee/Features/Project/ProjectLocator.coffee b/services/web/app/coffee/Features/Project/ProjectLocator.coffee index d855dfc97b..ead0dc3942 100644 --- a/services/web/app/coffee/Features/Project/ProjectLocator.coffee +++ b/services/web/app/coffee/Features/Project/ProjectLocator.coffee @@ -92,7 +92,10 @@ module.exports = Project.getProject project_or_id, "", (err, project)-> - if err? or !project? + if err? + logger.err err:err, project_or_id:project_or_id, "error getting project for finding element" + return callback(err) + if !project? return callback("project could not be found for finding a element #{project_or_id}") if needlePath == '' || needlePath == '/' return callback(null, project.rootFolder[0]) From e4121d8a2824cc8edda0874a25b32d014ec570ca Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Thu, 19 Feb 2015 11:25:06 +0000 Subject: [PATCH 17/32] forgot comma in ignoreUrls --- services/web/app/views/layout.jade | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/web/app/views/layout.jade b/services/web/app/views/layout.jade index 612a69b6d0..9e29ea652e 100644 --- a/services/web/app/views/layout.jade +++ b/services/web/app/views/layout.jade @@ -98,8 +98,8 @@ html(itemscope, itemtype='http://schema.org/Product') // Other plugins /127\.0\.0\.1:4001\/isrunning/i, // Cacaoweb /webappstoolbarba\.texthelp\.com\//i, - /metrics\.itunes\.apple\.com\.edgesuite\.net\//i - /a\.disquscdn\.com/i + /metrics\.itunes\.apple\.com\.edgesuite\.net\//i, + /a\.disquscdn\.com/i, /platform\.twitter\.com/i ], shouldSendCallback: function(data) { From 78b4bccba154a0b48c53c1123ff158c881b5c2b7 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Thu, 19 Feb 2015 11:42:57 +0000 Subject: [PATCH 18/32] remove qq upload loading gif, just 404's atm and is not missed --- services/web/public/stylesheets/components/fineupload.less | 1 - 1 file changed, 1 deletion(-) diff --git a/services/web/public/stylesheets/components/fineupload.less b/services/web/public/stylesheets/components/fineupload.less index 8e84c065a0..3347edbc47 100644 --- a/services/web/public/stylesheets/components/fineupload.less +++ b/services/web/public/stylesheets/components/fineupload.less @@ -84,7 +84,6 @@ } .qq-upload-spinner { display: inline-block; - background: url("loading.gif"); width: 15px; height: 15px; vertical-align: text-bottom; From 6a3f760c6fae66974423a082137cf0cfd7311d3d Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Fri, 20 Feb 2015 12:09:35 +0000 Subject: [PATCH 19/32] added ShareLaTeX server pro options with ldap into settings.defaults --- services/web/config/settings.defaults.coffee | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/services/web/config/settings.defaults.coffee b/services/web/config/settings.defaults.coffee index 24d7a80e12..79c100bbbe 100644 --- a/services/web/config/settings.defaults.coffee +++ b/services/web/config/settings.defaults.coffee @@ -331,3 +331,19 @@ module.exports = proxyUrls: {} reloadModuleViewsOnEachRequest: true + + # ShareLaTeX Server Pro options (https://www.sharelatex.com/university/onsite.html) + # ---------- + + + + # ldap: + # host: 'ldap://ldap.forumsys.com' + # dnObj: 'uid' + # dnSuffix: 'dc=example,dc=com' + # failMessage: 'LDAP User Fail' + # fieldName: 'LDAP User' + # placeholder: 'LDAP User ID' + # emailAtt: 'mail' + + From d112ad22a83584ec94e40b403762ab7edf5b8536 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Fri, 20 Feb 2015 15:23:24 +0000 Subject: [PATCH 20/32] added ldapjs to package.json --- services/web/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/services/web/package.json b/services/web/package.json index 18b3e5ab5d..4da0a9b31a 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -19,6 +19,7 @@ "express": "3.3.4", "fairy": "0.0.2", "jade": "~1.3.1", + "ldapjs": "^0.7.1", "logger-sharelatex": "git+https://github.com/sharelatex/logger-sharelatex.git#v1.0.0", "lynx": "0.1.1", "metrics-sharelatex": "git+https://github.com/sharelatex/metrics-sharelatex.git#v1.0.0", From f7f681d2a3a94e00ee6d8994ebf8ed1cb6da7adb Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Sun, 22 Feb 2015 18:35:59 +0000 Subject: [PATCH 21/32] deal with nan tax rate if user is not in taxable location for subscription dashboard/change plan --- .../web/public/coffee/main/subscription-dashboard.coffee | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/services/web/public/coffee/main/subscription-dashboard.coffee b/services/web/public/coffee/main/subscription-dashboard.coffee index 55834dd4fa..5cf436fa9d 100644 --- a/services/web/public/coffee/main/subscription-dashboard.coffee +++ b/services/web/public/coffee/main/subscription-dashboard.coffee @@ -45,7 +45,10 @@ define [ pricing.plan(planCode, { quantity: 1 }).currency(MultiCurrencyPricing.currencyCode).done (price)-> totalPriceExTax = parseFloat(price.next.total) $scope.$evalAsync () -> - $scope.prices[planCode] = $scope.currencySymbol + (totalPriceExTax + (totalPriceExTax * taxRate)) + taxAmmount = totalPriceExTax * taxRate + if isNaN(taxAmmount) + taxAmmount = 0 + $scope.prices[planCode] = $scope.currencySymbol + (totalPriceExTax + taxAmmount) price = "" From c33956c0af979faf1d264b79aad74e8fe35ce39a Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 23 Feb 2015 10:18:48 +0000 Subject: [PATCH 22/32] fix jade warnings about missing space, need to escape the module html insertions a different way. != func rather than !{func} --- services/web/app/coffee/Features/Chat/ChatController.coffee | 2 +- services/web/app/views/project/editor/left-menu.jade | 4 ++-- services/web/app/views/project/list/side-bar.jade | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/web/app/coffee/Features/Chat/ChatController.coffee b/services/web/app/coffee/Features/Chat/ChatController.coffee index a38c26a9fc..ddbc9c9a85 100644 --- a/services/web/app/coffee/Features/Chat/ChatController.coffee +++ b/services/web/app/coffee/Features/Chat/ChatController.coffee @@ -24,5 +24,5 @@ module.exports = if err? logger.err err:err, query:query, "problem getting messages from chat api" return res.send 500 - logger.log messages:messages, "sending messages to client" + logger.log length:messages?.length, "sending messages to client" res.send messages diff --git a/services/web/app/views/project/editor/left-menu.jade b/services/web/app/views/project/editor/left-menu.jade index 479d501992..ecc4e78164 100644 --- a/services/web/app/views/project/editor/left-menu.jade +++ b/services/web/app/views/project/editor/left-menu.jade @@ -41,12 +41,12 @@ aside#left-menu.full-size( ) i.fa.fa-fw.fa-copy |    #{translate("copy_project")} - !{moduleIncludes("editorLeftMenu:actions", locals)} + != moduleIncludes("editorLeftMenu:actions", locals) if (moduleIncludesAvailable("editorLeftMenu:sync")) div(ng-show="!anonymous") h4() #{translate("sync")} - !{moduleIncludes("editorLeftMenu:sync", locals)} + != moduleIncludes("editorLeftMenu:sync", locals) h4(ng-show="!anonymous") #{translate("settings")} form.settings(ng-controller="SettingsController", ng-show="!anonymous") diff --git a/services/web/app/views/project/list/side-bar.jade b/services/web/app/views/project/list/side-bar.jade index 15fa928ddd..a287ce5a23 100644 --- a/services/web/app/views/project/list/side-bar.jade +++ b/services/web/app/views/project/list/side-bar.jade @@ -21,7 +21,7 @@ href, ng-click="openUploadProjectModal()" ) #{translate("upload_project")} - !{moduleIncludes("newProjectMenu", locals)} + != moduleIncludes("newProjectMenu", locals) if (templates) li.divider li.dropdown-header #{translate("templates")} From 8638b531a57360d46cb197733e215025b91be7cb Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 23 Feb 2015 16:03:45 +0000 Subject: [PATCH 23/32] fire off register to newsletter on user registration as it can be slow --- .../app/coffee/Features/User/UserRegistrationHandler.coffee | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee b/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee index cfef5c28b1..c3cbbc2b2a 100644 --- a/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee +++ b/services/web/app/coffee/Features/User/UserRegistrationHandler.coffee @@ -53,7 +53,9 @@ module.exports = async.series [ (cb)-> User.update {_id: user._id}, {"$set":{holdingAccount:false}}, cb (cb)-> AuthenticationManager.setUserPassword user._id, userDetails.password, cb - (cb)-> NewsLetterManager.subscribe user, cb + (cb)-> + NewsLetterManager.subscribe user, -> + cb() #this can be slow, just fire it off (cb)-> emailOpts = first_name:user.first_name From c98c2db6be229d502ed1d8733b838bf8b879a283 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 23 Feb 2015 17:27:35 +0000 Subject: [PATCH 24/32] change Raven?.captureException to not log json, might be causing error --- .../web/public/coffee/ide/chat/services/chatMessages.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/web/public/coffee/ide/chat/services/chatMessages.coffee b/services/web/public/coffee/ide/chat/services/chatMessages.coffee index 91d4009900..36bcf9540f 100644 --- a/services/web/public/coffee/ide/chat/services/chatMessages.coffee +++ b/services/web/public/coffee/ide/chat/services/chatMessages.coffee @@ -51,9 +51,9 @@ define [ if messages.length < MESSAGE_LIMIT chat.state.atEnd = true if !messages.reverse? - Raven?.captureException(new Error("messages has no reverse property #{JSON.stringify(messages)}")) + Raven?.captureException(new Error("messages has no reverse property #{typeof(messages)}")) if typeof messages.reverse isnt 'function' - Raven?.captureException(new Error("messages.reverse not a function #{typeof(messages.reverse)} #{JSON.stringify(messages)}")) + Raven?.captureException(new Error("messages.reverse not a function #{typeof(messages.reverse)} #{typeof(messages)}")) chat.state.errored = true else messages.reverse() From 50286659130d7bafa02f7a64d41c00635cbbdd22 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 23 Feb 2015 17:29:38 +0000 Subject: [PATCH 25/32] ignore errors from https://pstatic.datafastguru.info its malware we have no control over --- services/web/app/views/layout.jade | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/services/web/app/views/layout.jade b/services/web/app/views/layout.jade index 9e29ea652e..f0f2d6599a 100644 --- a/services/web/app/views/layout.jade +++ b/services/web/app/views/layout.jade @@ -100,7 +100,8 @@ html(itemscope, itemtype='http://schema.org/Product') /webappstoolbarba\.texthelp\.com\//i, /metrics\.itunes\.apple\.com\.edgesuite\.net\//i, /a\.disquscdn\.com/i, - /platform\.twitter\.com/i + /platform\.twitter\.com/i, + /pstatic\.datafastguru\.info/i ], shouldSendCallback: function(data) { // only send a fraction of errors From 4f11974c85188f1e5c80a42d53fc35d2b22bc94a Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 23 Feb 2015 17:33:05 +0000 Subject: [PATCH 26/32] added null check when looking for deletedByExternalDataSource --- services/web/public/coffee/ide.coffee | 2 +- .../ide/file-tree/controllers/FileTreeFolderController.coffee | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/services/web/public/coffee/ide.coffee b/services/web/public/coffee/ide.coffee index 390406e5fd..c80cf86f3b 100644 --- a/services/web/public/coffee/ide.coffee +++ b/services/web/public/coffee/ide.coffee @@ -83,7 +83,7 @@ define [ $scope.$on "project:joined", () -> return if inited inited = true - if $scope.project.deletedByExternalDataSource + if $scope?.project?.deletedByExternalDataSource ide.showGenericMessageModal("Project Renamed or Deleted", """ This project has either been renamed or deleted by an external data source such as Dropbox. We don't want to delete your data on ShareLaTeX, so this project still contains your history and collaborators. diff --git a/services/web/public/coffee/ide/file-tree/controllers/FileTreeFolderController.coffee b/services/web/public/coffee/ide/file-tree/controllers/FileTreeFolderController.coffee index f4b7b1deca..d6bbcc733c 100644 --- a/services/web/public/coffee/ide/file-tree/controllers/FileTreeFolderController.coffee +++ b/services/web/public/coffee/ide/file-tree/controllers/FileTreeFolderController.coffee @@ -17,7 +17,7 @@ define [ # We need this here as well as in FileTreeController # since the file-entity diretive creates a new scope # that doesn't inherit from previous scopes. - return '0' if entity.type == "folder" + return '0' if entity?.type == "folder" return '1' $scope.openNewDocModal = () -> From 9a7f73ed894ffd3c7863283d443be9f48209e8d0 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 23 Feb 2015 17:43:22 +0000 Subject: [PATCH 27/32] null check response.outputFiles --- .../web/public/coffee/ide/pdf/controllers/PdfController.coffee | 3 +++ 1 file changed, 3 insertions(+) diff --git a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee index b13bf17455..60bff4f746 100644 --- a/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee +++ b/services/web/public/coffee/ide/pdf/controllers/PdfController.coffee @@ -51,6 +51,9 @@ define [ IGNORE_FILES = ["output.fls", "output.fdb_latexmk"] $scope.pdf.outputFiles = [] + + if !response.outputFiles? + return for file in response.outputFiles if IGNORE_FILES.indexOf(file.path) == -1 # Turn 'output.blg' into 'blg file'. From 3a9c6503ee82eaf8f5ddb9b18b66fc538a48dee1 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Mon, 23 Feb 2015 17:46:17 +0000 Subject: [PATCH 28/32] null check mathjax --- services/web/public/coffee/ide/chat/directives/mathjax.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/web/public/coffee/ide/chat/directives/mathjax.coffee b/services/web/public/coffee/ide/chat/directives/mathjax.coffee index 431244a30c..08e167ee66 100644 --- a/services/web/public/coffee/ide/chat/directives/mathjax.coffee +++ b/services/web/public/coffee/ide/chat/directives/mathjax.coffee @@ -15,12 +15,12 @@ define [ processEscapes: true skipStartupTypeset: true - MathJax.Hub.Config(mathjaxConfig); + MathJax?.Hub?.Config(mathjaxConfig); App.directive "mathjax", () -> return { link: (scope, element, attrs) -> setTimeout () -> - MathJax.Hub.Queue(["Typeset", MathJax.Hub, element.get(0)]) + MathJax?.Hub?.Queue(["Typeset", MathJax?.Hub, element.get(0)]) , 0 } \ No newline at end of file From 387a8b8ae37f66a06b6e8b8aa3f47051bcb5393e Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 24 Feb 2015 13:39:30 +0000 Subject: [PATCH 29/32] hide some forms in user settings if authentication is managed by external system --- .../infrastructure/ExpressLocals.coffee | 5 + services/web/app/views/user/settings.jade | 155 +++++++++--------- 2 files changed, 84 insertions(+), 76 deletions(-) diff --git a/services/web/app/coffee/infrastructure/ExpressLocals.coffee b/services/web/app/coffee/infrastructure/ExpressLocals.coffee index 856dcd51a7..8a64cce94b 100644 --- a/services/web/app/coffee/infrastructure/ExpressLocals.coffee +++ b/services/web/app/coffee/infrastructure/ExpressLocals.coffee @@ -112,6 +112,11 @@ module.exports = (app)-> res.locals.formatPrice = SubscriptionFormatters.formatPrice next() + app.use (req, res, next)-> + res.locals.externalAuthenticationSystemUsed = -> + Settings.ldap? + next() + app.use (req, res, next)-> if req.session.user? res.locals.user = diff --git a/services/web/app/views/user/settings.jade b/services/web/app/views/user/settings.jade index d4a213aefb..3969a2c1d0 100644 --- a/services/web/app/views/user/settings.jade +++ b/services/web/app/views/user/settings.jade @@ -19,19 +19,20 @@ block content h3 #{translate("update_account_info")} form(async-form="settings", name="settingsForm", method="POST", action="/user/settings", novalidate) input(type="hidden", name="_csrf", value=csrfToken) - .form-group - label(for='email') #{translate("email")} - input.form-control( - type='email', - name='email', - placeholder="email@example.com" - required, - ng-model="email", - ng-init="email = #{JSON.stringify(user.email)}", - ng-model-options="{ updateOn: 'blur' }" - ) - span.small.text-primary(ng-show="settingsForm.email.$invalid && settingsForm.email.$dirty") - | #{translate("must_be_email_address")} + if !externalAuthenticationSystemUsed() + .form-group + label(for='email') #{translate("email")} + input.form-control( + type='email', + name='email', + placeholder="email@example.com" + required, + ng-model="email", + ng-init="email = #{JSON.stringify(user.email)}", + ng-model-options="{ updateOn: 'blur' }" + ) + span.small.text-primary(ng-show="settingsForm.email.$invalid && settingsForm.email.$dirty") + | #{translate("must_be_email_address")} .form-group label(for='firstName').control-label #{translate("first_name")} input.form-control( @@ -51,75 +52,77 @@ block content type='submit', ng-disabled="settingsForm.$invalid" ) #{translate("update")} - - .col-md-5.col-md-offset-1 - h3 #{translate("change_password")} - form(async-form="changepassword", name="changePasswordForm", action="/user/password/update", method="POST", novalidate) - input(type="hidden", name="_csrf", value=csrfToken) - .form-group - label(for='currentPassword') #{translate("current_password")} - input.form-control( - type='password', - name='currentPassword', - placeholder='*********', - ng-model="currentPassword", - required - ) - span.small.text-primary(ng-show="changePasswordForm.currentPassword.$invalid && changePasswordForm.currentPassword.$dirty") - | #{translate("required")} - .form-group - label(for='newPassword1') #{translate("new_password")} - input.form-control( - id='newPassword1', - type='password', - name='newPassword1', - placeholder='*********', - ng-model="newPassword1", - required - ) - span.small.text-primary(ng-show="changePasswordForm.newPassword1.$invalid && changePasswordForm.newPassword1.$dirty") - | #{translate("required")} - .form-group - label(for='newPassword2') #{translate("confirm_new_password")} - input.form-control( - type='password', - name='newPassword2', - placeholder='*********', - ng-model="newPassword2", - equals="newPassword1" - ) - span.small.text-primary(ng-show="changePasswordForm.newPassword2.$invalid && changePasswordForm.newPassword2.$dirty") - | #{translate("doesnt_match")} - .actions - button.btn.btn-primary( - type='submit', - ng-disabled="changePasswordForm.$invalid" - ) #{translate("change")} + if !externalAuthenticationSystemUsed() + .col-md-5.col-md-offset-1 + h3 #{translate("change_password")} + form(async-form="changepassword", name="changePasswordForm", action="/user/password/update", method="POST", novalidate) + input(type="hidden", name="_csrf", value=csrfToken) + .form-group + label(for='currentPassword') #{translate("current_password")} + input.form-control( + type='password', + name='currentPassword', + placeholder='*********', + ng-model="currentPassword", + required + ) + span.small.text-primary(ng-show="changePasswordForm.currentPassword.$invalid && changePasswordForm.currentPassword.$dirty") + | #{translate("required")} + .form-group + label(for='newPassword1') #{translate("new_password")} + input.form-control( + id='newPassword1', + type='password', + name='newPassword1', + placeholder='*********', + ng-model="newPassword1", + required + ) + span.small.text-primary(ng-show="changePasswordForm.newPassword1.$invalid && changePasswordForm.newPassword1.$dirty") + | #{translate("required")} + .form-group + label(for='newPassword2') #{translate("confirm_new_password")} + input.form-control( + type='password', + name='newPassword2', + placeholder='*********', + ng-model="newPassword2", + equals="newPassword1" + ) + span.small.text-primary(ng-show="changePasswordForm.newPassword2.$invalid && changePasswordForm.newPassword2.$dirty") + | #{translate("doesnt_match")} + .actions + button.btn.btn-primary( + type='submit', + ng-disabled="changePasswordForm.$invalid" + ) #{translate("change")} | !{moduleIncludes("userSettings", locals)} hr - p.small - | #{translate("newsletter_info_and_unsubscribe")} - a( - href, - ng-click="unsubscribe()", - ng-show="subscribed && !unsubscribing" - ) #{translate("unsubscribe")} - span( - ng-show="unsubscribing" - ) - i.fa.fa-spin.fa-refresh - | #{translate("unsubscribing")} - span.text-success( - ng-show="!subscribed" - ) - i.fa.fa-check - | #{translate("unsubscribed")} + if !externalAuthenticationSystemUsed() - p #{translate("need_to_leave")} - a(href, ng-click="deleteAccount()") #{translate("delete_your_account")} + p.small + | #{translate("newsletter_info_and_unsubscribe")} + a( + href, + ng-click="unsubscribe()", + ng-show="subscribed && !unsubscribing" + ) #{translate("unsubscribe")} + span( + ng-show="unsubscribing" + ) + i.fa.fa-spin.fa-refresh + | #{translate("unsubscribing")} + span.text-success( + ng-show="!subscribed" + ) + i.fa.fa-check + | #{translate("unsubscribed")} + + p #{translate("need_to_leave")} + a(href, ng-click="deleteAccount()") #{translate("delete_your_account")} script(type='text/ng-template', id='deleteAccountModalTemplate') From 161f24ffdf08e2d8a24b1999fa4b7b7fb8f47233 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 24 Feb 2015 22:07:36 +0000 Subject: [PATCH 30/32] add flag which requires login for /learn --- .../Subscription/SubscriptionHandler.coffee | 1 - .../Features/Wiki/WikiController.coffee | 50 +++++++++++-------- services/web/config/settings.defaults.coffee | 16 +++--- 3 files changed, 38 insertions(+), 29 deletions(-) diff --git a/services/web/app/coffee/Features/Subscription/SubscriptionHandler.coffee b/services/web/app/coffee/Features/Subscription/SubscriptionHandler.coffee index 4ff938240c..3d9d473f3e 100644 --- a/services/web/app/coffee/Features/Subscription/SubscriptionHandler.coffee +++ b/services/web/app/coffee/Features/Subscription/SubscriptionHandler.coffee @@ -14,7 +14,6 @@ module.exports = self = @ clientTokenId = "" RecurlyWrapper.createSubscription user, subscriptionDetails, recurly_token_id, (error, recurlySubscription)-> - console.log recurlySubscription return callback(error) if error? SubscriptionUpdater.syncSubscription recurlySubscription, user._id, (error) -> return callback(error) if error? diff --git a/services/web/app/coffee/Features/Wiki/WikiController.coffee b/services/web/app/coffee/Features/Wiki/WikiController.coffee index 6d1a3a1052..9016a4dd41 100644 --- a/services/web/app/coffee/Features/Wiki/WikiController.coffee +++ b/services/web/app/coffee/Features/Wiki/WikiController.coffee @@ -3,37 +3,47 @@ settings = require("settings-sharelatex") logger = require("logger-sharelatex") ErrorController = require "../Errors/ErrorController" _ = require("underscore") +AuthenticationController = require("../Authentication/AuthenticationController") other_lngs = ["es"] module.exports = WikiController = - getPage: (req, res, next) -> - - page = req.url.replace(/^\/learn/, "").replace(/^\//, "") - if page == "" - page = "Main_Page" - logger.log page: page, "getting page from wiki" - if _.include(other_lngs, req.lng) - lngPage = "#{page}_#{req.lng}" + + _checkIfLoginIsNeeded: (req, res, next)-> + if settings.apis.wiki.requireLogin + AuthenticationController.requireLogin()(req, res, next) else - lngPage = page + next() - WikiController._getPageContent "Contents", (error, contents) -> - return next(error) if error? - WikiController._getPageContent lngPage, (error, pageData) -> + getPage: (req, res, next) -> + WikiController._checkIfLoginIsNeeded req, res, -> + + page = req.url.replace(/^\/learn/, "").replace(/^\//, "") + if page == "" + page = "Main_Page" + + logger.log page: page, "getting page from wiki" + if _.include(other_lngs, req.lng) + lngPage = "#{page}_#{req.lng}" + else + lngPage = page + + WikiController._getPageContent "Contents", (error, contents) -> return next(error) if error? - if pageData.content?.length > 280 - if _.include(other_lngs, req.lng) - pageData.title = pageData.title.slice(0, pageData.title.length - (req.lng.length+1) ) - WikiController._renderPage(pageData, contents, res) - else - WikiController._getPageContent page, (error, pageData) -> - return next(error) if error? + WikiController._getPageContent lngPage, (error, pageData) -> + return next(error) if error? + if pageData.content?.length > 280 + if _.include(other_lngs, req.lng) + pageData.title = pageData.title.slice(0, pageData.title.length - (req.lng.length+1) ) WikiController._renderPage(pageData, contents, res) + else + WikiController._getPageContent page, (error, pageData) -> + return next(error) if error? + WikiController._renderPage(pageData, contents, res) - + _getPageContent: (page, callback = (error, data = { content: "", title: "" }) ->) -> request { diff --git a/services/web/config/settings.defaults.coffee b/services/web/config/settings.defaults.coffee index 79c100bbbe..6fa13cbcf3 100644 --- a/services/web/config/settings.defaults.coffee +++ b/services/web/config/settings.defaults.coffee @@ -337,13 +337,13 @@ module.exports = - # ldap: - # host: 'ldap://ldap.forumsys.com' - # dnObj: 'uid' - # dnSuffix: 'dc=example,dc=com' - # failMessage: 'LDAP User Fail' - # fieldName: 'LDAP User' - # placeholder: 'LDAP User ID' - # emailAtt: 'mail' + ldap: + host: 'ldap://ldap.forumsys.com' + dnObj: 'uid' + dnSuffix: 'dc=example,dc=com' + failMessage: 'LDAP User Fail' + fieldName: 'LDAP User' + placeholder: 'LDAP User ID' + emailAtt: 'mail' From 8100f988b280843b3842bf39e6dfb752edcc31d4 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Thu, 26 Feb 2015 11:40:02 +0000 Subject: [PATCH 31/32] comment out ldap in settings.defaults --- services/web/config/settings.defaults.coffee | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/services/web/config/settings.defaults.coffee b/services/web/config/settings.defaults.coffee index 6fa13cbcf3..79c100bbbe 100644 --- a/services/web/config/settings.defaults.coffee +++ b/services/web/config/settings.defaults.coffee @@ -337,13 +337,13 @@ module.exports = - ldap: - host: 'ldap://ldap.forumsys.com' - dnObj: 'uid' - dnSuffix: 'dc=example,dc=com' - failMessage: 'LDAP User Fail' - fieldName: 'LDAP User' - placeholder: 'LDAP User ID' - emailAtt: 'mail' + # ldap: + # host: 'ldap://ldap.forumsys.com' + # dnObj: 'uid' + # dnSuffix: 'dc=example,dc=com' + # failMessage: 'LDAP User Fail' + # fieldName: 'LDAP User' + # placeholder: 'LDAP User ID' + # emailAtt: 'mail' From c495e5c4929cf678d37e727de8488df61f84cf1e Mon Sep 17 00:00:00 2001 From: James Allen Date: Thu, 26 Feb 2015 11:48:42 +0000 Subject: [PATCH 32/32] Release version 0.1.3 --- services/web/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/package.json b/services/web/package.json index 4da0a9b31a..337f42390a 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -1,6 +1,6 @@ { "name": "web-sharelatex", - "version": "0.1.2", + "version": "0.1.3", "description": "The HTTP front end for ShareLaTeX", "repository": { "type": "git",