UNPKG

s-bit-agent

Version:

s.BitAgent is a simple Bitwarden CLI wrapper which provides a SSH2 Key Agent solution for Bitwarden.

97 lines 3.9 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var SessionService_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.SessionService = void 0; const common_1 = require("@nestjs/common"); const bitwarden_service_1 = require("./bitwarden.service"); const log_service_1 = require("../shared/log.service"); const gui_service_1 = require("../gui/gui.service"); let SessionService = SessionService_1 = class SessionService { constructor(bitService, logService, guiService) { this.bitService = bitService; this.logService = logService; this.guiService = guiService; this.sessionTimeout = null; this.currentSession = null; this.config = { timeout: 300000, retrys: 3, }; ['SIGINT', 'SIGTERM', 'SIGQUIT'].forEach((signal) => { process.on(signal, () => this.lock()); }); } updateConfig(config) { this.config = { ...this.config, ...config }; } lock() { if (!this.currentSession) return; this.logService.warn('Session expired, logging out'); this.bitService.lock(this.currentSession); this.currentSession = null; } resetTimeout() { clearTimeout(this.sessionTimeout); this.sessionTimeout = setTimeout(() => this.lock(), this.config.timeout); } async getSessionInternal(reason) { const confirm = !reason ? 'true' : await this.guiService.getInput(reason, 'confirm', this.config.timeout); if (confirm !== 'true') { this.logService.warn('Session request denied'); return null; } if (this.currentSession) { this.resetTimeout(); return this.currentSession; } this.logService.info('Requesting session'); const password = await this.guiService.getInput('Please enter your master password', 'password', this.config.timeout); if (!password) { this.logService.warn('Session request denied'); return null; } try { this.currentSession = this.bitService.unlock(password); } catch (e) { this.logService.error('Failed to unlock session:', e); return null; } this.resetTimeout(); this.bitService.run(this.currentSession, 'sync'); return this.currentSession; } async getSession(reason) { let retries = this.config.retrys; let session = null; while (retries-- > 0) { session = await this.getSessionInternal(reason); if (session) return session; if (retries > 0) { this.logService.warn('Retrying session request'); } } return null; } }; exports.SessionService = SessionService; exports.SessionService = SessionService = SessionService_1 = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [bitwarden_service_1.BitwardenService, log_service_1.LogService, gui_service_1.GuiService]) ], SessionService); //# sourceMappingURL=session.service.js.map