Commit 0854dc914c06c783d99000218f05d02f35d586e0

Authored by Leonardo Merlin
1 parent a6016ff2

Update auth service.

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>
... ...