Commit 0854dc914c06c783d99000218f05d02f35d586e0
1 parent
a6016ff2
Exists in
master
and in
8 other branches
Update auth service.
Showing
6 changed files
with
223 additions
and
47 deletions
Show diff stats
src/app/components/auth/auth.service.js
@@ -10,6 +10,115 @@ | @@ -10,6 +10,115 @@ | ||
10 | /** @ngInject */ | 10 | /** @ngInject */ |
11 | function AuthService($http, $rootScope, Session, AUTH_EVENTS, API, $log) { | 11 | function AuthService($http, $rootScope, Session, AUTH_EVENTS, API, $log) { |
12 | 12 | ||
13 | + function register (data){ | ||
14 | + var url = API.host + '/api/v1/register'; | ||
15 | + $log.debug('data', data); | ||
16 | + // var encodedData = data; | ||
17 | + var encodedData = ''; | ||
18 | + encodedData += 'name=' + data.name; | ||
19 | + encodedData += '&email=' + data.email; | ||
20 | + encodedData += '&login=' + data.email.substr(0, data.email.indexOf('@')).toLowerCase().replace(/\W+/g,"").substr(0,25) + "-" + Date.now(); | ||
21 | + encodedData += '&email=' + data.email; | ||
22 | + encodedData += '&password=' + data.password; | ||
23 | + encodedData += '&password_confirmation=' + data.password_confirmation; | ||
24 | + encodedData += '&user_terms_accepted=' + data.user_terms_accepted; | ||
25 | + | ||
26 | + // var encodedData = _encodeObj(data); | ||
27 | + // var encodedData = angular.element.param(data); | ||
28 | + // '&email=&login=&name=&password=&password_confirmation'; | ||
29 | + // oauth_providers | ||
30 | + // oauth_signup_token | ||
31 | + // captcha_text | ||
32 | + // user_terms_accepted | ||
33 | + | ||
34 | + return $http.post(url, encodedData) | ||
35 | + .then(function(response) { | ||
36 | + $log.debug('AuthService.register [SUCCESS] response', response); | ||
37 | + | ||
38 | + var currentUser = Session.create(response.data); | ||
39 | + | ||
40 | + $rootScope.$broadcast(AUTH_EVENTS.registerSuccess, currentUser); | ||
41 | + $rootScope.$broadcast(AUTH_EVENTS.loginSuccess, currentUser); | ||
42 | + | ||
43 | + return response; | ||
44 | + }, function(response) { | ||
45 | + $log.debug('AuthService.register [FAIL] response', response); | ||
46 | + | ||
47 | + $rootScope.$broadcast(AUTH_EVENTS.registerFailed); | ||
48 | + return response; | ||
49 | + }); | ||
50 | + } | ||
51 | + | ||
52 | + function activate (code) { | ||
53 | + var url = '/api/v1/activate'; | ||
54 | + var data = { | ||
55 | + private_token: API.token, | ||
56 | + activation_code: code | ||
57 | + }; | ||
58 | + var encodedData = 'private_token=' + API.token; | ||
59 | + encodedData += '&activation_code=' + code; | ||
60 | + | ||
61 | + return $http | ||
62 | + .patch(url, encodedData) | ||
63 | + .then(function(response) { | ||
64 | + $log.debug('AuthService.activate [SUCCESS] response', response); | ||
65 | + | ||
66 | + // 'Usuário ativado com sucesso' | ||
67 | + $rootScope.$broadcast(AUTH_EVENTS.activateSuccess, response); | ||
68 | + return currentUser; | ||
69 | + }, function(response) { | ||
70 | + // 'Erro: O código de ativação é inválido.' | ||
71 | + $log.debug('AuthService.activate [FAIL] response', response); | ||
72 | + $rootScope.$broadcast(AUTH_EVENTS.activateFailed); | ||
73 | + }); | ||
74 | + } | ||
75 | + | ||
76 | + function changePassword (code, newPassword, newPasswordConfirmation){ | ||
77 | + var url = '/api/v1/new_password'; | ||
78 | + var data = { | ||
79 | + code: code, | ||
80 | + password: newPassword, | ||
81 | + password_confirmation: newPasswordConfirmation | ||
82 | + }; | ||
83 | + var encodedData = 'code=' + code; | ||
84 | + encodedData += '&password=' + newPassword; | ||
85 | + encodedData += '&password_confirmation=' + newPasswordConfirmation; | ||
86 | + | ||
87 | + return $http | ||
88 | + .patch(url, encodedData) | ||
89 | + .then(function(response) { | ||
90 | + $log.debug('AuthService.changePassword [SUCCESS] response', response); | ||
91 | + | ||
92 | + // 'Senha alterada com sucesso.' | ||
93 | + $rootScope.$broadcast(AUTH_EVENTS.changePasswordSuccess, response); | ||
94 | + return currentUser; | ||
95 | + }, function(response) { | ||
96 | + // 'Não foi possível trocar a senha com os dados informados.' | ||
97 | + $log.debug('AuthService.changePassword [FAIL] response', response); | ||
98 | + $rootScope.$broadcast(AUTH_EVENTS.changePasswordFailed); | ||
99 | + }); | ||
100 | + } | ||
101 | + | ||
102 | + function forgotPassword (form){ | ||
103 | + var url = '/api/v1/forgot_password'; | ||
104 | + var data = form.serialize(); | ||
105 | + var encodedData = data; | ||
106 | + | ||
107 | + return $http | ||
108 | + .post(url, encodedData) | ||
109 | + .then(function(response) { | ||
110 | + $log.debug('AuthService.forgotPassword [SUCCESS] response', response); | ||
111 | + | ||
112 | + // 'Verifique seu email para efetuar a troca da senha.' | ||
113 | + $rootScope.$broadcast(AUTH_EVENTS.forgotPasswordSuccess, response); | ||
114 | + return currentUser; | ||
115 | + }, function(response) { | ||
116 | + // 'Não foi possível requisitar a troca de senha para os dados informados.' | ||
117 | + $log.debug('AuthService.forgotPassword [FAIL] response', response); | ||
118 | + $rootScope.$broadcast(AUTH_EVENTS.forgotPasswordFailed); | ||
119 | + }); | ||
120 | + } | ||
121 | + | ||
13 | function login (credentials) { | 122 | function login (credentials) { |
14 | var hostProd = 'http://login.dialoga.gov.br'; | 123 | var hostProd = 'http://login.dialoga.gov.br'; |
15 | var url = hostProd + '/api/v1/login'; | 124 | var url = hostProd + '/api/v1/login'; |
@@ -49,7 +158,27 @@ | @@ -49,7 +158,27 @@ | ||
49 | return (service.isAuthenticated() && authorizedRoles.indexOf(Session.userRole) !== -1); | 158 | return (service.isAuthenticated() && authorizedRoles.indexOf(Session.userRole) !== -1); |
50 | } | 159 | } |
51 | 160 | ||
161 | + function _encodeObj(obj){ | ||
162 | + var result = []; | ||
163 | + var str = null; | ||
164 | + var p = null; | ||
165 | + | ||
166 | + for (p in obj) { | ||
167 | + if (obj.hasOwnProperty(p)) { | ||
168 | + // str = encodeURIComponent(p) + '=' + obj[p]; | ||
169 | + str = p + '=' + obj[p]; | ||
170 | + result.push(str); | ||
171 | + } | ||
172 | + } | ||
173 | + | ||
174 | + return result.join('&'); | ||
175 | + } | ||
176 | + | ||
52 | var service = { | 177 | var service = { |
178 | + register: register, | ||
179 | + activate: activate, | ||
180 | + changePassword: changePassword, | ||
181 | + forgotPassword: forgotPassword, | ||
53 | login: login, | 182 | login: login, |
54 | logout: logout, | 183 | logout: logout, |
55 | isAuthenticated: isAuthenticated, | 184 | isAuthenticated: isAuthenticated, |
src/app/index.config.js
@@ -3,11 +3,17 @@ | @@ -3,11 +3,17 @@ | ||
3 | 3 | ||
4 | angular | 4 | angular |
5 | .module('dialoga') | 5 | .module('dialoga') |
6 | + // .config(configWhitelist) | ||
6 | .config(configHeadersInterceptor) | 7 | .config(configHeadersInterceptor) |
7 | .config(configLocationProvider) | 8 | .config(configLocationProvider) |
8 | .config(configBreadcrumbProvider) | 9 | .config(configBreadcrumbProvider) |
9 | .config(config); | 10 | .config(config); |
10 | 11 | ||
12 | + // /** @ngInject */ | ||
13 | + // function configWhitelist($sceDelegateProvider) { | ||
14 | + // $sceDelegateProvider.resourceUrlWhitelist(['self', 'http://dialoga.gov.br/**', 'http://*.dialoga.gov.br/**']); | ||
15 | + // } | ||
16 | + | ||
11 | /** @ngInject */ | 17 | /** @ngInject */ |
12 | function configHeadersInterceptor ($httpProvider){ | 18 | function configHeadersInterceptor ($httpProvider){ |
13 | 19 | ||
@@ -20,8 +26,16 @@ | @@ -20,8 +26,16 @@ | ||
20 | // $httpProvider.defaults.useXDomain = true; | 26 | // $httpProvider.defaults.useXDomain = true; |
21 | // $httpProvider.defaults.headers.common = {Accept: 'application/json, text/plain, */*'}; | 27 | // $httpProvider.defaults.headers.common = {Accept: 'application/json, text/plain, */*'}; |
22 | // $httpProvider.defaults.headers.post = {'Content-Type': "application/json;charset=utf-8"}; | 28 | // $httpProvider.defaults.headers.post = {'Content-Type': "application/json;charset=utf-8"}; |
23 | - $httpProvider.defaults.headers.post = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'}; | 29 | + $httpProvider.defaults.headers.post = {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'}; |
30 | + // $httpProvider.defaults.headers.post = {'Content-Type': undefined}; | ||
31 | + // $httpProvider.defaults.headers.post['Access-Control-Allow-Headers'] = '*'; | ||
32 | + // $httpProvider.defaults.headers.post['Access-Control-Allow-Methods'] = '*'; | ||
33 | + // $httpProvider.defaults.headers.post['Access-Control-Allow-Origin'] = '*'; | ||
24 | // $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*'; | 34 | // $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*'; |
35 | + // $httpProvider.defaults.headers.common['Access-Control-Allow-Methods'] = '*'; | ||
36 | + // $httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = '*'; | ||
37 | + | ||
38 | + $httpProvider.defaults.transformRequest = false; | ||
25 | 39 | ||
26 | $httpProvider.interceptors.push([ | 40 | $httpProvider.interceptors.push([ |
27 | '$injector', | 41 | '$injector', |
src/app/index.constants.js
@@ -6,9 +6,7 @@ | @@ -6,9 +6,7 @@ | ||
6 | .module('dialoga') | 6 | .module('dialoga') |
7 | .constant('API', { | 7 | .constant('API', { |
8 | token: null, | 8 | token: null, |
9 | - hostDev: '', | ||
10 | - hostHom: 'http://hom.dialoga.gov.br', | ||
11 | - hostProd: 'http://login.dialoga.gov.br', | 9 | + host: 'http://hom.dialoga.gov.br', |
12 | articleId: { | 10 | articleId: { |
13 | home: '103358', | 11 | home: '103358', |
14 | about: '108073', | 12 | about: '108073', |
@@ -19,7 +17,14 @@ | @@ -19,7 +17,14 @@ | ||
19 | .constant('AUTH_EVENTS', { | 17 | .constant('AUTH_EVENTS', { |
20 | loginSuccess: 'auth-login-success', | 18 | loginSuccess: 'auth-login-success', |
21 | loginFailed: 'auth-login-failed', | 19 | loginFailed: 'auth-login-failed', |
22 | - logoutSuccess: 'auth-logout-success', | 20 | + registerSuccess: 'auth-register-success', |
21 | + registerFailed: 'auth-register-failed', | ||
22 | + activateSuccess: 'auth-activate-success', | ||
23 | + activateFailed: 'auth-activate-failed', | ||
24 | + changePasswordSuccess: 'auth-changePassword-success', | ||
25 | + changePasswordFailed: 'auth-changePassword-failed', | ||
26 | + forgotPassowrdSuccess: 'auth-forgotPassowrd-success', | ||
27 | + forgotPassowrdFailed: 'auth-forgotPassowrd-failed', | ||
23 | sessionTimeout: 'auth-session-timeout', | 28 | sessionTimeout: 'auth-session-timeout', |
24 | notAuthenticated: 'auth-not-authenticated', | 29 | notAuthenticated: 'auth-not-authenticated', |
25 | notAuthorized: 'auth-not-authorized' | 30 | notAuthorized: 'auth-not-authorized' |
src/app/index.run.js
@@ -111,9 +111,8 @@ | @@ -111,9 +111,8 @@ | ||
111 | 111 | ||
112 | /** @ngInject */ | 112 | /** @ngInject */ |
113 | function runPath($rootScope, API, $window, $log) { | 113 | function runPath($rootScope, API, $window, $log) { |
114 | - var isProd = (/^http:\/\/dialoga\.gov\.br\//.test($window.location.href)); | ||
115 | - var isHom = (/^http:\/\/hom.dialoga\.gov\.br\//.test($window.location.href)); | ||
116 | - $rootScope.basePath = isProd ? API.hostProd : (isHom ? API.hostHom : API.hostDev); | 114 | + // $rootScope.basePath = API.host; |
115 | + $rootScope.basePath = ''; | ||
117 | 116 | ||
118 | $log.debug('[RUN] Path end.'); | 117 | $log.debug('[RUN] Path end.'); |
119 | } | 118 | } |
src/app/pages/auth/auth.controller.js
@@ -27,7 +27,8 @@ | @@ -27,7 +27,8 @@ | ||
27 | var vm = this; | 27 | var vm = this; |
28 | 28 | ||
29 | // init variables | 29 | // init variables |
30 | - vm.credentials = {}; | 30 | + vm.signin = {}; |
31 | + vm.singup = {}; | ||
31 | vm.terms = null; | 32 | vm.terms = null; |
32 | vm.loadingTerms = null; | 33 | vm.loadingTerms = null; |
33 | 34 | ||
@@ -35,15 +36,14 @@ | @@ -35,15 +36,14 @@ | ||
35 | vm.currentUser = vm.Session.getCurrentUser(); | 36 | vm.currentUser = vm.Session.getCurrentUser(); |
36 | 37 | ||
37 | // handle login | 38 | // handle login |
38 | - vm.$scope.$on(vm.AUTH_EVENTS.loginSuccess, function () { | ||
39 | - vm.currentUser = vm.Session.getCurrentUser(); | ||
40 | - }); | ||
41 | - | ||
42 | - // handle logout | ||
43 | - vm.$scope.$on(vm.AUTH_EVENTS.logoutSuccess, function () { | ||
44 | - vm.currentUser = vm.Session.getCurrentUser(); | ||
45 | - }); | ||
46 | - // ... | 39 | + vm.$scope.$on(vm.AUTH_EVENTS.loginSuccess, function () { |
40 | + vm.currentUser = vm.Session.getCurrentUser(); | ||
41 | + }); | ||
42 | + | ||
43 | + // handle logout | ||
44 | + vm.$scope.$on(vm.AUTH_EVENTS.logoutSuccess, function () { | ||
45 | + vm.currentUser = vm.Session.getCurrentUser(); | ||
46 | + }); | ||
47 | }; | 47 | }; |
48 | 48 | ||
49 | AuthPageController.prototype.loadData = function() { | 49 | AuthPageController.prototype.loadData = function() { |
@@ -68,7 +68,25 @@ | @@ -68,7 +68,25 @@ | ||
68 | vm.AuthService.logout(); | 68 | vm.AuthService.logout(); |
69 | }; | 69 | }; |
70 | 70 | ||
71 | - AuthPageController.prototype.login = function(credentials) { | 71 | + AuthPageController.prototype.submitSigup = function(credentials) { |
72 | + var vm = this; | ||
73 | + | ||
74 | + vm.AuthService.register(credentials).then(function(response){ | ||
75 | + vm.$log.debug('register success.response', response); | ||
76 | + | ||
77 | + // TODO: mensagens de sucesso | ||
78 | + // 'Cadastro efetuado com sucesso.' | ||
79 | + // 'Verifique seu email para confirmar o cadastro.' | ||
80 | + | ||
81 | + }, function(response){ | ||
82 | + vm.$log.debug('register error.response', response); | ||
83 | + | ||
84 | + // TODO: mensagens de erro | ||
85 | + // TODO: tratar multiplos erros | ||
86 | + }); | ||
87 | + }; | ||
88 | + | ||
89 | + AuthPageController.prototype.submitSignin = function(credentials) { | ||
72 | var vm = this; | 90 | var vm = this; |
73 | 91 | ||
74 | vm.AuthService.login(credentials).then(function(user) { | 92 | vm.AuthService.login(credentials).then(function(user) { |
src/app/pages/auth/signin.html
@@ -24,17 +24,17 @@ | @@ -24,17 +24,17 @@ | ||
24 | <div class="col-md-12"> | 24 | <div class="col-md-12"> |
25 | <h2>Já possui cadastro</h2> | 25 | <h2>Já possui cadastro</h2> |
26 | <p>Use seus dados para acessar o Dialoga Brasil</p> | 26 | <p>Use seus dados para acessar o Dialoga Brasil</p> |
27 | - <form role="form" name="loginForm" ng-submit="pageSignin.login(pageSignin.credentials)" novalidate> | 27 | + <form role="form" name="signinForm" ng-submit="pageSignin.submitSignin(pageSignin.signin)" novalidate> |
28 | <div class="form-group"> | 28 | <div class="form-group"> |
29 | - <label for="inputLoginUsername">E-mail*</label> | ||
30 | - <input type="email" id="inputLoginUsername" name="inputLoginUsername" class="form-control input-lg" ng-class="{ 'has-error' : loginForm.inputLoginUsername.$invalid && loginForm.inputLoginUsername.$touched }" ng-model="pageSignin.credentials.username" required/> | 29 | + <label for="signin-form--login">E-mail*</label> |
30 | + <input type="email" id="signin-form--login" name="login" class="form-control input-lg" ng-class="{ 'has-error' : signinForm.login.$invalid && signinForm.login.$touched }" ng-model="pageSignin.signin.username" required/> | ||
31 | <!-- Diretiva validation-messages --> | 31 | <!-- Diretiva validation-messages --> |
32 | - <validation-messages field="loginForm.inputLoginUsername"/> | 32 | + <validation-messages field="signinForm.login"/> |
33 | </div> | 33 | </div> |
34 | <div class="form-group"> | 34 | <div class="form-group"> |
35 | - <label for="inputLoginPassword">Senha*</label> | ||
36 | - <input type="password" id="inputLoginPassword" name="inputLoginPassword" class="form-control input-lg" ng-class="{ 'has-error' : loginForm.inputLoginPassword.$invalid && loginForm.inputLoginPassword.$touched }" ng-model="pageSignin.credentials.password" required> | ||
37 | - <validation-messages field="loginForm.inputLoginPassword"/> | 35 | + <label for="signin-form--password">Senha*</label> |
36 | + <input type="password" id="signin-form--password" name="password" class="form-control input-lg" ng-class="{ 'has-error' : signinForm.password.$invalid && signinForm.password.$touched }" ng-model="pageSignin.signin.password" required> | ||
37 | + <validation-messages field="signinForm.password"/> | ||
38 | </div> | 38 | </div> |
39 | <div class="form-group"> | 39 | <div class="form-group"> |
40 | <button class="btn btn-lg btn-block btn-submit" type="submit">Entrar</button> | 40 | <button class="btn btn-lg btn-block btn-submit" type="submit">Entrar</button> |
@@ -119,55 +119,66 @@ | @@ -119,55 +119,66 @@ | ||
119 | </div> | 119 | </div> |
120 | <div class="row"> | 120 | <div class="row"> |
121 | <div class="col-sm-12"> | 121 | <div class="col-sm-12"> |
122 | - <form name="cadastroForm"> | 122 | + <form name="signupForm" ng-submit="pageSignin.submitSigup(pageSignin.signup)"> |
123 | <div class="form-group"> | 123 | <div class="form-group"> |
124 | - <label for="inputNome">Nome:</label> | 124 | + <label for="signup-form--name">Nome*:</label> |
125 | <span class="pull-right">*Dados obrigatórios</span> | 125 | <span class="pull-right">*Dados obrigatórios</span> |
126 | - <input type="text" id="inputNome" name="inputNome" class="form-control input-lg" ng-class="{ 'has-error' : cadastroForm.inputNome.$invalid && cadastroForm.inputNome.$touched }" ng-model="nome" ng-minlength="" ng-maxlength="" required> | ||
127 | - <validation-messages field="cadastroForm.inputNome"/> | 126 | + <input type="text" id="signup-form--name" name="name" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.name.$invalid && signupForm.name.$touched }" ng-model="pageSignin.signup.name" ng-minlength="" ng-maxlength="" required> |
127 | + <validation-messages field="signupForm.name"/> | ||
128 | </div> | 128 | </div> |
129 | <div class="form-group"> | 129 | <div class="form-group"> |
130 | - <label for="inputEmail">E-mail*</label> | ||
131 | - <input type="email" id="inputEmail" name="inputEmail" class="form-control input-lg" ng-class="{ 'has-error' : cadastroForm.inputEmail.$invalid && cadastroForm.inputEmail.$touched }" ng-model="email" ng-minlength="" ng-maxlength="" required> | ||
132 | - <validation-messages field="cadastroForm.inputEmail"/> | 130 | + <label for="signup-form--email">E-mail*:</label> |
131 | + <input type="email" id="signup-form--email" name="email" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.email.$invalid && signupForm.email.$touched }" ng-model="pageSignin.signup.email" ng-minlength="" ng-maxlength="" required> | ||
132 | + <validation-messages field="signupForm.email"/> | ||
133 | </div> | 133 | </div> |
134 | <div class="row"> | 134 | <div class="row"> |
135 | <div class="col-sm-6"> | 135 | <div class="col-sm-6"> |
136 | <div class="form-group"> | 136 | <div class="form-group"> |
137 | - <label for="inputPassword">Senha:</label> | ||
138 | - <input type="password" id="inputPassword" name="inputPassword" class="form-control input-lg" ng-class="{ 'has-error' : cadastroForm.inputPassword.$invalid && cadastroForm.inputPassword.$touched }" ng-model="senha" ng-minlength="" ng-maxlength="" required> | ||
139 | - <validation-messages field="cadastroForm.inputPassword"/> | 137 | + <label for="signup-form--password">Senha*:</label> |
138 | + <input type="password" id="signup-form--password" name="password" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.password.$invalid && signupForm.password.$touched }" ng-model="pageSignin.signup.password" ng-minlength="" ng-maxlength="" required> | ||
139 | + <validation-messages field="signupForm.password"/> | ||
140 | </div> | 140 | </div> |
141 | </div> | 141 | </div> |
142 | <div class="col-sm-6"> | 142 | <div class="col-sm-6"> |
143 | <div class="form-group"> | 143 | <div class="form-group"> |
144 | - <label for="inputRepeatPassword">Confirmar Senha:</label> | ||
145 | - <input type="password" id="inputRepeatPassword" name="inputRepeatPassword" class="form-control input-lg" ng-class="{ 'has-error' : cadastroForm.inputRepeatPassword.$invalid && cadastroForm.inputRepeatPassword.$touched }" ng-model="senhaRepetida" ng-minlength="" ng-maxlength="" required> | ||
146 | - <validation-messages field="cadastroForm.inputRepeatPassword"/> | 144 | + <label for="signup-form--password-confirmation">Confirmar Senha*:</label> |
145 | + <input type="password" id="signup-form--password-confirmation" name="password_confirmation" class="form-control input-lg" ng-class="{ 'has-error' : signupForm.password_confirmation.$invalid && signupForm.password_confirmation.$touched }" ng-model="pageSignin.signup.password_confirmation" ng-minlength="" ng-maxlength="" required> | ||
146 | + <validation-messages field="signupForm.password_confirmation"/> | ||
147 | </div> | 147 | </div> |
148 | </div> | 148 | </div> |
149 | </div> | 149 | </div> |
150 | <div class="row"> | 150 | <div class="row"> |
151 | + <div class="col-sm-12" ng-show="(signupForm.password.$viewValue.length > 0 && signupForm.password_confirmation.$viewValue.length > 0) && (signupForm.password.$viewValue !== signupForm.password_confirmation.$viewValue)"> | ||
152 | + <div class="error-message"> | ||
153 | + As senhas estão diferentes. | ||
154 | + </div> | ||
155 | + </div> | ||
151 | <div class="col-sm-12"> | 156 | <div class="col-sm-12"> |
152 | - <span class="text"> | ||
153 | - A senha deve ter 6 ou mais caracteres e conter números e letras. | 157 | + <span class="text" ng-show="signupForm.password.$viewValue.length > 0 && signupForm.password.$viewValue.length < 6"> |
158 | + <div class="error-message"> | ||
159 | + A senha deve ter 6 ou mais caracteres e conter números e letras. | ||
160 | + </div> | ||
154 | </span> | 161 | </span> |
155 | </div> | 162 | </div> |
156 | </div> | 163 | </div> |
157 | <div class="form-group"> | 164 | <div class="form-group"> |
158 | - <input type="checkbox" id="termosDeUso" name="termosDeUso" value="aceito" ng-model="termosDeUso" required> | ||
159 | - Já li os | ||
160 | - <button type="button" class="btn btn-link" data-toggle="modal" data-target="#modalTermosDeUso">Termos de Uso</button> | ||
161 | - e concordo com os mesmos* | 165 | + <div class="checkbox"> |
166 | + <label for="user_terms_accepted"> | ||
167 | + <input type="checkbox" id="user_terms_accepted" name="user_terms_accepted" value="aceito" ng-model="pageSignin.signup.user_terms_accepted" required> | ||
168 | + Já li os | ||
169 | + <button type="button" class="btn btn-link" style="padding:0 0 4px 0;" data-toggle="modal" data-target="#modalTermosDeUso">Termos de Uso</button> | ||
170 | + e concordo com os mesmos* | ||
171 | + </label> | ||
172 | + </div> | ||
162 | </input> | 173 | </input> |
163 | - <validation-messages field="cadastroForm.termosDeUso"/> | 174 | + <validation-messages field="signupForm.user_terms_accepted"/> |
164 | </div> | 175 | </div> |
165 | <div class="form-group"> | 176 | <div class="form-group"> |
166 | <span>Digite o texto da imagem</span> | 177 | <span>Digite o texto da imagem</span> |
167 | <p>O Captcha vai aqui</p> | 178 | <p>O Captcha vai aqui</p> |
168 | </div> | 179 | </div> |
169 | <div class="form-group"> | 180 | <div class="form-group"> |
170 | - <button class="btn btn-lg btn-block btn-submit " ng-class=" {'disabled' : !termosDeUso }"type="submit">Cadastrar</button> | 181 | + <button class="btn btn-lg btn-block btn-submit" ng-class=" {'disabled' : !pageSignin.signup.user_terms_accepted }" type="submit">Cadastrar</button> |
171 | </div> | 182 | </div> |
172 | </form> | 183 | </form> |
173 | </div> | 184 | </div> |