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 | 10 | /** @ngInject */ |
11 | 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 | 122 | function login (credentials) { |
14 | 123 | var hostProd = 'http://login.dialoga.gov.br'; |
15 | 124 | var url = hostProd + '/api/v1/login'; |
... | ... | @@ -49,7 +158,27 @@ |
49 | 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 | 177 | var service = { |
178 | + register: register, | |
179 | + activate: activate, | |
180 | + changePassword: changePassword, | |
181 | + forgotPassword: forgotPassword, | |
53 | 182 | login: login, |
54 | 183 | logout: logout, |
55 | 184 | isAuthenticated: isAuthenticated, | ... | ... |
src/app/index.config.js
... | ... | @@ -3,11 +3,17 @@ |
3 | 3 | |
4 | 4 | angular |
5 | 5 | .module('dialoga') |
6 | + // .config(configWhitelist) | |
6 | 7 | .config(configHeadersInterceptor) |
7 | 8 | .config(configLocationProvider) |
8 | 9 | .config(configBreadcrumbProvider) |
9 | 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 | 17 | /** @ngInject */ |
12 | 18 | function configHeadersInterceptor ($httpProvider){ |
13 | 19 | |
... | ... | @@ -20,8 +26,16 @@ |
20 | 26 | // $httpProvider.defaults.useXDomain = true; |
21 | 27 | // $httpProvider.defaults.headers.common = {Accept: 'application/json, text/plain, */*'}; |
22 | 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 | 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 | 40 | $httpProvider.interceptors.push([ |
27 | 41 | '$injector', | ... | ... |
src/app/index.constants.js
... | ... | @@ -6,9 +6,7 @@ |
6 | 6 | .module('dialoga') |
7 | 7 | .constant('API', { |
8 | 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 | 10 | articleId: { |
13 | 11 | home: '103358', |
14 | 12 | about: '108073', |
... | ... | @@ -19,7 +17,14 @@ |
19 | 17 | .constant('AUTH_EVENTS', { |
20 | 18 | loginSuccess: 'auth-login-success', |
21 | 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 | 28 | sessionTimeout: 'auth-session-timeout', |
24 | 29 | notAuthenticated: 'auth-not-authenticated', |
25 | 30 | notAuthorized: 'auth-not-authorized' | ... | ... |
src/app/index.run.js
... | ... | @@ -111,9 +111,8 @@ |
111 | 111 | |
112 | 112 | /** @ngInject */ |
113 | 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 | 117 | $log.debug('[RUN] Path end.'); |
119 | 118 | } | ... | ... |
src/app/pages/auth/auth.controller.js
... | ... | @@ -27,7 +27,8 @@ |
27 | 27 | var vm = this; |
28 | 28 | |
29 | 29 | // init variables |
30 | - vm.credentials = {}; | |
30 | + vm.signin = {}; | |
31 | + vm.singup = {}; | |
31 | 32 | vm.terms = null; |
32 | 33 | vm.loadingTerms = null; |
33 | 34 | |
... | ... | @@ -35,15 +36,14 @@ |
35 | 36 | vm.currentUser = vm.Session.getCurrentUser(); |
36 | 37 | |
37 | 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 | 49 | AuthPageController.prototype.loadData = function() { |
... | ... | @@ -68,7 +68,25 @@ |
68 | 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 | 90 | var vm = this; |
73 | 91 | |
74 | 92 | vm.AuthService.login(credentials).then(function(user) { | ... | ... |
src/app/pages/auth/signin.html
... | ... | @@ -24,17 +24,17 @@ |
24 | 24 | <div class="col-md-12"> |
25 | 25 | <h2>Já possui cadastro</h2> |
26 | 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 | 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 | 31 | <!-- Diretiva validation-messages --> |
32 | - <validation-messages field="loginForm.inputLoginUsername"/> | |
32 | + <validation-messages field="signinForm.login"/> | |
33 | 33 | </div> |
34 | 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 | 38 | </div> |
39 | 39 | <div class="form-group"> |
40 | 40 | <button class="btn btn-lg btn-block btn-submit" type="submit">Entrar</button> |
... | ... | @@ -119,55 +119,66 @@ |
119 | 119 | </div> |
120 | 120 | <div class="row"> |
121 | 121 | <div class="col-sm-12"> |
122 | - <form name="cadastroForm"> | |
122 | + <form name="signupForm" ng-submit="pageSignin.submitSigup(pageSignin.signup)"> | |
123 | 123 | <div class="form-group"> |
124 | - <label for="inputNome">Nome:</label> | |
124 | + <label for="signup-form--name">Nome*:</label> | |
125 | 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 | 128 | </div> |
129 | 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 | 133 | </div> |
134 | 134 | <div class="row"> |
135 | 135 | <div class="col-sm-6"> |
136 | 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 | 140 | </div> |
141 | 141 | </div> |
142 | 142 | <div class="col-sm-6"> |
143 | 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 | 147 | </div> |
148 | 148 | </div> |
149 | 149 | </div> |
150 | 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 | 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 | 161 | </span> |
155 | 162 | </div> |
156 | 163 | </div> |
157 | 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 | 173 | </input> |
163 | - <validation-messages field="cadastroForm.termosDeUso"/> | |
174 | + <validation-messages field="signupForm.user_terms_accepted"/> | |
164 | 175 | </div> |
165 | 176 | <div class="form-group"> |
166 | 177 | <span>Digite o texto da imagem</span> |
167 | 178 | <p>O Captcha vai aqui</p> |
168 | 179 | </div> |
169 | 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 | 182 | </div> |
172 | 183 | </form> |
173 | 184 | </div> | ... | ... |