hurbis-ui-seguranca-v1-snapshot
Version:
Biblioteca de segurança para autenticação e autorização utilizando Auth0.
634 lines • 32.9 kB
JavaScript
/**
* @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