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
JavaScript
"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