@betha-plataforma/oauth
Version:
Biblioteca JavaScript para lidar com o fluxo do OAuth 2.0 em aplicações Web, com suporte a TypeScript.
108 lines • 8.45 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { getWindow, MessageBoundHiddenIFrame } from './Helpers';
export class OAuthMonitor {
constructor({ app, interval = 1000 }, { onSessionChanged = () => void 0, onSessionEnded = () => void 0, onSessionRestablished = () => void 0, }) {
this.start = () => __awaiter(this, void 0, void 0, function* () {
if (this.isRunning) {
this.stop();
}
this.isRunning = true;
this.session = this.app.getSession();
this.frame = new MessageBoundHiddenIFrame({
url: this.app.config.provider.check_session_iframe,
window: getWindow(),
}, { onMessage: this.handleMessage });
return this.frame.load().then(() => {
this.timer = setInterval(this.checkSession, this.interval);
});
});
this.stop = () => {
if (!this.isRunning) {
return;
}
try {
clearInterval(this.timer);
this.frame.destroy();
this.currentStat = 'unchanged';
}
finally {
this.isRunning = false;
}
};
this.checkSession = () => {
if (!this.session) {
this.session = this.app.getSession();
}
const sessionToCheck = `${this.app.config.clientId} ${this.session.sessionState.session_state}`;
this.frame.postMessage(sessionToCheck);
};
this.handleMessage = (e) => {
const stat = e.data;
const isSameStatus = stat === this.currentStat;
if (isSameStatus) {
if (stat === 'changed') {
this.handleChangedSameStatus();
}
return;
}
this.currentStat = stat;
if (stat === 'changed') {
this.handleChanged();
}
else if (stat === 'unchanged') {
this.handleUnchanged();
}
};
this.handleUnchanged = () => __awaiter(this, void 0, void 0, function* () {
this.handlers.onSessionRestablished();
return this.start();
});
this.handleChangedSameStatus = () => __awaiter(this, void 0, void 0, function* () {
if (this.isSameUser()) {
this.usersChanged = false;
return;
}
if (!this.usersChanged) {
this.handlers.onSessionChanged();
}
this.usersChanged = true;
});
this.handleChanged = () => __awaiter(this, void 0, void 0, function* () {
const app = this.app;
try {
yield app.silentRefresh();
}
catch (e) {
this.handlers.onSessionEnded();
return app.invalidateSession();
}
return this.start();
});
this.isSameUser = () => {
const newSession = this.app.getSession();
if (!newSession) {
return true;
}
return newSession.accessToken.principal === this.session.accessToken.principal;
};
this.app = app;
this.currentStat = 'unchanged';
this.interval = interval;
this.handlers = {
onSessionChanged,
onSessionEnded,
onSessionRestablished,
};
this.isRunning = false;
this.usersChanged = false;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiT0F1dGhNb25pdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9PQXV0aE1vbml0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWdCcEUsTUFBTSxPQUFPLFlBQVk7SUFhdkIsWUFDRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUF1QixFQUM3QyxFQUNFLGdCQUFnQixHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUMvQixjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQzdCLHFCQUFxQixHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNWO1FBY2QsVUFBSyxHQUFHLEdBQXdCLEVBQUU7WUFDaEQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7YUFDYjtZQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksd0JBQXdCLENBQ3ZDO2dCQUNFLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0JBQW9CO2dCQUNsRCxNQUFNLEVBQUUsU0FBUyxFQUFFO2FBQ3BCLEVBQ0QsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUNsQyxDQUFDO1lBRUYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxD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