UNPKG

hurbis-ui-seguranca-v1

Version:

Biblioteca de segurança para autenticação e autorização utilizando Auth0.

543 lines 28 kB
/** * @license hurbis-ui-seguranca-v1 v1.4.1 * (c) 2018 Hurbis Tecnologia da Informação Ltda. https://www.hurbis.com.br * License: MIT */ var hurbis; (function (hurbis) { var ui; (function (ui) { var seguranca; (function (seguranca) { "use strict"; var Modulo = /** @class */ (function () { function Modulo() { } Modulo.inicializar = function () { hurbis.comum.GestorModulo.registrarModulo(Modulo.DEFINICAO); hurbis.comum.GestorModulo.inicializarModulo({ moduloDefinicao: Modulo.DEFINICAO, objeto: ["$rootScope", "authManager", "$hbsSegurancaConfig", function ($rootScope, authManager, $hbsSegurancaConfig) { var configuracao = $hbsSegurancaConfig.getConfiguracao(); if (configuracao.interceptador == null || !configuracao.interceptador.verificarAoAtualizar) { return; } authManager.checkAuthOnRefresh(); if (configuracao.interceptador.tokenExpirou) { $rootScope.$on("tokenHasExpired", configuracao.interceptador.tokenExpirou); } }] }); }; Modulo.DEFINICAO = { nome: "hurbis.ui.seguranca", requisitos: [ "hurbis.comum", "angular-jwt" ] }; /// propriedade obrigatória para inicialização return Modulo; }()); seguranca.Modulo = Modulo; Modulo.inicializar(); })(seguranca = ui.seguranca || (ui.seguranca = {})); })(ui = hurbis.ui || (hurbis.ui = {})); })(hurbis || (hurbis = {})); var hurbis; (function (hurbis) { var ui; (function (ui) { var seguranca; (function (seguranca) { "use strict"; var TipoConexaoSocial; (function (TipoConexaoSocial) { TipoConexaoSocial[TipoConexaoSocial["Facebook"] = 0] = "Facebook"; TipoConexaoSocial[TipoConexaoSocial["Google"] = 1] = "Google"; })(TipoConexaoSocial = seguranca.TipoConexaoSocial || (seguranca.TipoConexaoSocial = {})); //#endregion })(seguranca = ui.seguranca || (ui.seguranca = {})); })(ui = hurbis.ui || (hurbis.ui = {})); })(hurbis || (hurbis = {})); var hurbis; (function (hurbis) { var ui; (function (ui) { var seguranca; (function (seguranca) { "use strict"; var UsuarioModel = /** @class */ (function () { function UsuarioModel() { } return UsuarioModel; }()); seguranca.UsuarioModel = UsuarioModel; })(seguranca = ui.seguranca || (ui.seguranca = {})); })(ui = hurbis.ui || (hurbis.ui = {})); })(hurbis || (hurbis = {})); var hurbis; (function (hurbis) { var ui; (function (ui) { var seguranca; (function (seguranca) { "use strict"; var ConfiguracaoProvider = /** @class */ (function () { function ConfiguracaoProvider(jwtOptionsProvider, $httpProvider) { var _this = this; this.jwtOptionsProvider = jwtOptionsProvider; this.$httpProvider = $httpProvider; this.getConfiguracao = function () { return _this._configuracao; }; //#region Serviço this.$get = [function () { return { getConfiguracao: _this.getConfiguracao }; }]; } ConfiguracaoProvider.prototype.configurar = function (configuracao) { this._configuracao = configuracao; this.configurarInterceptador(); }; ConfiguracaoProvider.prototype.configurarInterceptador = function () { if (this._configuracao.interceptador == null) { return; } var configuracaoJwt = { urlParam: this._configuracao.interceptador.nomeParametroUrl, tokenGetter: this._configuracao.interceptador.recuperarToken, whiteListedDomains: this._configuracao.interceptador.whiteListedDomains }; if (this._configuracao.interceptador.loginUrl) { angular.extend(configuracaoJwt, { loginPath: this._configuracao.interceptador.loginUrl }); } if (this._configuracao.interceptador.cabecalhoAutorizacao) { angular.extend(configuracaoJwt, { authHeader: this._configuracao.interceptador.cabecalhoAutorizacao }); } if (this._configuracao.interceptador.cabecalhoAutorizacaoPrefixo) { angular.extend(configuracaoJwt, { authPrefix: this._configuracao.interceptador.cabecalhoAutorizacaoPrefixo }); } if (this._configuracao.interceptador.naoAutenticadoUrl) { angular.extend(configuracaoJwt, { unauthenticatedRedirectPath: this._configuracao.interceptador.naoAutenticadoUrl }); } if (this._configuracao.interceptador.naoAutenticadoRedirecionador) { angular.extend(configuracaoJwt, { unauthenticatedRedirector: this._configuracao.interceptador.naoAutenticadoRedirecionador }); } this.jwtOptionsProvider.config(configuracaoJwt); this.$httpProvider.interceptors.push("jwtInterceptor"); }; //#endregion ConfiguracaoProvider.inicializar = function () { hurbis.comum.GestorModulo.registrarFuncionalidade({ moduloDefinicao: seguranca.Modulo.DEFINICAO, nome: "$hbsSegurancaConfig", tipo: hurbis.comum.FuncionalidadeTipo.Provedor, objeto: ["jwtOptionsProvider", "$httpProvider", ConfiguracaoProvider] }); }; return ConfiguracaoProvider; }()); seguranca.ConfiguracaoProvider = ConfiguracaoProvider; ConfiguracaoProvider.inicializar(); })(seguranca = ui.seguranca || (ui.seguranca = {})); })(ui = hurbis.ui || (hurbis.ui = {})); })(hurbis || (hurbis = {})); var hurbis; (function (hurbis) { var ui; (function (ui) { var seguranca; (function (seguranca) { "use strict"; var AutenticacaoService = /** @class */ (function () { function AutenticacaoService($q, $resource, jwtHelper, $hbsSegurancaConfig) { this.$q = $q; this.$resource = $resource; this.jwtHelper = jwtHelper; this.configuracao = $hbsSegurancaConfig.getConfiguracao(); this.broker = new auth0.WebAuth({ domain: this.configuracao.dominio, clientID: this.configuracao.clientId }); } Object.defineProperty(AutenticacaoService.prototype, "token", { //#region Propriedades get: function () { return localStorage.getItem(this.configuracao.cookie.nomeToken); }, set: function (id_token) { localStorage.setItem(this.configuracao.cookie.nomeToken, id_token); }, enumerable: true, configurable: true }); Object.defineProperty(AutenticacaoService.prototype, "tokenAcesso", { get: function () { return localStorage.getItem(this.configuracao.cookie.nomeTokenAcesso); }, set: function (access_token) { localStorage.setItem(this.configuracao.cookie.nomeTokenAcesso, access_token); }, enumerable: true, configurable: true }); Object.defineProperty(AutenticacaoService.prototype, "usuario", { get: function () { return JSON.parse(localStorage.getItem(this.configuracao.cookie.nomeProfile)) || {}; }, set: function (profile) { localStorage.setItem(this.configuracao.cookie.nomeProfile, JSON.stringify(profile)); }, enumerable: true, configurable: true }); //#endregion //#region Consultar Usuário AutenticacaoService.prototype.consultarUsuario = function (tokenAcesso) { var _this = this; return this.$q(function (resolve, reject) { _this.broker.client.userInfo(tokenAcesso, function (erro, resultado) { if (erro) { reject(erro); return; } resultado.user_id = resultado.sub; resultado.username = resultado.nickname; if (_this.configuracao.caminhoUserMetadata) { resultado.user_metadata = resultado[_this.configuracao.caminhoUserMetadata]; } if (_this.configuracao.caminhoAppMetadata) { resultado.app_metadata = resultado[_this.configuracao.caminhoAppMetadata]; } resolve(resultado); }); }); }; //#endregion AutenticacaoService.prototype.tokenExpirou = function (token) { if (token === void 0) { token = this.token; } if (token == null) { return true; } return this.jwtHelper.isTokenExpired(token); }; AutenticacaoService.prototype.recuperarTipoConexaoSocial = function (tipoConexaoSocial) { switch (tipoConexaoSocial) { case seguranca.TipoConexaoSocial.Google: return "google"; default: return "facebook"; } }; AutenticacaoService.prototype.loginSocial = function (tipoConexaoSocial) { var _this = this; return this.$q(function (resolve, reject) { _this.broker.popup.authorize({ domain: _this.configuracao.dominio, connection: _this.recuperarTipoConexaoSocial(tipoConexaoSocial), responseType: "token id_token", redirectUri: _this.configuracao.callbackUrl }, function (erro, resultado) { if (erro) { reject(erro); return; } _this.broker.parseHash({ hash: resultado }, function (erro, resultado) { if (erro) { reject(erro); return; } _this.token = resultado.idToken; _this.tokenAcesso = resultado.accessToken; _this.consultarUsuario(_this.tokenAcesso).then(function (resultado) { _this.usuario = resultado; resolve(resultado); }, function (erro) { _this.token = null; _this.tokenAcesso = null; reject(erro); }); }); }); }); }; /** * Autentica o usuário. * @param usuario Usuário a ser autenticado. * @param nomeRecurso Nome do recurso (Identificador da API) definido no Auth0 responsável por identificar o servidor de recursos da aplicação. * @param permissao Caso informado o nome do recurso, o parâmetro scope será atribuído inicialmente com "openid" e concatenado com as demais permissões informadas. As permissões deverão estar separadas por espaços. */ AutenticacaoService.prototype.login = function (usuario, nomeRecurso, permissao) { var _this = this; if (nomeRecurso === void 0) { nomeRecurso = null; } if (permissao === void 0) { permissao = null; } return this.$q(function (resolve, reject) { var requisicao = { realm: _this.configuracao.conexao, username: usuario.email, password: usuario.senha }; requisicao.audience = (nomeRecurso != null) ? nomeRecurso : _this.configuracao.nomeRecurso; if (requisicao.audience != null) { requisicao.scope = "openid" + ((permissao != null) ? " " + permissao.trim() : ""); } _this.broker.client.login(requisicao, function (erro, resultado) { if (erro) { reject(erro); } else { _this.token = resultado.idToken; _this.tokenAcesso = resultado.accessToken; _this.consultarUsuario(_this.tokenAcesso).then(function (resultado) { _this.usuario = resultado; resolve(resultado); }, function (erro) { _this.token = null; _this.tokenAcesso = null; reject(erro); }); } }); }); }; /** * Limpa cookies e cache de autenticação. * @param forcarServidor Força limpeza de eventuais sessões abertas no servidor de autenticação. * Obs.: A aplicação será redirecionada. */ AutenticacaoService.prototype.logout = function (forcarServidor) { localStorage.removeItem(this.configuracao.cookie.nomeToken); localStorage.removeItem(this.configuracao.cookie.nomeTokenAcesso); localStorage.removeItem(this.configuracao.cookie.nomeProfile); if (this.configuracao.gerenciador != null) { localStorage.removeItem(this.configuracao.gerenciador.cookieNomeToken); } if (forcarServidor) { this.broker.logout({ returnTo: this.configuracao.logoutUrl, clientID: this.configuracao.clientId }); } }; /** * Verifica se o usuário é válido. * @param login Login (username) do usuário a ser validado. * @param senha Senha do usuário a ser validado. */ AutenticacaoService.prototype.validarUsuario = function (login, senha) { var _this = this; return this.$q(function (resolve, reject) { _this.broker.client.login({ realm: _this.configuracao.conexao, username: login, password: senha, }, function (erro, resultado) { if (erro) { reject(erro); } else { resolve(true); } }); }); }; /** * Uma nova senha será enviada para o e-mail informado. * @param email Endereço de e-mail para onde será enviada a solicitação. */ AutenticacaoService.prototype.solicitarNovaSenha = function (email) { var _this = this; return this.$q(function (resolve, reject) { _this.broker.changePassword({ connection: _this.configuracao.conexao, email: email }, function (erro, resultado) { if (erro) { reject(erro); } else { resolve(resultado); } }); }); }; AutenticacaoService.inicializar = function () { hurbis.comum.GestorModulo.registrarFuncionalidade({ moduloDefinicao: seguranca.Modulo.DEFINICAO, nome: "$hbsSeguranca", tipo: hurbis.comum.FuncionalidadeTipo.Servico, objeto: ["$q", "$resource", "jwtHelper", "$hbsSegurancaConfig", AutenticacaoService] }); }; return AutenticacaoService; }()); seguranca.AutenticacaoService = AutenticacaoService; AutenticacaoService.inicializar(); })(seguranca = ui.seguranca || (ui.seguranca = {})); })(ui = hurbis.ui || (hurbis.ui = {})); })(hurbis || (hurbis = {})); var hurbis; (function (hurbis) { var ui; (function (ui) { var seguranca; (function (seguranca) { "use strict"; var ManutencaoService = /** @class */ (function () { function ManutencaoService($resource, jwtHelper, $q, $hbsSegurancaConfig) { this.$resource = $resource; this.jwtHelper = jwtHelper; this.$q = $q; this.configuracao = $hbsSegurancaConfig.getConfiguracao(); this.enderecoUsuario = this.configuracao.gerenciador.enderecoApi + "users/:id"; this.brokerAutenticador = new auth0.WebAuth({ domain: this.configuracao.dominio, clientID: this.configuracao.gerenciador.clientId }); } Object.defineProperty(ManutencaoService.prototype, "tokenManutencao", { get: function () { return localStorage.getItem(this.configuracao.gerenciador.cookieNomeToken); }, set: function (token) { localStorage.setItem(this.configuracao.gerenciador.cookieNomeToken, token); }, enumerable: true, configurable: true }); ManutencaoService.prototype.iniciarRecursosAsync = function () { var _this = this; return this.$q(function (resolve, reject) { if (_this.tokenManutencao != null && !_this.jwtHelper.isTokenExpired(_this.tokenManutencao)) { if (_this.dadoUsuario == null) { _this.iniciarServicoUsuario(); } resolve(); return; } _this.dadoUsuario = null; _this.brokerAutenticador.client.oauthToken({ audience: _this.configuracao.gerenciador.enderecoApi, client_secret: _this.configuracao.gerenciador.clientSecret, grantType: "client_credentials" }, function (erro, token) { if (erro) { reject(erro); return; } _this.tokenManutencao = token.accessToken; _this.iniciarServicoUsuario(); resolve(); }); }); }; ManutencaoService.prototype.iniciarServicoUsuario = function () { var cabecalhoRequisicao = { "Authorization": "Bearer " + this.tokenManutencao }; this.dadoUsuario = this.$resource(this.enderecoUsuario, { id: "@id" }, { get: { method: "GET", headers: cabecalhoRequisicao }, save: { method: "POST", headers: cabecalhoRequisicao }, atualizar: { method: "PATCH", headers: cabecalhoRequisicao } }); }; ManutencaoService.prototype.cadastrarUsuario = function (usuario, verificarEmail) { var _this = this; if (verificarEmail === void 0) { verificarEmail = false; } return this.$q(function (resolve, reject) { _this.iniciarRecursosAsync().then(function () { var usuarioInterface = { connection: _this.configuracao.conexao, email: usuario.email, password: usuario.senha, email_verified: !verificarEmail, verify_email: verificarEmail, user_metadata: { nome: usuario.nome, data_nascimento: usuario.dataNascimento.toJSON(), sexo: usuario.sexo, foto_url: usuario.fotoURL } }; _this.dadoUsuario.save(null, usuarioInterface, function (resultado) { resolve(resultado); }, function (erro) { reject(erro); }); }, function (erro) { reject(erro); }); }); }; ManutencaoService.prototype.atualizarUsuario = function (usuario) { var _this = this; return this.$q(function (resolve, reject) { _this.iniciarRecursosAsync().then(function () { var usuarioRequisicao = { client_id: _this.configuracao.clientId, connection: _this.configuracao.conexao, email: usuario.email, user_metadata: { nome: usuario.nome, data_nascimento: usuario.dataNascimento.toJSON(), sexo: usuario.sexo, foto_url: usuario.fotoURL } }; _this.dadoUsuario.atualizar({ id: usuario.autorizadorUsuarioId }, usuarioRequisicao, function (resultado) { resolve(resultado); }, function (erro) { reject(erro); }); }, function (erro) { reject(erro); }); }); }; ManutencaoService.prototype.alterarSenha = function (autorizadorUsuarioId, senhaNova) { var _this = this; return this.$q(function (resolve, reject) { _this.iniciarRecursosAsync().then(function () { var usuarioRequisicao = { client_id: _this.configuracao.clientId, connection: _this.configuracao.conexao, password: senhaNova }; _this.dadoUsuario.atualizar({ id: autorizadorUsuarioId }, usuarioRequisicao, function (resultado) { resolve(resultado); }, function (erro) { reject(erro); }); }, function (erro) { reject(erro); }); }); }; ManutencaoService.inicializar = function () { hurbis.comum.GestorModulo.registrarFuncionalidade({ moduloDefinicao: seguranca.Modulo.DEFINICAO, nome: "$hbsSegurancaManutencao", tipo: hurbis.comum.FuncionalidadeTipo.Servico, objeto: ["$resource", "jwtHelper", "$q", "$hbsSegurancaConfig", ManutencaoService] }); }; return ManutencaoService; }()); seguranca.ManutencaoService = ManutencaoService; ManutencaoService.inicializar(); })(seguranca = ui.seguranca || (ui.seguranca = {})); })(ui = hurbis.ui || (hurbis.ui = {})); })(hurbis || (hurbis = {})); //# sourceMappingURL=hurbis-ui-seguranca-v1.js.map