diff --git a/src/app/components/auth/auth.service.js b/src/app/components/auth/auth.service.js index 223c983..af30678 100644 --- a/src/app/components/auth/auth.service.js +++ b/src/app/components/auth/auth.service.js @@ -10,6 +10,115 @@ /** @ngInject */ function AuthService($http, $rootScope, Session, AUTH_EVENTS, API, $log) { + function register (data){ + var url = API.host + '/api/v1/register'; + $log.debug('data', data); + // var encodedData = data; + var encodedData = ''; + encodedData += 'name=' + data.name; + encodedData += '&email=' + data.email; + encodedData += '&login=' + data.email.substr(0, data.email.indexOf('@')).toLowerCase().replace(/\W+/g,"").substr(0,25) + "-" + Date.now(); + encodedData += '&email=' + data.email; + encodedData += '&password=' + data.password; + encodedData += '&password_confirmation=' + data.password_confirmation; + encodedData += '&user_terms_accepted=' + data.user_terms_accepted; + + // var encodedData = _encodeObj(data); + // var encodedData = angular.element.param(data); + // '&email=&login=&name=&password=&password_confirmation'; + // oauth_providers + // oauth_signup_token + // captcha_text + // user_terms_accepted + + return $http.post(url, encodedData) + .then(function(response) { + $log.debug('AuthService.register [SUCCESS] response', response); + + var currentUser = Session.create(response.data); + + $rootScope.$broadcast(AUTH_EVENTS.registerSuccess, currentUser); + $rootScope.$broadcast(AUTH_EVENTS.loginSuccess, currentUser); + + return response; + }, function(response) { + $log.debug('AuthService.register [FAIL] response', response); + + $rootScope.$broadcast(AUTH_EVENTS.registerFailed); + return response; + }); + } + + function activate (code) { + var url = '/api/v1/activate'; + var data = { + private_token: API.token, + activation_code: code + }; + var encodedData = 'private_token=' + API.token; + encodedData += '&activation_code=' + code; + + return $http + .patch(url, encodedData) + .then(function(response) { + $log.debug('AuthService.activate [SUCCESS] response', response); + + // 'Usuário ativado com sucesso' + $rootScope.$broadcast(AUTH_EVENTS.activateSuccess, response); + return currentUser; + }, function(response) { + // 'Erro: O código de ativação é inválido.' + $log.debug('AuthService.activate [FAIL] response', response); + $rootScope.$broadcast(AUTH_EVENTS.activateFailed); + }); + } + + function changePassword (code, newPassword, newPasswordConfirmation){ + var url = '/api/v1/new_password'; + var data = { + code: code, + password: newPassword, + password_confirmation: newPasswordConfirmation + }; + var encodedData = 'code=' + code; + encodedData += '&password=' + newPassword; + encodedData += '&password_confirmation=' + newPasswordConfirmation; + + return $http + .patch(url, encodedData) + .then(function(response) { + $log.debug('AuthService.changePassword [SUCCESS] response', response); + + // 'Senha alterada com sucesso.' + $rootScope.$broadcast(AUTH_EVENTS.changePasswordSuccess, response); + return currentUser; + }, function(response) { + // 'Não foi possível trocar a senha com os dados informados.' + $log.debug('AuthService.changePassword [FAIL] response', response); + $rootScope.$broadcast(AUTH_EVENTS.changePasswordFailed); + }); + } + + function forgotPassword (form){ + var url = '/api/v1/forgot_password'; + var data = form.serialize(); + var encodedData = data; + + return $http + .post(url, encodedData) + .then(function(response) { + $log.debug('AuthService.forgotPassword [SUCCESS] response', response); + + // 'Verifique seu email para efetuar a troca da senha.' + $rootScope.$broadcast(AUTH_EVENTS.forgotPasswordSuccess, response); + return currentUser; + }, function(response) { + // 'Não foi possível requisitar a troca de senha para os dados informados.' + $log.debug('AuthService.forgotPassword [FAIL] response', response); + $rootScope.$broadcast(AUTH_EVENTS.forgotPasswordFailed); + }); + } + function login (credentials) { var hostProd = 'http://login.dialoga.gov.br'; var url = hostProd + '/api/v1/login'; @@ -49,7 +158,27 @@ return (service.isAuthenticated() && authorizedRoles.indexOf(Session.userRole) !== -1); } + function _encodeObj(obj){ + var result = []; + var str = null; + var p = null; + + for (p in obj) { + if (obj.hasOwnProperty(p)) { + // str = encodeURIComponent(p) + '=' + obj[p]; + str = p + '=' + obj[p]; + result.push(str); + } + } + + return result.join('&'); + } + var service = { + register: register, + activate: activate, + changePassword: changePassword, + forgotPassword: forgotPassword, login: login, logout: logout, isAuthenticated: isAuthenticated, diff --git a/src/app/index.config.js b/src/app/index.config.js index 1c5ef25..521b44e 100644 --- a/src/app/index.config.js +++ b/src/app/index.config.js @@ -3,11 +3,17 @@ angular .module('dialoga') + // .config(configWhitelist) .config(configHeadersInterceptor) .config(configLocationProvider) .config(configBreadcrumbProvider) .config(config); + // /** @ngInject */ + // function configWhitelist($sceDelegateProvider) { + // $sceDelegateProvider.resourceUrlWhitelist(['self', 'http://dialoga.gov.br/**', 'http://*.dialoga.gov.br/**']); + // } + /** @ngInject */ function configHeadersInterceptor ($httpProvider){ @@ -20,8 +26,16 @@ // $httpProvider.defaults.useXDomain = true; // $httpProvider.defaults.headers.common = {Accept: 'application/json, text/plain, */*'}; // $httpProvider.defaults.headers.post = {'Content-Type': "application/json;charset=utf-8"}; - $httpProvider.defaults.headers.post = {'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8'}; + $httpProvider.defaults.headers.post = {'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'}; + // $httpProvider.defaults.headers.post = {'Content-Type': undefined}; + // $httpProvider.defaults.headers.post['Access-Control-Allow-Headers'] = '*'; + // $httpProvider.defaults.headers.post['Access-Control-Allow-Methods'] = '*'; + // $httpProvider.defaults.headers.post['Access-Control-Allow-Origin'] = '*'; // $httpProvider.defaults.headers.common['Access-Control-Allow-Headers'] = '*'; + // $httpProvider.defaults.headers.common['Access-Control-Allow-Methods'] = '*'; + // $httpProvider.defaults.headers.common['Access-Control-Allow-Origin'] = '*'; + + $httpProvider.defaults.transformRequest = false; $httpProvider.interceptors.push([ '$injector', diff --git a/src/app/index.constants.js b/src/app/index.constants.js index 53e48e0..faf964e 100644 --- a/src/app/index.constants.js +++ b/src/app/index.constants.js @@ -6,9 +6,7 @@ .module('dialoga') .constant('API', { token: null, - hostDev: '', - hostHom: 'http://hom.dialoga.gov.br', - hostProd: 'http://login.dialoga.gov.br', + host: 'http://hom.dialoga.gov.br', articleId: { home: '103358', about: '108073', @@ -19,7 +17,14 @@ .constant('AUTH_EVENTS', { loginSuccess: 'auth-login-success', loginFailed: 'auth-login-failed', - logoutSuccess: 'auth-logout-success', + registerSuccess: 'auth-register-success', + registerFailed: 'auth-register-failed', + activateSuccess: 'auth-activate-success', + activateFailed: 'auth-activate-failed', + changePasswordSuccess: 'auth-changePassword-success', + changePasswordFailed: 'auth-changePassword-failed', + forgotPassowrdSuccess: 'auth-forgotPassowrd-success', + forgotPassowrdFailed: 'auth-forgotPassowrd-failed', sessionTimeout: 'auth-session-timeout', notAuthenticated: 'auth-not-authenticated', notAuthorized: 'auth-not-authorized' diff --git a/src/app/index.run.js b/src/app/index.run.js index de5aace..63faa2b 100644 --- a/src/app/index.run.js +++ b/src/app/index.run.js @@ -111,9 +111,8 @@ /** @ngInject */ function runPath($rootScope, API, $window, $log) { - var isProd = (/^http:\/\/dialoga\.gov\.br\//.test($window.location.href)); - var isHom = (/^http:\/\/hom.dialoga\.gov\.br\//.test($window.location.href)); - $rootScope.basePath = isProd ? API.hostProd : (isHom ? API.hostHom : API.hostDev); + // $rootScope.basePath = API.host; + $rootScope.basePath = ''; $log.debug('[RUN] Path end.'); } diff --git a/src/app/pages/auth/auth.controller.js b/src/app/pages/auth/auth.controller.js index 56e08ec..0950220 100644 --- a/src/app/pages/auth/auth.controller.js +++ b/src/app/pages/auth/auth.controller.js @@ -27,7 +27,8 @@ var vm = this; // init variables - vm.credentials = {}; + vm.signin = {}; + vm.singup = {}; vm.terms = null; vm.loadingTerms = null; @@ -35,15 +36,14 @@ vm.currentUser = vm.Session.getCurrentUser(); // handle login - vm.$scope.$on(vm.AUTH_EVENTS.loginSuccess, function () { - vm.currentUser = vm.Session.getCurrentUser(); - }); - - // handle logout - vm.$scope.$on(vm.AUTH_EVENTS.logoutSuccess, function () { - vm.currentUser = vm.Session.getCurrentUser(); - }); - // ... + vm.$scope.$on(vm.AUTH_EVENTS.loginSuccess, function () { + vm.currentUser = vm.Session.getCurrentUser(); + }); + + // handle logout + vm.$scope.$on(vm.AUTH_EVENTS.logoutSuccess, function () { + vm.currentUser = vm.Session.getCurrentUser(); + }); }; AuthPageController.prototype.loadData = function() { @@ -68,7 +68,25 @@ vm.AuthService.logout(); }; - AuthPageController.prototype.login = function(credentials) { + AuthPageController.prototype.submitSigup = function(credentials) { + var vm = this; + + vm.AuthService.register(credentials).then(function(response){ + vm.$log.debug('register success.response', response); + + // TODO: mensagens de sucesso + // 'Cadastro efetuado com sucesso.' + // 'Verifique seu email para confirmar o cadastro.' + + }, function(response){ + vm.$log.debug('register error.response', response); + + // TODO: mensagens de erro + // TODO: tratar multiplos erros + }); + }; + + AuthPageController.prototype.submitSignin = function(credentials) { var vm = this; vm.AuthService.login(credentials).then(function(user) { diff --git a/src/app/pages/auth/signin.html b/src/app/pages/auth/signin.html index 04b7ac8..6735978 100644 --- a/src/app/pages/auth/signin.html +++ b/src/app/pages/auth/signin.html @@ -24,17 +24,17 @@

Já possui cadastro

Use seus dados para acessar o Dialoga Brasil

-
+
- - + + - +
- - - + + +
@@ -119,55 +119,66 @@
- +
- + *Dados obrigatórios - - + +
- - - + + +
- - - + + +
- - - + + +
+
+
+ As senhas estão diferentes. +
+
- - A senha deve ter 6 ou mais caracteres e conter números e letras. + +
+ A senha deve ter 6 ou mais caracteres e conter números e letras. +
- - Já li os - - e concordo com os mesmos* +
+ +
- +
Digite o texto da imagem

O Captcha vai aqui

- +
-- libgit2 0.21.2