UNPKG

hurbis-ui-seguranca-v1-snapshot

Version:

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

634 lines 32.9 kB
/** * @license hurbis-ui-seguranca-v1-snapshot v1.0.9 * (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, audience: this.configuracao.nomeRecurso, responseType: 'id_token token', redirectUri: this.configuracao.redirectUrl }); } 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, "expiraEm", { get: function () { return localStorage.getItem(this.nomeExpiraEm); }, set: function (expira_em) { localStorage.setItem(this.nomeExpiraEm, expira_em); }, 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.tokenAcesso; } if (token == null) { return true; } return this.jwtHelper.isTokenExpired(token); }; // private recuperarTipoConexaoSocial(tipoConexaoSocial: TipoConexaoSocial): string { // switch (tipoConexaoSocial) { // case TipoConexaoSocial.Google: // return "google"; // default: // return "facebook"; // } // } // loginSocial(tipoConexaoSocial: TipoConexaoSocial): ng.IPromise<IAutenticadorUsuarioResult> { // return this.$q((resolve: ng.IQResolveReject<IAutenticadorUsuarioResult>, // reject: ng.IQResolveReject<IAutenticacaoErro>): void => { // this.broker.popup.authorize({ // domain: this.configuracao.dominio, // connection: this.recuperarTipoConexaoSocial(tipoConexaoSocial), // responseType: "token id_token", // redirectUri: this.configuracao.callbackUrl // }, (erro: IAutenticacaoErro, resultado: string) => { // if (erro) { // reject(erro); // return; // } // this.broker.parseHash({ hash: resultado }, // (erro, resultado) => { // if (erro) { // reject(erro); // return; // } // this.token = resultado.idToken; // this.tokenAcesso = resultado.accessToken; // this.consultarUsuario(this.tokenAcesso).then( // (resultado: IAutenticadorUsuarioResult) => { // this.usuario = resultado; // resolve(resultado); // }, // (erro: any) => { // 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. // */ // login(usuario: UsuarioModel, nomeRecurso: string = null, permissao: string = null): ng.IPromise<IAutenticadorUsuarioResult> { // return this.$q((resolve: ng.IQResolveReject<IAutenticadorUsuarioResult>, // reject: ng.IQResolveReject<IAutenticacaoErro>): void => { // let requisicao: auth0.DefaultLoginOptions = { // 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, // (erro: IAutenticacaoErro, resultado: ILoginResult) => { // if (erro) { // reject(erro); // } else { // this.token = resultado.idToken; // this.tokenAcesso = resultado.accessToken; // this.consultarUsuario(this.tokenAcesso).then( // (resultado: IAutenticadorUsuarioResult) => { // this.usuario = resultado; // resolve(resultado); // }, // (erro: any) => { // 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); // localStorage.removeItem(this.autenticacaoAutomatica.nomePassword); //clearTimeout(this.tempoRenovacaoToken); 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.prototype.solicitarNovoToken = function () { var _this = this; var dataHoraRenovacao = JSON.stringify(((Number(this.expiraEm) - 300) * 1000) + new Date().getTime()); return this.$q(function (resolve, reject) { _this.broker.renewAuth({ domain: _this.configuracao.dominio, clientID: _this.configuracao.gerenciador.clientId, redirectUri: _this.configuracao.callbackUrl, responseType: 'id_token token', timeout: Number(dataHoraRenovacao), usePostMessage: false }, function (erro, resultado) { if (erro) { reject(erro); console.log(erro); console.log("Não foi possível gerar um novo token!"); } else { resolve(resultado); console.log(resultado); console.log("Solicitação de token realizada com sucesso!"); } }); }); }; AutenticacaoService.prototype.login = function () { this.broker.authorize({ domain: this.configuracao.dominio, audience: this.configuracao.nomeRecurso, clientID: this.configuracao.clientId, redirectUri: this.configuracao.redirectUrl, responseType: 'id_token token', prompt: 'login', scope: "openid profile email" }); }; AutenticacaoService.prototype.renovarSessao = function () { var _this = this; this.broker.checkSession({ domain: this.configuracao.dominio, audience: this.configuracao.nomeRecurso, clientID: this.configuracao.clientId, redirectUri: this.configuracao.redirectUrl, responseType: 'id_token token', usePostMessage: true, prompt: 'none' }, function (erro, resultado) { if (erro) { console.log(erro); console.log("Não foi possível gerar um novo token!"); _this.login(); } else { console.log("Solicitação de token realizada com sucesso!"); _this.registrarSessao(resultado); } }); }; AutenticacaoService.prototype.registrarSessao = function (authResult) { this.token = authResult.idToken; this.tokenAcesso = authResult.accessToken; var dataHoraRenovacao = JSON.stringify(authResult.expiresIn * 1000 + new Date().getTime()); //this.escalonarRenovacao(dataHoraRenovacao); }; AutenticacaoService.prototype.escalonarRenovacao = function (dataHoraRenovacao) { var expiraEm = dataHoraRenovacao; var delay = Number(expiraEm) - Date.now(); if (delay > 0) { this.tempoRenovacaoToken = setTimeout(function () { this.solicitarNovoToken(); }, delay); } }; 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