@wocker/ws
Version:
Docker workspace for web projects
97 lines (96 loc) • 3.82 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);
};
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);