Add initial version of register with validation.
parent
ec789ce7db
commit
21c8e24eca
|
@ -26,6 +26,7 @@ configure = ($routeProvider, $locationProvider, $httpProvider, $provide, $compil
|
||||||
$routeProvider.when("/project/:pslug/taskboard/:id", {templateUrl: "/partials/taskboard.html"})
|
$routeProvider.when("/project/:pslug/taskboard/:id", {templateUrl: "/partials/taskboard.html"})
|
||||||
|
|
||||||
$routeProvider.when("/login", {templateUrl: "/partials/login.html"})
|
$routeProvider.when("/login", {templateUrl: "/partials/login.html"})
|
||||||
|
$routeProvider.when("/register", {templateUrl: "/partials/register.html"})
|
||||||
|
|
||||||
$routeProvider.otherwise({redirectTo: '/login'})
|
$routeProvider.otherwise({redirectTo: '/login'})
|
||||||
$locationProvider.html5Mode(true)
|
$locationProvider.html5Mode(true)
|
||||||
|
|
|
@ -54,6 +54,15 @@ class AuthService extends taiga.Service
|
||||||
getToken: ->
|
getToken: ->
|
||||||
return @storage.get("token")
|
return @storage.get("token")
|
||||||
|
|
||||||
|
isAuthenticated: ->
|
||||||
|
if @.getUser() != null
|
||||||
|
return true
|
||||||
|
return false
|
||||||
|
|
||||||
|
###################
|
||||||
|
## Http interface
|
||||||
|
###################
|
||||||
|
|
||||||
login: (username, password) ->
|
login: (username, password) ->
|
||||||
url = @urls.resolve("auth")
|
url = @urls.resolve("auth")
|
||||||
|
|
||||||
|
@ -69,10 +78,46 @@ class AuthService extends taiga.Service
|
||||||
@.setUser(user)
|
@.setUser(user)
|
||||||
return user
|
return user
|
||||||
|
|
||||||
isAuthenticated: ->
|
publicRegister: (data) ->
|
||||||
if @.getUser() != null
|
url = @urls.resolve("auth-register")
|
||||||
return true
|
|
||||||
return false
|
data = _.clone(data, false)
|
||||||
|
data.type = "public"
|
||||||
|
|
||||||
|
return @http.post(url, data).then (response) =>
|
||||||
|
user = @model.make_model("users", response.data)
|
||||||
|
@.setToken(user.auth_token)
|
||||||
|
@.setUser(user)
|
||||||
|
return user
|
||||||
|
|
||||||
|
# acceptInvitiationWithNewUser: (username, email, password, token) ->
|
||||||
|
# url = @urls.resolve("auth-register")
|
||||||
|
# data = _.extend(data, {
|
||||||
|
# username: username,
|
||||||
|
# password: password,
|
||||||
|
# token: token
|
||||||
|
# email: email
|
||||||
|
# existing: "off"
|
||||||
|
# }
|
||||||
|
# return @http.post(url, data).then (response) =>
|
||||||
|
# user = @model.make_model("users", response.data)
|
||||||
|
# @.setToken(user.auth_token)
|
||||||
|
# @.setUser(user)
|
||||||
|
# return user
|
||||||
|
|
||||||
|
# acceptInvitiationWithExistingUser: (username, password, token) ->
|
||||||
|
# url = @urls.resolve("auth-register")
|
||||||
|
# data = _.extend(data, {
|
||||||
|
# username: username,
|
||||||
|
# password: password,
|
||||||
|
# token: token,
|
||||||
|
# existing: "on"
|
||||||
|
# }
|
||||||
|
# return @http.post(url, data).then (response) =>
|
||||||
|
# user = @model.make_model("users", response.data)
|
||||||
|
# @.setToken(user.auth_token)
|
||||||
|
# @.setUser(user)
|
||||||
|
# return user
|
||||||
|
|
||||||
|
|
||||||
class AuthController extends taiga.Controller
|
class AuthController extends taiga.Controller
|
||||||
|
@ -87,6 +132,36 @@ class AuthController extends taiga.Controller
|
||||||
@location.path("/project/project-example-0/backlog")
|
@location.path("/project/project-example-0/backlog")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
RegisterDirective = ($auth, $confirm) ->
|
||||||
|
link = ($scope, $el, $attrs) ->
|
||||||
|
$scope.data = {}
|
||||||
|
form = $el.find("form").checksley()
|
||||||
|
|
||||||
|
submit = ->
|
||||||
|
if not form.validate()
|
||||||
|
return
|
||||||
|
|
||||||
|
promise = $auth.publicRegister($scope.data)
|
||||||
|
promise.then (response) ->
|
||||||
|
# TODO: finish this.
|
||||||
|
console.log response
|
||||||
|
|
||||||
|
promise.then null, (response) ->
|
||||||
|
if response.data._error_message
|
||||||
|
$confirm.error(response.data._error_message)
|
||||||
|
|
||||||
|
$el.on "submit", (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
submit()
|
||||||
|
|
||||||
|
$el.on "click", "a.button-register", (event) ->
|
||||||
|
event.preventDefault()
|
||||||
|
submit()
|
||||||
|
|
||||||
|
return {link:link}
|
||||||
|
|
||||||
module = angular.module("taigaAuth", ["taigaResources"])
|
module = angular.module("taigaAuth", ["taigaResources"])
|
||||||
module.service("$tgAuth", AuthService)
|
module.service("$tgAuth", AuthService)
|
||||||
module.controller("AuthController", AuthController)
|
module.controller("AuthController", AuthController)
|
||||||
|
module.directive("tgRegister", ["$tgAuth", "$tgConfirm", RegisterDirective])
|
||||||
|
|
|
@ -25,14 +25,17 @@ class ConfirmService extends taiga.Service
|
||||||
@.$inject = ["$q"]
|
@.$inject = ["$q"]
|
||||||
|
|
||||||
constructor: (@q) ->
|
constructor: (@q) ->
|
||||||
@.el = angular.element(".lightbox_confirm-delete")
|
|
||||||
_.bindAll(@)
|
_.bindAll(@)
|
||||||
|
|
||||||
hide: ->
|
hide: ->
|
||||||
@.el.addClass("hidden")
|
if @.el
|
||||||
@.el.off(".confirm-dialog")
|
@.el.addClass("hidden")
|
||||||
|
@.el.off(".confirm-dialog")
|
||||||
|
delete @.el
|
||||||
|
|
||||||
ask: (title, subtitle) ->
|
ask: (title, subtitle) ->
|
||||||
|
@.el = angular.element(".lightbox_confirm-delete")
|
||||||
|
|
||||||
# Render content
|
# Render content
|
||||||
@.el.find("h2.title").html(title)
|
@.el.find("h2.title").html(title)
|
||||||
@.el.find("span.subtitle").html(subtitle)
|
@.el.find("span.subtitle").html(subtitle)
|
||||||
|
@ -52,6 +55,22 @@ class ConfirmService extends taiga.Service
|
||||||
@.el.removeClass("hidden")
|
@.el.removeClass("hidden")
|
||||||
return defered.promise
|
return defered.promise
|
||||||
|
|
||||||
|
error: (message) ->
|
||||||
|
@.el = angular.element(".lightbox-generic-error")
|
||||||
|
|
||||||
|
# Render content
|
||||||
|
@.el.find("h2.title").html(message)
|
||||||
|
defered = @q.defer()
|
||||||
|
|
||||||
|
# Assign event handlers
|
||||||
|
@.el.on "click.confirm-dialog", "a.button-green", (event) =>
|
||||||
|
event.preventDefault()
|
||||||
|
defered.resolve()
|
||||||
|
@.hide()
|
||||||
|
|
||||||
|
@.el.removeClass("hidden")
|
||||||
|
return defered.promise
|
||||||
|
|
||||||
|
|
||||||
module = angular.module("taigaBase")
|
module = angular.module("taigaBase")
|
||||||
module.service("$tgConfirm", ["$q", ConfirmService])
|
module.service("$tgConfirm", ["$q", ConfirmService])
|
||||||
|
|
|
@ -13,5 +13,7 @@ html(lang="en", ng-app="taiga")
|
||||||
div.master(ng-view="")
|
div.master(ng-view="")
|
||||||
div.hidden.lightbox.lightbox_confirm-delete
|
div.hidden.lightbox.lightbox_confirm-delete
|
||||||
include partials/views/modules/lightbox_confirm-delete
|
include partials/views/modules/lightbox_confirm-delete
|
||||||
|
div.hidden.lightbox.lightbox-generic-error
|
||||||
|
include partials/views/modules/lightbox-generic-error
|
||||||
script(src="/js/libs.js?v=#{v}")
|
script(src="/js/libs.js?v=#{v}")
|
||||||
script(src="/js/app.js?v=#{v}")
|
script(src="/js/app.js?v=#{v}")
|
||||||
|
|
|
@ -17,6 +17,6 @@ block content
|
||||||
a.icon.icon-delete(href="", title="Close message")
|
a.icon.icon-delete(href="", title="Close message")
|
||||||
|
|
||||||
include views/modules/login-form
|
include views/modules/login-form
|
||||||
include views/modules/register-form
|
// include views/modules/register-form
|
||||||
include views/modules/forgot-form
|
// include views/modules/forgot-form
|
||||||
include views/modules/reset-pass
|
// include views/modules/reset-pass
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
extends dummy-layout
|
||||||
|
//extends login-layout
|
||||||
|
|
||||||
|
block head
|
||||||
|
title Taiga Project management web application with scrum in mind!
|
||||||
|
|
||||||
|
block content
|
||||||
|
div.wrapper(ng-controller="AuthController as ctrl")
|
||||||
|
div.login-main
|
||||||
|
div.login-container
|
||||||
|
h1.logo
|
||||||
|
img(src="/images/logo.png", alt="TAIGA")
|
||||||
|
p.tagline Project management web application with scrum in mind!
|
||||||
|
p.login-error
|
||||||
|
span.title Ooops! Something went wrong!
|
||||||
|
span.text According to our Oompa Loompas, your username or password are incorrect.
|
||||||
|
a.icon.icon-delete(href="", title="Close message")
|
||||||
|
|
||||||
|
include views/modules/register-form
|
|
@ -0,0 +1,7 @@
|
||||||
|
a.close(href="", title="close")
|
||||||
|
span.icon.icon-delete
|
||||||
|
section
|
||||||
|
h2.title
|
||||||
|
div.delete-options
|
||||||
|
a.button.button-green(href="", title="Accept")
|
||||||
|
span Accept
|
|
@ -1,5 +1,5 @@
|
||||||
div.login-form-container
|
div.login-form-container
|
||||||
form.login-form
|
form.login-form(ng-submit="ctrl.submit()")
|
||||||
fieldset
|
fieldset
|
||||||
input(type="text", name="username", ng-model="form.username", placeholder="User name")
|
input(type="text", name="username", ng-model="form.username", placeholder="User name")
|
||||||
fieldset.login-password
|
fieldset.login-password
|
||||||
|
@ -9,8 +9,11 @@ div.login-form-container
|
||||||
fieldset
|
fieldset
|
||||||
input.remember-me(type="checkbox", checked="checked", id="remember-me")
|
input.remember-me(type="checkbox", checked="checked", id="remember-me")
|
||||||
label(for="remember-me") remember me on this computer
|
label(for="remember-me") remember me on this computer
|
||||||
|
|
||||||
fieldset
|
fieldset
|
||||||
a.button.button-login.button-gray(href="", ng-click="ctrl.submit()", title="Log in") Enter
|
a.button.button-login.button-gray(href="", ng-click="ctrl.submit()", title="Log in") Enter
|
||||||
|
input(type="submit", class="hidden")
|
||||||
|
|
||||||
p.login-text
|
p.login-text
|
||||||
span Not registered yet?
|
span Not registered yet?
|
||||||
a(href="", title="Register") create your free account here
|
a(href="", title="Register") create your free account here
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
div.register-form-container
|
div.register-form-container(tg-register)
|
||||||
form.register-form
|
form.register-form
|
||||||
fieldset
|
fieldset
|
||||||
input(type="text" placeholder="Pick a username")
|
input(type="text", placeholder="Pick a username", ng-model="data.username",
|
||||||
|
data-required="true")
|
||||||
fieldset
|
fieldset
|
||||||
input(type="text" placeholder="Your email")
|
input(type="text", placeholder="Your email", ng-model="data.email", data-required="true")
|
||||||
fieldset
|
fieldset
|
||||||
input(type="password" placeholder="Set a password")
|
input(type="password" placeholder="Set a password", ng-model="data.password",
|
||||||
|
data-required="true")
|
||||||
fieldset
|
fieldset
|
||||||
a.button.button-register.button-gray(href="", title="Sign up") Sign up
|
a.button.button-register.button-gray(href="", title="Sign up") Sign up
|
||||||
|
input(type="submit", class="hidden")
|
||||||
|
|
||||||
p.register-text
|
p.register-text
|
||||||
span By clicking "Sign up", you agree to our <br />
|
span By clicking "Sign up", you agree to our <br />
|
||||||
a(href="", title="See terms of service") terms of service
|
a(href="", title="See terms of service") terms of service
|
||||||
|
|
|
@ -238,3 +238,23 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.lightbox-generic-error {
|
||||||
|
section {
|
||||||
|
flex-basis: 0;
|
||||||
|
flex-grow: 0;
|
||||||
|
flex-shrink: 0;
|
||||||
|
min-width: 420px;
|
||||||
|
width: 420px;
|
||||||
|
}
|
||||||
|
.delete-options {
|
||||||
|
@include table-flex();
|
||||||
|
a {
|
||||||
|
@include table-flex-child(1, 0, 0);
|
||||||
|
padding: 8px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
.register-form-container {
|
.register-form-container {
|
||||||
display: none;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,8 @@ paths = {
|
||||||
"app/vendor/angular-animate/angular-animate.js",
|
"app/vendor/angular-animate/angular-animate.js",
|
||||||
"app/vendor/i18next/i18next.js",
|
"app/vendor/i18next/i18next.js",
|
||||||
"app/js/Sortable.js",
|
"app/js/Sortable.js",
|
||||||
"app/vendor/moment/min/moment-with-langs.js"
|
"app/vendor/moment/min/moment-with-langs.js",
|
||||||
|
"app/vendor/checksley/checksley.js"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue