diff --git a/app/coffee/app.coffee b/app/coffee/app.coffee index 369c82eb..017e7669 100644 --- a/app/coffee/app.coffee +++ b/app/coffee/app.coffee @@ -42,6 +42,8 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $routeProvider.when("/login", {templateUrl: "/partials/login.html"}) $routeProvider.when("/register", {templateUrl: "/partials/register.html"}) $routeProvider.when("/forgot-password", {templateUrl: "/partials/forgot-password.html"}) + $routeProvider.when("/change-password", + {templateUrl: "/partials/change-password-from-recovery.html"}) $routeProvider.when("/change-password/:token", {templateUrl: "/partials/change-password-from-recovery.html"}) $routeProvider.when("/invitation/:token", {templateUrl: "/partials/invitation.html"}) diff --git a/app/coffee/modules/auth.coffee b/app/coffee/modules/auth.coffee index 08284372..47036061 100644 --- a/app/coffee/modules/auth.coffee +++ b/app/coffee/modules/auth.coffee @@ -81,7 +81,7 @@ class AuthService extends taiga.Service @.setUser(user) return user - publicRegister: (data) -> + register: (data) -> url = @urls.resolve("auth-register") data = _.clone(data, false) @@ -194,10 +194,11 @@ RegisterDirective = ($auth, $confirm) -> if not form.validate() return - promise = $auth.publicRegister($scope.data) + promise = $auth.register($scope.data) promise.then (response) -> - # TODO: finish this. Authenticate user and go to projects page - console.log response + $confirm.notify("success", "Our Oompa Loompas are happy, wellcome to Taiga.") #TODO: i18n + # TODO: finish this. Go tu user home page + $location.path("/project/project-example-0/backlog") promise.then null, (response) -> if response.data._error_message @@ -257,12 +258,40 @@ ForgotPasswordDirective = ($auth, $confirm, $location) -> ## Change Password from Recovery Directive ################### -ChangePasswordFromRecoveryDirective = ($auth, $confirm, $location) -> +ChangePasswordFromRecoveryDirective = ($auth, $confirm, $location, $params) -> link = ($scope, $el, $attrs) -> $scope.data = {} - ### - TODO: We need UX - ### + + if $params.token? + $scope.tokenInParams = true + $scope.data.token = $params.token + else + $scope.tokenInParams = false + + form = $el.find("form").checksley() + + submit = -> + if not form.validate() + return + + promise = $auth.changePasswordFromRecovery($scope.data) + promise.then (response) -> + $location.path("/login") # TODO: Use the future 'urls' service + $confirm.success("Our Oompa Loompas save your new password.
+ Try to sign in with it.") #TODO: i18n + + promise.then null, (response) -> + if response.data._error_message + $confirm.notify("light-error", "One of our Oompa Loompas say + '#{response.data._error_message}'.") #TODO: i18n + + $el.on "submit", (event) -> + event.preventDefault() + submit() + + $el.on "click", "a.button-change-password", (event) -> + event.preventDefault() + submit() return {link:link} @@ -270,5 +299,5 @@ ChangePasswordFromRecoveryDirective = ($auth, $confirm, $location) -> module.directive("tgRegister", ["$tgAuth", "$tgConfirm", RegisterDirective]) module.directive("tgLogin", ["$tgAuth", "$tgConfirm", "$location", LoginDirective]) module.directive("tgForgotPassword", ["$tgAuth", "$tgConfirm", "$location", ForgotPasswordDirective]) -module.directive("tgChangePasswordFromRecovery", ["$tgAuth", "$tgConfirm", "$location", +module.directive("tgChangePasswordFromRecovery", ["$tgAuth", "$tgConfirm", "$location", "$routeParams", ChangePasswordFromRecoveryDirective]) diff --git a/app/partials/views/modules/change-password-from-recovery-form.jade b/app/partials/views/modules/change-password-from-recovery-form.jade index 55948580..98904a7e 100644 --- a/app/partials/views/modules/change-password-from-recovery-form.jade +++ b/app/partials/views/modules/change-password-from-recovery-form.jade @@ -4,12 +4,17 @@ div.change-password-form-container(tg-change-password-from-recovery) span And hey, you may want to eat some more iron-rich food, it's good for your brain :P form(ng-submit="ctrl.submit()") + fieldset.token-change-password(ng-hide="tokenInParams") + input(type="text", name="token", ng-model="data.token", data-required="true", + placeholder="Recover password token") + a.get-token(href="", tg-nav="forgot-password", + title="Did you need a token to recover your password because you forgot it?") Need one? fieldset - input(type="password", name="password", ng-model="data.password", data-required="true", - placeholder="New password") + input(type="password", name="password", id="password", ng-model="data.password", + data-required="true", placeholder="New password") fieldset - input(type="password", name="repassword", ng-model="data.password2", data-required="true", - placeholder="Re-type new password") + input(type="password", name="password2", id="password2", ng-model="data.password2", + data-required="true", data-equalto="#password", placeholder="Re-type new password") fieldset - a.button.button.button-gray(href="", title="Reset Password") Reset Password + a.button.button-change-password.button-gray(href="", title="Reset Password") Reset Password input(type="submit", style="display:none") diff --git a/app/styles/modules/change-password-from-recovery.scss b/app/styles/modules/change-password-from-recovery.scss index d70a5f35..6b569699 100644 --- a/app/styles/modules/change-password-from-recovery.scss +++ b/app/styles/modules/change-password-from-recovery.scss @@ -2,3 +2,28 @@ color: $grayer; text-align: center; } + +.change-password-form-container { + .token-change-password { + position: relative; + } + input:focus { + &+.get-token { + @include transition(opacity .5s linear); + opacity: 0; + } + } + .get-token { + @include transition(all .3s linear); + @extend %small; + color: $gray-light; + opacity: 1; + position: absolute; + right: 1rem; + top: .5rem; + &:hover { + @include transition(color .3s linear); + color: $grayer; + } + } +}