diff options
author | Camil Staps | 2015-05-25 15:00:47 +0200 |
---|---|---|
committer | Camil Staps | 2015-05-25 15:00:47 +0200 |
commit | cba2e9564ab63d22eb362bcc7c095d5148512d1a (patch) | |
tree | 398c4ae4b12c9b9b0d084a3202386b519cb03309 /src/js | |
parent | License in all files (diff) |
Resetting password
Diffstat (limited to 'src/js')
-rw-r--r-- | src/js/Botleagues.coffee | 22 | ||||
-rw-r--r-- | src/js/BotleaguesCallback.coffee | 24 | ||||
-rw-r--r-- | src/js/BotleaguesFrontend.coffee | 16 | ||||
-rw-r--r-- | src/js/forms.coffee | 80 |
4 files changed, 122 insertions, 20 deletions
diff --git a/src/js/Botleagues.coffee b/src/js/Botleagues.coffee index 6be7a0e..f090e4b 100644 --- a/src/js/Botleagues.coffee +++ b/src/js/Botleagues.coffee @@ -32,17 +32,31 @@ $.cookie.json = true options = method: 'GET' dataType: 'json' - complete: (data) -> - callback data.responseJSON + statusCode: + 200: (data, status, jqxhr) -> + if status == 'parsererror' + callback {} + else + callback data + 201: (jqxhr) -> + new_options = options + new_options.method = 'GET' + jQuery.ajax jqxhr.getResponseHeader('Location'), new_options + 500: (jqxhr) -> + console.log 500 + console.log jqxhr + callback jqxhr.responseJSON url = Botleagues.url + '/' + user_options.endpoint delete user_options.callback delete user_options.endpoint + new_options = options + for key, option of user_options - options[key] = option + new_options[key] = option - jQuery.ajax url, options + jQuery.ajax url, new_options return diff --git a/src/js/BotleaguesCallback.coffee b/src/js/BotleaguesCallback.coffee index f35d03b..b06f887 100644 --- a/src/js/BotleaguesCallback.coffee +++ b/src/js/BotleaguesCallback.coffee @@ -18,10 +18,15 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. @BotleaguesCallback = + common: (data) -> + console.log data + register: (data) -> + BotleaguesCallback.common data + $ 'form.form-register .form-group' .removeClass 'has-feedback has-success has-warning has-error' - .find '.form-control-feedback' + .find '.form-control-feedback, .feedback' .remove() if data.error? @@ -44,13 +49,28 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. .find 'label' .append( $ '<span>' - .addClass 'pull-right text-danger' + .addClass 'feedback pull-right text-danger' .text error_msg ) + else if data.user? + BotleaguesFrontend.success + message: 'Your account has been created' + prepend_to: $ 'form.form-register' + + $ 'form.form-register input' + .val '' + + else + BotleaguesFrontend.error + message: 'Unknown error' + prepend_to: $ 'form.form-register' + return login: (data) -> + BotleaguesCallback.common data + if data.user_token? BotleaguesFrontend.success message: 'Login successful! Refreshing the page...' diff --git a/src/js/BotleaguesFrontend.coffee b/src/js/BotleaguesFrontend.coffee index 471a230..a9af930 100644 --- a/src/js/BotleaguesFrontend.coffee +++ b/src/js/BotleaguesFrontend.coffee @@ -57,4 +57,18 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. warning: (user_options) -> user_options.type = 'warning' - BotleaguesFrontend.message user_options
\ No newline at end of file + BotleaguesFrontend.message user_options + + ensurePasswordsMatch: (objects, prepend_to) -> + password = null + ok = true + objects.each () -> + if password? + if ($ this).val() != password + BotleaguesFrontend.error + message: 'The passwords don\'t match' + prepend_to: prepend_to + ok = false + else + password = ($ this).val() + ok
\ No newline at end of file diff --git a/src/js/forms.coffee b/src/js/forms.coffee index 36b0b98..19a1540 100644 --- a/src/js/forms.coffee +++ b/src/js/forms.coffee @@ -19,19 +19,20 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. # Request API for registering $ 'form.form-register' .submit -> - Botleagues.request - endpoint: 'user' - method: 'POST' - data: - email: - $ this - .find 'input[name="email"]' - .val() - password: - $ this - .find 'input[name="password"]' - .val() - callback: BotleaguesCallback.register + if BotleaguesFrontend.ensurePasswordsMatch (($ this).find 'input[type="password"]'), $ this + Botleagues.request + endpoint: 'user' + method: 'POST' + data: + email: + $ this + .find 'input[name="email"]' + .val() + password: + $ this + .find 'input[name="password"]' + .val() + callback: BotleaguesCallback.register false @@ -48,4 +49,57 @@ $ '.btn-botleagues-login' $ '#login-form' .submit -> Botleagues.login ($ '#login-email').val(), ($ '#login-password').val() + false + +# Password reset form, stage 1: request token +$ '#password-reset-form-1' + .submit -> + Botleagues.request + endpoint: 'user/' + encodeURIComponent(($ '#password-reset-email').val()) + '/password_reminder' + method: 'POST' + callback: (data) -> + if data.error? + BotleaguesFrontend.error + message: data.error + prepend_to: $ '#password-reset-form-1' + else + BotleaguesFrontend.success + message: "We've sent an email with a password reset token to " + data.password_reminder.userEmail + ". It will be valid until " + (new Date(Date.parse data.password_reminder.valid_till)).toTimeString() + prepend_to: $ '#password-reset-form-1' + $ '#password-reset-form-2' + .parent().parent().fadeIn() + $ '#password-reset-form-1' + .addClass 'text-muted' + .find 'button, input' + .attr 'disabled', true + return + + false + +# Password reset form, stage 2: reset password +$ '#password-reset-form-2' + .submit -> + if BotleaguesFrontend.ensurePasswordsMatch (($ this).find 'input[type="password"]'), $ this + Botleagues.request + endpoint: 'user/' + (encodeURIComponent ($ '#password-reset-email').val()) + '/password_reminder/' + ($ '#password-reset-token').val() + method: 'DELETE' + data: + password: + $ '#password-reset-password' + .val() + callback: (data) -> + if data.error? + BotleaguesFrontend.error + message: data.error + prepend_to: $ '#password-reset-form-2' + else + BotleaguesFrontend.success + message: "Your password has been reset." + prepend_to: $ '#password-reset-form-2' + $ '#password-reset-form-2' + .addClass 'text-muted' + .find 'button, input' + .attr 'disabled', true + return + false
\ No newline at end of file |