UNPKG

@wocker/ws

Version:

Docker workspace for web projects

97 lines (96 loc) 3.82 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); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.FileKeystoreProvider = void 0; const core_1 = require("@wocker/core"); const utils_1 = require("@wocker/utils"); const FileKeystore_1 = require("../types/FileKeystore"); const utils_2 = require("../utils"); let FileKeystoreProvider = class FileKeystoreProvider extends core_1.KeystoreProvider { constructor(fs) { super(); this.fs = fs; } get keystore() { if (!this._keystore) { const fs = this.fs; let data = { secrets: {} }; if (fs.exists("wocker.keystore.js")) { try { data = { ...require(fs.path("wocker.keystore.js")) }; } catch (err) { } } this._keystore = new class extends FileKeystore_1.FileKeystore { save() { if (!fs.exists()) { fs.mkdir(""); } fs.writeFile("wocker.keystore.js", this.toString()); } }(data); } return this._keystore; } get passwordHash() { return this.keystore.passwordHash; } async getEncryptionKey() { if (!this.encryptionKey) { const password = await (0, utils_1.promptInput)({ required: true, min: 6, max: 32, message: "Keystore password", type: "password", validate: async (value) => { if (typeof value !== "string" || !this.passwordHash || (0, utils_2.verifyPasswordHash)(value, this.passwordHash)) { return true; } return "Invalid password"; } }); if (!this.keystore.passwordHash) { this.keystore.passwordHash = (0, utils_2.createPasswordHash)(password); this.keystore.save(); } this.encryptionKey = (0, utils_2.createEncryptionKey)(password, this.keystore.passwordHash); } return this.encryptionKey; } async get(key, defaultValue) { const value = this.keystore.get(key); if (!value) { return defaultValue; } const encryptionKey = await this.getEncryptionKey(); return (0, utils_2.decrypt)(encryptionKey, value); } async set(key, value) { const encryptionKey = await this.getEncryptionKey(); this.keystore.set(key, (0, utils_2.encrypt)(encryptionKey, value)); this.keystore.save(); } async delete(key) { this.keystore.delete(key); this.keystore.save(); } }; exports.FileKeystoreProvider = FileKeystoreProvider; exports.FileKeystoreProvider = FileKeystoreProvider = __decorate([ (0, core_1.Injectable)(), __metadata("design:paramtypes", [core_1.AppFileSystemService]) ], FileKeystoreProvider);