From 544ee1236d188f1d24654817481abcf8d078facd Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Wed, 2 Jul 2014 17:37:13 -0400 Subject: password reset email; also sends email --- package.json | 3 ++- .../assets/javascripts/mx/primitives/mx.youtube.js | 2 +- public/assets/javascripts/ui/_router.js | 21 +++++++++++++++++++++ public/assets/javascripts/ui/site/PasswordForgot.js | 2 +- public/assets/javascripts/ui/site/PasswordReset.js | 6 ++++++ public/assets/javascripts/ui/site/UsernameTaken.js | 6 ++++++ public/assets/stylesheets/app.css | 4 +++- server/index.js | 4 ++-- server/lib/auth/views.js | 2 +- server/lib/util.js | 2 +- views/modal.ejs | 1 + views/partials/sign-in.ejs | 12 ++++++++---- 12 files changed, 53 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 95af2ab..ca45bff 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,8 @@ "html-entities": "~1.0.10", "multer": "~0.1.0", "body-parser": "1.3.0", - "marked": "~0.3.2" + "marked": "~0.3.2", + "emailjs": "~0.3.6" }, "devDependencies": { "grunt": "~0.4.1", diff --git a/public/assets/javascripts/mx/primitives/mx.youtube.js b/public/assets/javascripts/mx/primitives/mx.youtube.js index 3662d7b..b1d3dfb 100644 --- a/public/assets/javascripts/mx/primitives/mx.youtube.js +++ b/public/assets/javascripts/mx/primitives/mx.youtube.js @@ -120,5 +120,5 @@ MX.Youtube = MX.Object3D.extend({ }) window.onYouTubePlayerAPIReady = function(){ - console.log("youtube ready") + // console.log("youtube ready") } diff --git a/public/assets/javascripts/ui/_router.js b/public/assets/javascripts/ui/_router.js index 6d41d5b..fdeafd5 100644 --- a/public/assets/javascripts/ui/_router.js +++ b/public/assets/javascripts/ui/_router.js @@ -5,6 +5,7 @@ var SiteRouter = Router.extend({ events: { "click [data-role='show-signup-modal']": 'signup', "click [data-role='show-signin-modal']": 'signin', + "click [data-role='forgot-password']": 'passwordForgot', "click [data-role='new-project-modal']": 'newProject', "click [data-role='edit-project-modal']": 'editProject', "click [data-role='edit-profile-modal']": 'editProfile', @@ -18,6 +19,11 @@ var SiteRouter = Router.extend({ routes: { "/login": 'signin', "/signup": 'signup', + + "/auth/usernameTaken": 'usernameTaken', + "/auth/password": 'passwordReset', + "/auth/forgotPassword": 'passwordForgot', + "/profile": 'profile', "/profile/edit": 'editProfile', "/about/:name/edit": 'editDocument', @@ -40,6 +46,7 @@ var SiteRouter = Router.extend({ this.newProjectModal = new NewProjectModal() this.editProjectModal = new EditProjectModal() this.editProfileModal = new EditProfileModal() + this.passwordForgotModal = new PasswordForgot() this.documentModal = new DocumentModal() this.route() @@ -122,6 +129,20 @@ var SiteRouter = Router.extend({ this.signInModal.load() }, + usernameTaken: function(e){ + this.usernameTakenModal = new UsernameTaken () + this.usernameTakenModal.load() + }, + passwordForgot: function(e){ + e && e.preventDefault() + window.history.pushState(null, document.title, "/auth/forgotPassword") + this.passwordForgotModal.load() + }, + passwordReset: function(e){ + this.passwordResetModal = new PasswordReset () + this.passwordResetModal.load() + }, + profile: function(e){ var classes = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', diff --git a/public/assets/javascripts/ui/site/PasswordForgot.js b/public/assets/javascripts/ui/site/PasswordForgot.js index 6ac23c0..ecbfc07 100644 --- a/public/assets/javascripts/ui/site/PasswordForgot.js +++ b/public/assets/javascripts/ui/site/PasswordForgot.js @@ -1,6 +1,6 @@ var PasswordForgot = ModalFormView.extend({ el: ".mediaDrawer.passwordForgot", - action: "/auth/passwordForgot", + action: "/auth/forgotPassword", validate: function(){ var errors = [] diff --git a/public/assets/javascripts/ui/site/PasswordReset.js b/public/assets/javascripts/ui/site/PasswordReset.js index 77e8684..9b87d37 100644 --- a/public/assets/javascripts/ui/site/PasswordReset.js +++ b/public/assets/javascripts/ui/site/PasswordReset.js @@ -2,6 +2,12 @@ var PasswordReset = ModalFormView.extend({ el: ".mediaDrawer.passwordReset", action: "/auth/password", + load: function(){ + var opt = JSON.parse( $("#opt").html() ) + this.$("[name=nonce]").val( opt.nonce ) + this.__super__.load.call(this) + }, + validate: function(){ var errors = [] diff --git a/public/assets/javascripts/ui/site/UsernameTaken.js b/public/assets/javascripts/ui/site/UsernameTaken.js index fc651e3..fc9f50a 100644 --- a/public/assets/javascripts/ui/site/UsernameTaken.js +++ b/public/assets/javascripts/ui/site/UsernameTaken.js @@ -2,6 +2,12 @@ var UsernameTaken = ModalFormView.extend({ el: ".mediaDrawer.usernameTaken", action: "/auth/usernameTaken", + load: function(){ + var opt = JSON.parse( $("#opt").html() ) + this.$("#usernameThatIsTaken").html( opt.username ) + this.__super__.load.call(this) + }, + validate: function(){ var errors = [] diff --git a/public/assets/stylesheets/app.css b/public/assets/stylesheets/app.css index 9c80987..937e5c4 100755 --- a/public/assets/stylesheets/app.css +++ b/public/assets/stylesheets/app.css @@ -729,8 +729,10 @@ h5 { -webkit-transform:translateY(0%); transform:translateY(0%); } +.mediaDrawer.table, .mediaDrawer.error, .mediaDrawer.signin, .mediaDrawer.signup, -.mediaDrawer.alert, .mediaDrawer.confirm, .mediaDrawer.error, +.mediaDrawer.alert, .mediaDrawer.confirm, +.mediaDrawer.passwordForgot, .mediaDrawer.passwordReset, .mediaDrawer.usernameTaken, .mediaDrawer.layouts, .mediaDrawer.projects, .mediaDrawer.newProject { display:table; } diff --git a/server/index.js b/server/index.js index 4b628e4..1db7e04 100644 --- a/server/index.js +++ b/server/index.js @@ -92,8 +92,8 @@ site.route = function () { app.post('/auth/usernameTaken', auth.usernameFixed); app.get('/auth/password', auth.views.resetPassword); app.post('/auth/password', auth.resetPassword); - app.post('/auth/passwordForgot', auth.forgotPassword); - + app.get('/auth/forgotPassword', views.modal); + app.post('/auth/forgotPassword', auth.forgotPassword); app.get('/profile', views.profile) app.get('/profile/edit', views.profile) diff --git a/server/lib/auth/views.js b/server/lib/auth/views.js index 591b06a..cd31248 100644 --- a/server/lib/auth/views.js +++ b/server/lib/auth/views.js @@ -26,7 +26,7 @@ views.resetPassword = function (req, res) { if (err || ! user) { return res.redirect("/") } - res.render("reset-password", { username: user.username, nonce: user.passwordNonce }) + res.render("modal", { opt: { username: user.username, nonce: user.passwordNonce } }) }) } diff --git a/server/lib/util.js b/server/lib/util.js index 6604abe..87e2d54 100644 --- a/server/lib/util.js +++ b/server/lib/util.js @@ -25,7 +25,7 @@ util.capitalize = function (s) { util.capitalizeWord = function (s) { return s.charAt(0).toUpperCase() + s.slice(1); } -util.escapeRegExp: function (s) { +util.escapeRegExp = function (s) { return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") } diff --git a/views/modal.ejs b/views/modal.ejs index 4550aff..6ed3fa1 100644 --- a/views/modal.ejs +++ b/views/modal.ejs @@ -19,5 +19,6 @@ [[ include partials/scripts ]] + diff --git a/views/partials/sign-in.ejs b/views/partials/sign-in.ejs index 11b930f..3f05fff 100644 --- a/views/partials/sign-in.ejs +++ b/views/partials/sign-in.ejs @@ -27,7 +27,8 @@


- Make a new account + Make a new account
+ Forgot your password? @@ -74,9 +75,11 @@ -
+
+ X
+
  • Forgot your password? Enter the email address you used to sign up and we can reset it for you. @@ -98,9 +101,10 @@
  • -
    +
    + Please reset your password.

    @@ -129,7 +133,7 @@
    - We're sorry, the username [[- username ]] is already being used. + We're sorry, the username is already being used.

    Please choose another username.

    -- cgit v1.2.3-70-g09d2