From dabed896be9b3400b4f47b50ab8dd67c42cbb0b6 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 10 Jun 2014 17:54:29 +0100 Subject: [PATCH 1/8] lowercase password reset email --- .../PasswordReset/PasswordResetController.coffee | 2 +- .../PasswordReset/PasswordResetControllerTests.coffee | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/services/web/app/coffee/Features/PasswordReset/PasswordResetController.coffee b/services/web/app/coffee/Features/PasswordReset/PasswordResetController.coffee index 3acf680952..6874cbe43d 100644 --- a/services/web/app/coffee/Features/PasswordReset/PasswordResetController.coffee +++ b/services/web/app/coffee/Features/PasswordReset/PasswordResetController.coffee @@ -9,7 +9,7 @@ module.exports = title:"Reset Password" requestReset: (req, res)-> - email = req.body.email.trim() + email = req.body.email.trim().toLowerCase() opts = endpointName:"auto_compile" timeInterval:60 diff --git a/services/web/test/UnitTests/coffee/PasswordReset/PasswordResetControllerTests.coffee b/services/web/test/UnitTests/coffee/PasswordReset/PasswordResetControllerTests.coffee index 4dc3af38dc..187719dcd3 100644 --- a/services/web/test/UnitTests/coffee/PasswordReset/PasswordResetControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/PasswordReset/PasswordResetControllerTests.coffee @@ -63,6 +63,17 @@ describe "PasswordResetController", -> done() @PasswordResetController.requestReset @req, @res + it "should lowercase the email address", (done)-> + @email = "UPerCaseEMAIL@example.Com" + @req.body.email = @email + @RateLimiter.addCount.callsArgWith(1, null, true) + @PasswordResetHandler.generateAndEmailResetToken.callsArgWith(1) + @res.send = (code)=> + code.should.equal 200 + @PasswordResetHandler.generateAndEmailResetToken.calledWith(@email.toLowerCase()).should.equal true + done() + @PasswordResetController.requestReset @req, @res + describe "setNewUserPassword", -> it "should tell the user handler to reset the password", (done)-> From ddfdc9e3f7cc13e87a96320134c53921cee983af Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 10 Jun 2014 18:14:28 +0100 Subject: [PATCH 2/8] removed timeout for compile on the client side, rely on serverside http request --- services/web/public/coffee/pdf/PdfManager.coffee | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/services/web/public/coffee/pdf/PdfManager.coffee b/services/web/public/coffee/pdf/PdfManager.coffee index d988797904..4b9fd876cf 100644 --- a/services/web/public/coffee/pdf/PdfManager.coffee +++ b/services/web/public/coffee/pdf/PdfManager.coffee @@ -125,11 +125,6 @@ define [ @_refreshPdfWhenProjectIsLoaded(opts) _refreshPdfWhenProjectIsLoaded: (opts = {}) -> - doneCompiling = _.once => - @compiling = false - @view.doneCompiling() - @syncButtonsView?.show() - setTimeout doneCompiling, 1000 * 60 if !@ide.project.get("rootDoc_id")? new Modal @@ -145,8 +140,9 @@ define [ @compiling = true @_doCompile opts, (error, status, outputFiles) => @compiling = false - doneCompiling() - + @view.doneCompiling() + @syncButtonsView?.show() + if error? @view.updateLog(systemError: true) @view.unsetPdf() From 560288348ab334d2a054472bcd46880f7ca604d6 Mon Sep 17 00:00:00 2001 From: Henry Oswald Date: Tue, 10 Jun 2014 18:28:45 +0100 Subject: [PATCH 3/8] moved delete project inside the editor to the http endpoint --- services/web/app/coffee/router.coffee | 4 ---- .../web/public/coffee/settings/SettingsManager.coffee | 11 ++++++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index aa7d19c1c7..d19f38eb33 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -293,10 +293,6 @@ module.exports = class Router AuthorizationManager.ensureClientCanEditProject client, (error, project_id) => EditorController.setRootDoc(project_id, newRootDocID, callback) - client.on 'deleteProject', (callback)-> - AuthorizationManager.ensureClientCanAdminProject client, (error, project_id) => - EditorController.deleteProject(project_id, callback) - client.on 'setPublicAccessLevel', (newAccessLevel, callback)-> AuthorizationManager.ensureClientCanAdminProject client, (error, project_id) => EditorController.setPublicAccessLevel(project_id, newAccessLevel, callback) diff --git a/services/web/public/coffee/settings/SettingsManager.coffee b/services/web/public/coffee/settings/SettingsManager.coffee index 9f9e20347c..47791833de 100644 --- a/services/web/public/coffee/settings/SettingsManager.coffee +++ b/services/web/public/coffee/settings/SettingsManager.coffee @@ -38,9 +38,14 @@ define [ $("#deleteProject").click (event)=> event.preventDefault() self = @ - deleteProject = -> - self.ide.socket.emit 'deleteProject', -> - window.location = '/' + deleteProject = => + $.ajax + url: "/Project/#{@ide.project_id}", + type: 'DELETE' + data: + _csrf: window.csrfToken + success: -> + window.location = '/' modalOptions = templateId:'deleteEntityModal' isStatic: false From e91d4d61e9ff9c9d647728248c87ca7ea319591f Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 11 Jun 2014 10:46:45 +0100 Subject: [PATCH 4/8] Make track changes file view read only --- .../file-tree/DeletedDocsFolderView.coffee | 4 ++++ .../public/coffee/file-tree/EntityView.coffee | 21 ++++++++++++------- .../coffee/file-tree/FileTreeManager.coffee | 15 +++++++++++++ .../public/coffee/file-tree/FolderView.coffee | 1 + .../coffee/file-tree/RootFolderView.coffee | 13 ++++++++---- .../track-changes/TrackChangesManager.coffee | 2 ++ 6 files changed, 44 insertions(+), 12 deletions(-) diff --git a/services/web/public/coffee/file-tree/DeletedDocsFolderView.coffee b/services/web/public/coffee/file-tree/DeletedDocsFolderView.coffee index 3ce1ec12fd..48217e24c5 100644 --- a/services/web/public/coffee/file-tree/DeletedDocsFolderView.coffee +++ b/services/web/public/coffee/file-tree/DeletedDocsFolderView.coffee @@ -24,6 +24,10 @@ define [ hideToggle: () -> @$(".js-toggle").hide() + makeReadOnly: () -> + + makeReadWrite: () -> + diff --git a/services/web/public/coffee/file-tree/EntityView.coffee b/services/web/public/coffee/file-tree/EntityView.coffee index c7b17e7419..dfd26d331b 100644 --- a/services/web/public/coffee/file-tree/EntityView.coffee +++ b/services/web/public/coffee/file-tree/EntityView.coffee @@ -23,7 +23,8 @@ define [ render: () -> @$el.append(Mustache.to_html @entityTemplate, @model.attributes) @_bindToDomElements() - @_makeEditable() + @_initializeRenameBox() + @_initializeDrag() return @ _bindToDomElements: () -> @@ -32,12 +33,6 @@ define [ @$entityListItemEl = @$el.children(".entity-list-item") @$labelEl = @$entityListItemEl.children(".entity-label") - _makeEditable: () -> - if @ide.isAllowedToDoIt "readAndWrite" - @_initializeRenameBox() - @_initializeDrag() - @hideRenameBox() - bindToModel: () -> @model.on "change:name", (model) => @$nameEl.text(model.get("name")) @@ -84,7 +79,7 @@ define [ onDoubleClick: (e) -> e.preventDefault() e.stopPropagation() - if @ide.isAllowedToDoIt "readAndWrite" + if !@readonly @startRename() showContextMenuFromCaret: (e) -> @@ -121,6 +116,7 @@ define [ delete @contextMenu getContextMenuEntries: () -> + return null if @readonly return [{ text: "Rename" onClick: () => @@ -171,5 +167,14 @@ define [ @manager.renameEntity(@model, name) @hideRenameBox() + makeReadOnly: () -> + console.log @ + @$entityListItemEl.draggable("disable") + @readonly = true + + makeReadWrite: () -> + @$entityListItemEl.draggable("enable") + delete @readonly + diff --git a/services/web/public/coffee/file-tree/FileTreeManager.coffee b/services/web/public/coffee/file-tree/FileTreeManager.coffee index 2f66bec030..27b7d82d2f 100644 --- a/services/web/public/coffee/file-tree/FileTreeManager.coffee +++ b/services/web/public/coffee/file-tree/FileTreeManager.coffee @@ -17,6 +17,7 @@ define [ @multiSelectedEntities = [] @ide.on "afterJoinProject", (@project) => @populateFileTree() + @makeReadWriteIfAllowed() @project_id = @project.id if @ide.editor?.current_doc_id? @openDoc(@ide.editor.current_doc_id) @@ -312,3 +313,17 @@ define [ hideDeletedDocs: () -> @deletedDocsView.$el.hide() + + makeReadOnly: () -> + for id, view of @views or [] + view.makeReadOnly?() + + makeReadWrite: () -> + for id, view of @views or [] + view.makeReadWrite?() + + makeReadWriteIfAllowed: () -> + if @ide.isAllowedToDoIt("readAndWrite") + @makeReadWrite() + else + @makeReadOnly() diff --git a/services/web/public/coffee/file-tree/FolderView.coffee b/services/web/public/coffee/file-tree/FolderView.coffee index e8ad803034..e62140a538 100644 --- a/services/web/public/coffee/file-tree/FolderView.coffee +++ b/services/web/public/coffee/file-tree/FolderView.coffee @@ -123,6 +123,7 @@ define [ @showEntries() getContextMenuEntries: (args...) -> + return null if @readonly entries = EntityView::getContextMenuEntries.apply(this, args) entries.push { divider: true diff --git a/services/web/public/coffee/file-tree/RootFolderView.coffee b/services/web/public/coffee/file-tree/RootFolderView.coffee index 70f065148f..ff5c1c20c3 100644 --- a/services/web/public/coffee/file-tree/RootFolderView.coffee +++ b/services/web/public/coffee/file-tree/RootFolderView.coffee @@ -36,8 +36,7 @@ define [ type: "project" }) @_bindToDomElements() - if @ide.isAllowedToDoIt("readAndWrite") - @renderActions() + @renderActions() @hideRenameBox() @hideToggle() @renderEntries() @@ -45,8 +44,8 @@ define [ return @ renderActions: () -> - actions = $(@actionsTemplate) - actions.insertAfter(@$entityListItemEl) + @$actions = $(@actionsTemplate) + @$actions.insertAfter(@$entityListItemEl) @$(".js-new-entity-menu > a").dropdown() onClick: () -> @@ -61,6 +60,12 @@ define [ hideToggle: () -> @$(".js-toggle").hide() + makeReadOnly: () -> + @$actions.hide() + + makeReadWrite: () -> + @$actions.show() + diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee index 0c45197047..c689a68cee 100644 --- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee +++ b/services/web/public/coffee/track-changes/TrackChangesManager.coffee @@ -72,6 +72,7 @@ define [ @ide.editor.disable() @ide.fileViewManager.disable() + @ide.fileTreeManager.makeReadOnly() @ide.fileTreeManager.showDeletedDocs() @enable() @@ -96,6 +97,7 @@ define [ @ide.fileTreeManager.openDoc(@doc_id) @ide.tabManager.show "code" @resetLabels() + @ide.fileTreeManager.makeReadWriteIfAllowed() @ide.fileTreeManager.hideDeletedDocs() autoSelectDiff: () -> From 45fd924c4941f174bb1c3a31c9b64564d31a8929 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 11 Jun 2014 11:17:18 +0100 Subject: [PATCH 5/8] Remove console.log line --- services/web/public/coffee/file-tree/EntityView.coffee | 1 - 1 file changed, 1 deletion(-) diff --git a/services/web/public/coffee/file-tree/EntityView.coffee b/services/web/public/coffee/file-tree/EntityView.coffee index dfd26d331b..b22f2910aa 100644 --- a/services/web/public/coffee/file-tree/EntityView.coffee +++ b/services/web/public/coffee/file-tree/EntityView.coffee @@ -168,7 +168,6 @@ define [ @hideRenameBox() makeReadOnly: () -> - console.log @ @$entityListItemEl.draggable("disable") @readonly = true From 3ddfa607e1af7624d19d43ce00369b7a744d702f Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 11 Jun 2014 11:26:45 +0100 Subject: [PATCH 6/8] Add in null array checks --- services/web/public/coffee/models/Project.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/web/public/coffee/models/Project.coffee b/services/web/public/coffee/models/Project.coffee index f62098b154..ab3ed089ca 100644 --- a/services/web/public/coffee/models/Project.coffee +++ b/services/web/public/coffee/models/Project.coffee @@ -36,11 +36,11 @@ define [ owner.set("privileges", "owner") members.add owner - for rawMember in rawAttributes.members + for rawMember in rawAttributes.members or [] member = User.findOrBuild rawMember._id, rawMember members.add member - for doc in rawAttributes.deletedDocs + for doc in rawAttributes.deletedDocs or [] doc.deleted = true attributes.deletedDocs = new Folder({ From 54ecab854d306e97f1296a9a4457ac7978aaf838 Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 11 Jun 2014 11:53:46 +0100 Subject: [PATCH 7/8] Don't try to open deleted docs for editing --- .../coffee/track-changes/TrackChangesManager.coffee | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/services/web/public/coffee/track-changes/TrackChangesManager.coffee b/services/web/public/coffee/track-changes/TrackChangesManager.coffee index c689a68cee..dfa6d52ead 100644 --- a/services/web/public/coffee/track-changes/TrackChangesManager.coffee +++ b/services/web/public/coffee/track-changes/TrackChangesManager.coffee @@ -94,7 +94,13 @@ define [ @ide.editor.enable() @ide.fileViewManager.enable() @disable() - @ide.fileTreeManager.openDoc(@doc_id) + + doc = @ide.fileTreeManager.getEntity(@doc_id, include_deleted: true) + if doc? and doc.get("deleted") + @ide.fileTreeManager.openDoc(@ide.project.get("rootDoc_id")) + else + @ide.fileTreeManager.openDoc(@doc_id) + @ide.tabManager.show "code" @resetLabels() @ide.fileTreeManager.makeReadWriteIfAllowed() From aaf87647c10aaad6596117138228d1be8875244f Mon Sep 17 00:00:00 2001 From: James Allen Date: Wed, 11 Jun 2014 11:58:19 +0100 Subject: [PATCH 8/8] Null check for resizing diffs that may not have an ace editor --- services/web/public/coffee/track-changes/DiffView.coffee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/web/public/coffee/track-changes/DiffView.coffee b/services/web/public/coffee/track-changes/DiffView.coffee index d704ae6bb0..b5c3269ce4 100644 --- a/services/web/public/coffee/track-changes/DiffView.coffee +++ b/services/web/public/coffee/track-changes/DiffView.coffee @@ -279,7 +279,7 @@ define [ @aceEditor.scrollToLine(@firstHiddenChangeAfter.range.end.row, true, false) resize: () -> - @aceEditor.resize() + @aceEditor?.resize() return DiffView