Commit b3e7d5cbe6b2e1c05b2467f320dad1444d00d60f

Authored by Leonardo Merlin
1 parent e437a880

Sync

src/app/components/auth/auth.service.js
... ... @@ -8,10 +8,10 @@
8 8 .factory('AuthInterceptor', AuthInterceptor);
9 9  
10 10 /** @ngInject */
11   - function AuthService($http, $rootScope, Session, AUTH_EVENTS, API, $log) {
  11 + function AuthService($q, $http, $rootScope, Session, AUTH_EVENTS, API, PATH, $log) {
12 12  
13 13 function register (data){
14   - var url = API.host + '/api/v1/register';
  14 + var url = PATH.host + '/api/v1/register';
15 15 $log.debug('data', data);
16 16 // var encodedData = data;
17 17 var encodedData = '';
... ... @@ -22,6 +22,8 @@
22 22 encodedData += '&password=' + data.password;
23 23 encodedData += '&password_confirmation=' + data.password_confirmation;
24 24 encodedData += '&user_terms_accepted=' + data.user_terms_accepted;
  25 + encodedData += '&captcha_text=' + data.captcha_text;
  26 + encodedData += '&txtToken_captcha_serpro_gov_br=' + data.txtToken_captcha_serpro_gov_br;
25 27  
26 28 // var encodedData = _encodeObj(data);
27 29 // var encodedData = angular.element.param(data);
... ... @@ -44,8 +46,8 @@
44 46 }, function(response) {
45 47 $log.debug('AuthService.register [FAIL] response', response);
46 48  
47   - $rootScope.$broadcast(AUTH_EVENTS.registerFailed);
48   - return response;
  49 + $rootScope.$broadcast(AUTH_EVENTS.registerFailed, response);
  50 + return $q.reject(response);
49 51 });
50 52 }
51 53  
... ...
src/app/index.run.js
... ... @@ -4,12 +4,13 @@
4 4  
5 5 angular
6 6 .module('dialoga')
7   - .run(runAuth)
8   - .run(runSocialAuth)
9 7 .run(runAccessibility)
  8 + .run(runAuth)
  9 + .run(runCaptcha)
  10 + .run(runColorUtils)
10 11 .run(runHistory)
11 12 .run(runPath)
12   - .run(runColorUtils)
  13 + .run(runSocialAuth)
13 14 .run(runUtils)
14 15 .run(runBlock);
15 16  
... ... @@ -45,18 +46,53 @@
45 46 }
46 47  
47 48 /** @ngInject */
  49 + function runCaptcha($window, $log, GUID) {
  50 + var serpro_captcha_clienteId = 'fdbcdc7a0b754ee7ae9d865fda740f17';
  51 +
  52 + $window.initCaptcha = function(element) {
  53 + var $element = angular.element(element);
  54 +
  55 + // already have a started captcha
  56 + if ($element.data('captcha')) {
  57 + $log.info('Captcha already initialized. Abort.');
  58 + return;
  59 + }
  60 +
  61 + // Create a new instance of Captcha
  62 + var oCaptcha_serpro_gov_br = new $window.captcha_serpro_gov_br();
  63 +
  64 + // Set the initial data
  65 + $element.val('');
  66 + $element.data('captcha', oCaptcha_serpro_gov_br);
  67 + oCaptcha_serpro_gov_br.clienteId = serpro_captcha_clienteId;
  68 + // oCaptcha_serpro_gov_br.url = "/serprocaptcha";
  69 + oCaptcha_serpro_gov_br.criarUI(element, 'css', 'serpro_captcha_component_', GUID.generate());
  70 + };
  71 +
  72 + $window.reloadCaptcha = function(element) {
  73 + var $element = angular.element(element);
  74 +
  75 + if ($element.data('captcha')) {
  76 + $element.data('captcha').recarregar();
  77 + }
  78 + };
  79 +
  80 + $log.debug('runCaptcha');
  81 + }
  82 +
  83 + /** @ngInject */
48 84 function runSocialAuth($window, $rootScope, $interval, $log) {
49 85  
50   - $window.oauthClientAction = function (url){
  86 + $window.oauthClientAction = function(url) {
51 87 var child = $window.open(url, '_blank');
52 88 var interval = $interval(function() {
53 89 try {
54   - if(!child.closed) {
  90 + if (!child.closed) {
55 91 child.postMessage({
56 92 message: 'requestOauthClientPluginResult'
57 93 }, '*');
58 94 }
59   - } catch(e) {
  95 + } catch (e) {
60 96 // we're here when the child window has been navigated away or closed
61 97 if (child.closed) {
62 98 $interval.cancel(interval);
... ... @@ -118,7 +154,7 @@
118 154 // prevent skip link from redirecting
119 155 if ($event) { $event.preventDefault(); }
120 156  
121   - if(angular.isString(target)){
  157 + if (angular.isString(target)) {
122 158 target = angular.element(target);
123 159 }
124 160  
... ... @@ -137,7 +173,7 @@
137 173 $rootScope.$previousState.splice(-MAX_HISTORY, MAX_HISTORY);
138 174 });
139 175  
140   - $rootScope.goBack = $rootScope.goBack || function () {
  176 + $rootScope.goBack = $rootScope.goBack || function() {
141 177 return $rootScope.$previousState.pop();
142 178 };
143 179 }
... ... @@ -178,7 +214,7 @@
178 214  
179 215 /** @ngInject */
180 216 function runUtils($rootScope) {
181   - $rootScope.stripHtml = function (text) {
  217 + $rootScope.stripHtml = function(text) {
182 218 return String(text).replace(/<[^>]+>/gm, '');
183 219 };
184 220 }
... ...
src/app/pages/auth/auth.controller.js
... ... @@ -6,7 +6,7 @@
6 6 .controller('AuthPageController', AuthPageController);
7 7  
8 8 /** @ngInject */
9   - function AuthPageController($scope, $rootScope, $window, $location, $state, $timeout, AUTH_EVENTS, AuthService, DialogaService, Session, $log) {
  9 + function AuthPageController($scope, $rootScope, $window, $location, $state, $timeout, $interval, AUTH_EVENTS, AuthService, DialogaService, Session, $log) {
10 10 var vm = this;
11 11  
12 12 vm.$scope = $scope;
... ... @@ -15,6 +15,7 @@
15 15 vm.$location = $location;
16 16 vm.$state = $state;
17 17 vm.$timeout = $timeout;
  18 + vm.$interval = $interval;
18 19 vm.AUTH_EVENTS = AUTH_EVENTS;
19 20 vm.AuthService = AuthService;
20 21 vm.DialogaService = DialogaService;
... ... @@ -78,14 +79,38 @@
78 79 AuthPageController.prototype.attachListeners = function() {
79 80 var vm = this;
80 81  
  82 + vm.$scope.$on(vm.AUTH_EVENTS.registerSuccess, function(event, response) {
  83 + vm.$log.debug('TODO: handle register success');
  84 + vm.$log.debug('[register success] response', response);
  85 + });
  86 +
  87 + vm.$scope.$on(vm.AUTH_EVENTS.registerFailed, function(event, response) {
  88 + vm.$log.debug('TODO: handle register error');
  89 + vm.$log.debug('[register error] response', response);
  90 +
  91 + var reason = response.data.message;
  92 + vm.errorMessage = reason;
  93 + });
  94 +
81 95 vm.$scope.$on('oauthClientPluginResult', function(event, response) {
82 96 vm.$log.debug('response', response);
83 97  
84 98 // var logged_id = response.data.logged_id;
85 99 // var private_token = response.data.private_token;
86 100 // var user = response.data.user;
87   -
88 101 });
  102 +
  103 + var stop = null;
  104 + stop = vm.$interval(function(){
  105 + var $el = angular.element('#serpro_captcha');
  106 +
  107 + if ($el && $el.length > 0 ){
  108 + vm.$window.initCaptcha($el[0]);
  109 + vm.$interval.cancel(stop);
  110 + stop = undefined;
  111 + }
  112 +
  113 + }, 200);
89 114 };
90 115  
91 116 AuthPageController.prototype.onClickLogout = function() {
... ... @@ -94,7 +119,7 @@
94 119 vm.AuthService.logout();
95 120 };
96 121  
97   - AuthPageController.prototype.submitSigup = function(credentials) {
  122 + AuthPageController.prototype.submitSingup = function(credentials) {
98 123 var vm = this;
99 124  
100 125 vm.AuthService.register(credentials).then(function(response) {
... ... @@ -108,8 +133,19 @@
108 133 }, function(response) {
109 134 vm.$log.debug('register error.response', response);
110 135  
  136 + var message = response.data.message;
  137 + vm.errorMessage = message;
  138 +
  139 + if(response.data.code === 500){
  140 + vm.internalError = true;
  141 + }
  142 +
  143 +
111 144 // TODO: mensagens de erro
112 145 // TODO: tratar multiplos erros
  146 +
  147 + // javascript_console_message: "Unable to reach Serpro's Captcha validation service"
  148 + // message: "Internal captcha validation error"
113 149 });
114 150 };
115 151  
... ... @@ -137,15 +173,14 @@
137 173  
138 174 // start countdown
139 175 vm.countdown = vm.delay;
140   - (function countdown() {
141   - vm.$timeout(function() {
142   - vm.countdown--;
143   - vm.$log.debug('vm.countdown', vm.countdown);
144   - if (vm.countdown > 0) {
145   - countdown();
146   - }
147   - }, 1000);
148   - })();
  176 + var stop = null;
  177 + stop = vm.$interval(function() {
  178 + vm.countdown--;
  179 + if (vm.countdown <= 0) {
  180 + vm.$interval.cancel(stop);
  181 + stop = undefined;
  182 + }
  183 + }, 1000);
149 184  
150 185 vm.$timeout(function() {
151 186 var state = vm.params.state;
... ...
src/app/pages/auth/signin.html
... ... @@ -82,92 +82,87 @@
82 82 </p>
83 83 </div>
84 84 </div>
85   - <div class="row">
86   - <div class="col-xs-6">
87   - <button type="button" ng-click="pageSignin.authWithFacebook()" class="btn btn-lg btn-block btn-social btn-facebook">
88   - <span aria-hidden="true" class="icon-circle icon-small icon-circle-social-facebook">
89   - <span class="icon icon-social-facebook"></span>
90   - </span>
91   - <span class="text">Entrar com Facebook</span>
92   - </button>
93   - </div>
94   - <div class="col-xs-6">
95   - <button type="button" ng-click="pageSignin.authWithGooglePlus()" class="btn btn-lg btn-block btn-social btn-google-plus">
96   - <span aria-hidden="true" class="icon-circle icon-small icon-circle-social-googleplus">
97   - <span class="icon icon-social-googleplus"></span>
98   - </span>
99   - <span class="text">Entrar com Google+</span>
100   - </button>
  85 + <div class="row" ng-if="pageSignin.errorMessage">
  86 + <div class="col-sm-12">
  87 + <div class="alert alert-danger">
  88 + {{pageSignin.errorMessage}}
  89 + </div>
  90 + <div ng-if="vm.internalError">
  91 + <p>Este erro parece ser um problema interno.<br/>Por favor, tente novamente mais tarde.</p>
  92 + <p>Caso o problema persista, entre em contato!</p>
  93 + <p><a ui-sref="duvidas">Ir para página de contato</a></p>
  94 + </div>
101 95 </div>
102 96 </div>
103 97 <div class="row">
104 98 <div class="col-sm-12">
105   - <hr class="separator separator-cadastro"></hr>
106   - </div>
107   - <div class="row">
108   - <div class="col-sm-12">
109   - <form name="signupForm" ng-submit="pageSignin.submitSigup(pageSignin.signup)">
110   - <div class="form-group">
111   - <label for="signup-form--name">Nome*:</label>
112   - <span class="pull-right">*Dados obrigatórios</span>
113   - <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>
114   - <validation-messages field="signupForm.name"/>
115   - </div>
116   - <div class="form-group">
117   - <label for="signup-form--email">E-mail*:</label>
118   - <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>
119   - <validation-messages field="signupForm.email"/>
  99 + <form name="signupForm" ng-submit="pageSignin.submitSigup(pageSignin.signup)">
  100 + <div class="form-group">
  101 + <label for="signup-form--name">Nome*:</label>
  102 + <span class="pull-right">*Dados obrigatórios</span>
  103 + <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>
  104 + <validation-messages field="signupForm.name"/>
  105 + </div>
  106 + <div class="form-group">
  107 + <label for="signup-form--email">E-mail*:</label>
  108 + <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>
  109 + <validation-messages field="signupForm.email"/>
  110 + </div>
  111 + <div class="row">
  112 + <div class="col-sm-6">
  113 + <div class="form-group">
  114 + <label for="signup-form--password">Senha*:</label>
  115 + <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>
  116 + <validation-messages field="signupForm.password"/>
  117 + </div>
120 118 </div>
121   - <div class="row">
122   - <div class="col-sm-6">
123   - <div class="form-group">
124   - <label for="signup-form--password">Senha*:</label>
125   - <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>
126   - <validation-messages field="signupForm.password"/>
127   - </div>
  119 + <div class="col-sm-6">
  120 + <div class="form-group">
  121 + <label for="signup-form--password-confirmation">Confirmar Senha*:</label>
  122 + <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>
  123 + <validation-messages field="signupForm.password_confirmation"/>
128 124 </div>
129   - <div class="col-sm-6">
130   - <div class="form-group">
131   - <label for="signup-form--password-confirmation">Confirmar Senha*:</label>
132   - <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>
133   - <validation-messages field="signupForm.password_confirmation"/>
134   - </div>
  125 + </div>
  126 + </div>
  127 + <div class="row">
  128 + <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)">
  129 + <div class="error-message">
  130 + As senhas estão diferentes.
135 131 </div>
136 132 </div>
137   - <div class="row">
138   - <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)">
  133 + <div class="col-sm-12">
  134 + <span class="text" ng-show="signupForm.password.$viewValue.length > 0 && signupForm.password.$viewValue.length < 6">
139 135 <div class="error-message">
140   - As senhas estão diferentes.
  136 + A senha deve ter 6 ou mais caracteres e conter números e letras.
141 137 </div>
142   - </div>
143   - <div class="col-sm-12">
144   - <span class="text" ng-show="signupForm.password.$viewValue.length > 0 && signupForm.password.$viewValue.length < 6">
145   - <div class="error-message">
146   - A senha deve ter 6 ou mais caracteres e conter números e letras.
147   - </div>
148   - </span>
149   - </div>
  138 + </span>
150 139 </div>
151   - <div class="form-group">
152   - <div class="checkbox">
153   - <label for="user_terms_accepted">
154   - <input type="checkbox" id="user_terms_accepted" name="user_terms_accepted" value="aceito" ng-model="pageSignin.signup.user_terms_accepted" required>
155   - Já li e concordo com os
156   - <button type="button" class="btn btn-link" style="padding:0 0 4px 0;" data-toggle="modal" data-target="#modalTermosDeUso">Termos de Uso</button>
157   - </label>
158   - </div>
159   - </input>
160   - <validation-messages field="signupForm.user_terms_accepted"/>
161 140 </div>
162 141 <div class="form-group">
163   - <span>Digite o texto da imagem</span>
164   - <p>O Captcha vai aqui</p>
  142 + <div class="checkbox">
  143 + <label for="user_terms_accepted">
  144 + <input type="checkbox" id="user_terms_accepted" name="user_terms_accepted" value="aceito" ng-model="pageSignin.signup.user_terms_accepted" required>
  145 + Já li e concordo com os
  146 + <button type="button" class="btn btn-link" style="padding:0 0 4px 0;" data-toggle="modal" data-target="#modalTermosDeUso">Termos de Uso</button>
  147 + </label>
  148 + </div>
  149 + </input>
  150 + <validation-messages field="signupForm.user_terms_accepted"/>
  151 + </div>
  152 + <div class="form-group">
  153 + <div id="serpro_captcha" class="captcha">
165 154 </div>
166   - <div class="form-group">
167   - <button class="btn btn-lg btn-block btn-submit" ng-class=" {'disabled' : !pageSignin.signup.user_terms_accepted }" type="submit">Cadastrar</button>
  155 + <div class="captcha">
  156 + Digite os caracteres acima:
168 157 </div>
169   - </form>
170   - </div>
  158 + <div class="captcha">
  159 + <input type="text" name="captcha_text" id="captcha_text" aria-label="Escreva os caracteres do captcha aqui" ng-model="pageSignin.signup.captcha_text">
  160 + </div>
  161 + </div>
  162 + <div class="form-group">
  163 + <button class="btn btn-lg btn-block btn-submit" ng-class=" {'disabled' : !pageSignin.signup.user_terms_accepted }" type="submit">Cadastrar</button>
  164 + </div>
  165 + </form>
171 166 </div>
172 167 </div>
173 168 </div>
... ...
src/index.html
... ... @@ -59,5 +59,6 @@
59 59 <!-- endinject -->
60 60 <!-- endbuild -->
61 61 <script defer="defer" src="http://barra.brasil.gov.br/barra.js" type="text/javascript"></script>
  62 + <script defer="defer" src="http://captcha2.servicoscorporativos.serpro.gov.br/js/captcha.serpro.gov.br.js"></script>
62 63 </body>
63 64 </html>
... ...