@wocker/ws 1.0.21 → 1.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/lib/AppModule.js +17 -53
- package/lib/controllers/DebugController.d.ts +2 -1
- package/lib/controllers/DebugController.js +13 -5
- package/lib/controllers/KeystoreController.d.ts +11 -0
- package/lib/controllers/KeystoreController.js +106 -0
- package/lib/controllers/PluginController.d.ts +3 -5
- package/lib/controllers/PluginController.js +11 -57
- package/lib/controllers/PresetController.d.ts +4 -2
- package/lib/controllers/PresetController.js +50 -44
- package/lib/controllers/ProjectController.d.ts +1 -0
- package/lib/controllers/ProjectController.js +45 -36
- package/lib/controllers/ProxyController.js +37 -31
- package/lib/controllers/index.d.ts +1 -1
- package/lib/controllers/index.js +1 -1
- package/lib/env.d.ts +2 -1
- package/lib/env.js +3 -2
- package/lib/keystore/KeystoreService.d.ts +12 -0
- package/lib/keystore/KeystoreService.js +70 -0
- package/lib/keystore/index.d.ts +1 -0
- package/lib/keystore/index.js +17 -0
- package/lib/keystore/providers/FileKeystoreProvider.d.ts +16 -0
- package/lib/keystore/providers/FileKeystoreProvider.js +97 -0
- package/lib/keystore/providers/KeytarKeystoreProvider.d.ts +9 -0
- package/lib/keystore/providers/KeytarKeystoreProvider.js +74 -0
- package/lib/keystore/types/Encryption.d.ts +9 -0
- package/lib/keystore/types/Encryption.js +81 -0
- package/lib/keystore/types/Encryptor.d.ts +10 -0
- package/lib/keystore/types/Encryptor.js +59 -0
- package/lib/keystore/types/FileKeystore.d.ts +17 -0
- package/lib/keystore/types/FileKeystore.js +33 -0
- package/lib/keystore/types/Keytar.d.ts +8 -0
- package/lib/keystore/types/Keytar.js +2 -0
- package/lib/keystore/utils/createEncryptionKey.d.ts +1 -0
- package/lib/keystore/utils/createEncryptionKey.js +46 -0
- package/lib/keystore/utils/createPasswordHash.d.ts +1 -0
- package/lib/keystore/utils/createPasswordHash.js +20 -0
- package/lib/keystore/utils/decrypt.d.ts +1 -0
- package/lib/keystore/utils/decrypt.js +15 -0
- package/lib/keystore/utils/encrypt.d.ts +1 -0
- package/lib/keystore/utils/encrypt.js +19 -0
- package/lib/keystore/utils/index.d.ts +5 -0
- package/lib/keystore/utils/index.js +21 -0
- package/lib/keystore/utils/verifyPasswordHash.d.ts +1 -0
- package/lib/keystore/utils/verifyPasswordHash.js +9 -0
- package/lib/main.js +10 -5
- package/lib/makes/FS.d.ts +1 -1
- package/lib/makes/GithubClient.d.ts +14 -0
- package/lib/makes/GithubClient.js +65 -0
- package/lib/makes/Plugin.d.ts +6 -0
- package/lib/makes/Plugin.js +16 -0
- package/lib/makes/index.d.ts +1 -0
- package/lib/makes/index.js +1 -0
- package/lib/plugins/index.d.ts +0 -2
- package/lib/plugins/index.js +0 -2
- package/lib/repositories/PresetRepository.d.ts +23 -0
- package/lib/repositories/PresetRepository.js +115 -0
- package/lib/repositories/index.d.ts +1 -0
- package/lib/repositories/index.js +17 -0
- package/lib/services/AppConfigService.d.ts +16 -1
- package/lib/services/AppConfigService.js +71 -55
- package/lib/services/AppEventsService.d.ts +4 -4
- package/lib/services/AppEventsService.js +14 -10
- package/lib/services/CertService.js +2 -2
- package/lib/services/DockerService.js +6 -3
- package/lib/services/LogService.d.ts +3 -1
- package/lib/services/LogService.js +12 -10
- package/lib/services/PluginService.d.ts +8 -2
- package/lib/services/PluginService.js +71 -16
- package/lib/services/PresetService.d.ts +9 -8
- package/lib/services/PresetService.js +144 -258
- package/lib/services/ProjectService.d.ts +5 -2
- package/lib/services/ProjectService.js +37 -10
- package/lib/services/ProxyService.js +6 -6
- package/lib/utils/index.d.ts +0 -2
- package/lib/utils/index.js +0 -2
- package/package.json +23 -13
- package/lib/controllers/ImageController.d.ts +0 -7
- package/lib/controllers/ImageController.js +0 -46
- package/lib/makes/Model.d.ts +0 -5
- package/lib/makes/Model.js +0 -12
- package/lib/plugins/elastic-search/controllers/ElasticSearchController.d.ts +0 -10
- package/lib/plugins/elastic-search/controllers/ElasticSearchController.js +0 -91
- package/lib/plugins/elastic-search/index.d.ts +0 -2
- package/lib/plugins/elastic-search/index.js +0 -22
- package/lib/plugins/proxmox/controllers/ProxmoxController.d.ts +0 -14
- package/lib/plugins/proxmox/controllers/ProxmoxController.js +0 -127
- package/lib/plugins/proxmox/index.d.ts +0 -2
- package/lib/plugins/proxmox/index.js +0 -23
- package/lib/utils/volumeFormat.d.ts +0 -6
- package/lib/utils/volumeFormat.js +0 -8
- package/lib/utils/volumeParse.d.ts +0 -2
- package/lib/utils/volumeParse.js +0 -13
- package/presets/bun/Dockerfile +0 -11
- package/presets/bun/config.json +0 -4
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.KeystoreService = void 0;
|
|
13
|
+
const core_1 = require("@wocker/core");
|
|
14
|
+
const AppConfigService_1 = require("../services/AppConfigService");
|
|
15
|
+
const KeytarKeystoreProvider_1 = require("./providers/KeytarKeystoreProvider");
|
|
16
|
+
const FileKeystoreProvider_1 = require("./providers/FileKeystoreProvider");
|
|
17
|
+
let KeystoreService = class KeystoreService extends core_1.KeystoreService {
|
|
18
|
+
constructor(appConfigService) {
|
|
19
|
+
super();
|
|
20
|
+
this.appConfigService = appConfigService;
|
|
21
|
+
this.providers = new Map();
|
|
22
|
+
}
|
|
23
|
+
hasProvider(name) {
|
|
24
|
+
return ["file", "keytar"].includes(name);
|
|
25
|
+
}
|
|
26
|
+
provider(name) {
|
|
27
|
+
if (!name) {
|
|
28
|
+
name = this.appConfigService.config.keystore;
|
|
29
|
+
}
|
|
30
|
+
if (!name) {
|
|
31
|
+
name = "file";
|
|
32
|
+
}
|
|
33
|
+
switch (name) {
|
|
34
|
+
case "file":
|
|
35
|
+
return new FileKeystoreProvider_1.FileKeystoreProvider(this.appConfigService);
|
|
36
|
+
case "keytar":
|
|
37
|
+
return new KeytarKeystoreProvider_1.KeytarKeystoreProvider();
|
|
38
|
+
default:
|
|
39
|
+
throw new Error(`Unknown keystore provider "${name}"`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async get(keys, byDefault) {
|
|
43
|
+
const provider = this.provider();
|
|
44
|
+
if (Array.isArray(keys)) {
|
|
45
|
+
for (const key of keys) {
|
|
46
|
+
const value = await provider.get(key);
|
|
47
|
+
if (value) {
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return byDefault;
|
|
52
|
+
}
|
|
53
|
+
return provider.get(keys, byDefault);
|
|
54
|
+
}
|
|
55
|
+
async set(key, value) {
|
|
56
|
+
const provider = this.provider();
|
|
57
|
+
await provider.set(key, value);
|
|
58
|
+
}
|
|
59
|
+
registerProvider(name, provider) {
|
|
60
|
+
if (this.providers.has(name)) {
|
|
61
|
+
throw new Error(`Provider ${name} already registered`);
|
|
62
|
+
}
|
|
63
|
+
this.providers.set(name, provider);
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
exports.KeystoreService = KeystoreService;
|
|
67
|
+
exports.KeystoreService = KeystoreService = __decorate([
|
|
68
|
+
(0, core_1.Injectable)("KEYSTORE_SERVICE"),
|
|
69
|
+
__metadata("design:paramtypes", [AppConfigService_1.AppConfigService])
|
|
70
|
+
], KeystoreService);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./KeystoreService";
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./KeystoreService"), exports);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { KeystoreProvider } from "@wocker/core";
|
|
2
|
+
import { AppConfigService } from "../../services/AppConfigService";
|
|
3
|
+
import { FileKeystore } from "../types/FileKeystore";
|
|
4
|
+
export declare class FileKeystoreProvider extends KeystoreProvider {
|
|
5
|
+
protected readonly appConfigService: AppConfigService;
|
|
6
|
+
protected password?: string;
|
|
7
|
+
protected encryptionKey?: Buffer;
|
|
8
|
+
protected _keystore?: FileKeystore;
|
|
9
|
+
constructor(appConfigService: AppConfigService);
|
|
10
|
+
protected get keystore(): FileKeystore;
|
|
11
|
+
protected get passwordHash(): string | undefined;
|
|
12
|
+
protected getEncryptionKey(): Promise<Buffer>;
|
|
13
|
+
get(key: string, defaultValue?: string): Promise<string | undefined>;
|
|
14
|
+
set(key: string, value: string): Promise<void>;
|
|
15
|
+
delete(key: string): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.FileKeystoreProvider = void 0;
|
|
13
|
+
const core_1 = require("@wocker/core");
|
|
14
|
+
const utils_1 = require("@wocker/utils");
|
|
15
|
+
const AppConfigService_1 = require("../../services/AppConfigService");
|
|
16
|
+
const FileKeystore_1 = require("../types/FileKeystore");
|
|
17
|
+
const utils_2 = require("../utils");
|
|
18
|
+
let FileKeystoreProvider = class FileKeystoreProvider extends core_1.KeystoreProvider {
|
|
19
|
+
constructor(appConfigService) {
|
|
20
|
+
super();
|
|
21
|
+
this.appConfigService = appConfigService;
|
|
22
|
+
}
|
|
23
|
+
get keystore() {
|
|
24
|
+
if (!this._keystore) {
|
|
25
|
+
const fs = this.appConfigService.fs;
|
|
26
|
+
let data = {
|
|
27
|
+
secrets: {}
|
|
28
|
+
};
|
|
29
|
+
if (fs.exists("wocker.keystore.js")) {
|
|
30
|
+
try {
|
|
31
|
+
data = {
|
|
32
|
+
...require(fs.path("wocker.keystore.js"))
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
this._keystore = new class extends FileKeystore_1.FileKeystore {
|
|
39
|
+
save() {
|
|
40
|
+
if (!fs.exists()) {
|
|
41
|
+
fs.mkdir("");
|
|
42
|
+
}
|
|
43
|
+
fs.writeFile("wocker.keystore.js", this.toString());
|
|
44
|
+
}
|
|
45
|
+
}(data);
|
|
46
|
+
}
|
|
47
|
+
return this._keystore;
|
|
48
|
+
}
|
|
49
|
+
get passwordHash() {
|
|
50
|
+
return this.keystore.passwordHash;
|
|
51
|
+
}
|
|
52
|
+
async getEncryptionKey() {
|
|
53
|
+
if (!this.encryptionKey) {
|
|
54
|
+
const password = await (0, utils_1.promptInput)({
|
|
55
|
+
required: true,
|
|
56
|
+
min: 6,
|
|
57
|
+
max: 32,
|
|
58
|
+
message: "Keystore password",
|
|
59
|
+
type: "password",
|
|
60
|
+
validate: async (value) => {
|
|
61
|
+
if (typeof value !== "string" || !this.passwordHash || (0, utils_2.verifyPasswordHash)(value, this.passwordHash)) {
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
return "Invalid password";
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
if (!this.keystore.passwordHash) {
|
|
68
|
+
this.keystore.passwordHash = (0, utils_2.createPasswordHash)(password);
|
|
69
|
+
this.keystore.save();
|
|
70
|
+
}
|
|
71
|
+
this.encryptionKey = (0, utils_2.createEncryptionKey)(password, this.keystore.passwordHash);
|
|
72
|
+
}
|
|
73
|
+
return this.encryptionKey;
|
|
74
|
+
}
|
|
75
|
+
async get(key, defaultValue) {
|
|
76
|
+
const value = this.keystore.get(key);
|
|
77
|
+
if (!value) {
|
|
78
|
+
return defaultValue;
|
|
79
|
+
}
|
|
80
|
+
const encryptionKey = await this.getEncryptionKey();
|
|
81
|
+
return (0, utils_2.decrypt)(encryptionKey, value);
|
|
82
|
+
}
|
|
83
|
+
async set(key, value) {
|
|
84
|
+
const encryptionKey = await this.getEncryptionKey();
|
|
85
|
+
this.keystore.set(key, (0, utils_2.encrypt)(encryptionKey, value));
|
|
86
|
+
this.keystore.save();
|
|
87
|
+
}
|
|
88
|
+
async delete(key) {
|
|
89
|
+
this.keystore.delete(key);
|
|
90
|
+
this.keystore.save();
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
exports.FileKeystoreProvider = FileKeystoreProvider;
|
|
94
|
+
exports.FileKeystoreProvider = FileKeystoreProvider = __decorate([
|
|
95
|
+
(0, core_1.Injectable)(),
|
|
96
|
+
__metadata("design:paramtypes", [AppConfigService_1.AppConfigService])
|
|
97
|
+
], FileKeystoreProvider);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { KeystoreProvider } from "@wocker/core";
|
|
2
|
+
import { Keytar } from "../types/Keytar";
|
|
3
|
+
export declare class KeytarKeystoreProvider extends KeystoreProvider {
|
|
4
|
+
protected _keytar?: any;
|
|
5
|
+
get(key: string, defaultValue?: string): Promise<string | undefined>;
|
|
6
|
+
set(key: string, value: string): Promise<void>;
|
|
7
|
+
delete(key: string): Promise<void>;
|
|
8
|
+
protected getKeytar(): Promise<Keytar>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
|
+
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;
|
|
22
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
|
+
};
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.KeytarKeystoreProvider = void 0;
|
|
43
|
+
const core_1 = require("@wocker/core");
|
|
44
|
+
const env_1 = require("../../env");
|
|
45
|
+
let KeytarKeystoreProvider = class KeytarKeystoreProvider extends core_1.KeystoreProvider {
|
|
46
|
+
async get(key, defaultValue) {
|
|
47
|
+
const keytar = await this.getKeytar();
|
|
48
|
+
const value = await keytar.getPassword(env_1.KEYTAR_SERVICE, key);
|
|
49
|
+
return value || defaultValue;
|
|
50
|
+
}
|
|
51
|
+
async set(key, value) {
|
|
52
|
+
const keytar = await this.getKeytar();
|
|
53
|
+
try {
|
|
54
|
+
await keytar.setPassword(env_1.KEYTAR_SERVICE, key, value);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
console.log(err.message);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async delete(key) {
|
|
61
|
+
const keytar = await this.getKeytar();
|
|
62
|
+
await keytar.deletePassword(env_1.KEYTAR_SERVICE, key);
|
|
63
|
+
}
|
|
64
|
+
async getKeytar() {
|
|
65
|
+
if (!this._keytar) {
|
|
66
|
+
this._keytar = await Promise.resolve().then(() => __importStar(require("keytar")));
|
|
67
|
+
}
|
|
68
|
+
return this._keytar;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
exports.KeytarKeystoreProvider = KeytarKeystoreProvider;
|
|
72
|
+
exports.KeytarKeystoreProvider = KeytarKeystoreProvider = __decorate([
|
|
73
|
+
(0, core_1.Injectable)()
|
|
74
|
+
], KeytarKeystoreProvider);
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Encryption = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
const fs = __importStar(require("fs"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const util_1 = require("util");
|
|
41
|
+
const fsReadFile = (0, util_1.promisify)(fs.readFile);
|
|
42
|
+
const fsWriteFile = (0, util_1.promisify)(fs.writeFile);
|
|
43
|
+
const fsMkdir = (0, util_1.promisify)(fs.mkdir);
|
|
44
|
+
const fsAccess = (0, util_1.promisify)(fs.access);
|
|
45
|
+
class Encryption {
|
|
46
|
+
constructor() {
|
|
47
|
+
this.algorithm = 'aes-256-gcm';
|
|
48
|
+
this.keyLength = 32;
|
|
49
|
+
this.ivLength = 16;
|
|
50
|
+
this.saltLength = 64;
|
|
51
|
+
this.tagLength = 16;
|
|
52
|
+
}
|
|
53
|
+
async getEncryptionKey(keyPath, masterPassword) {
|
|
54
|
+
try {
|
|
55
|
+
await fsAccess(path.dirname(keyPath));
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
await fsMkdir(path.dirname(keyPath), { recursive: true });
|
|
59
|
+
}
|
|
60
|
+
let salt;
|
|
61
|
+
try {
|
|
62
|
+
salt = await fsReadFile(keyPath);
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
salt = crypto.randomBytes(this.saltLength);
|
|
66
|
+
await fsWriteFile(keyPath, salt);
|
|
67
|
+
}
|
|
68
|
+
return this.deriveKey(masterPassword, salt);
|
|
69
|
+
}
|
|
70
|
+
async deriveKey(password, salt) {
|
|
71
|
+
return new Promise((resolve, reject) => {
|
|
72
|
+
crypto.scrypt(password, salt, this.keyLength, (err, derivedKey) => {
|
|
73
|
+
if (err)
|
|
74
|
+
reject(err);
|
|
75
|
+
else
|
|
76
|
+
resolve(derivedKey);
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.Encryption = Encryption;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Encryptor = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
class Encryptor {
|
|
39
|
+
constructor(hash, salt) {
|
|
40
|
+
this._hash = hash;
|
|
41
|
+
this._salt = salt
|
|
42
|
+
? Buffer.from(salt, "hex")
|
|
43
|
+
: crypto.randomBytes(16);
|
|
44
|
+
}
|
|
45
|
+
get hash() {
|
|
46
|
+
return this._hash;
|
|
47
|
+
}
|
|
48
|
+
get salt() {
|
|
49
|
+
return this._salt.toString("hex");
|
|
50
|
+
}
|
|
51
|
+
setPassword(password) {
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
encrypt() {
|
|
55
|
+
}
|
|
56
|
+
decrypt() {
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
exports.Encryptor = Encryptor;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type Secrets = Record<string, string>;
|
|
2
|
+
type Props = {
|
|
3
|
+
passwordHash?: string;
|
|
4
|
+
secrets?: Secrets;
|
|
5
|
+
};
|
|
6
|
+
export declare abstract class FileKeystore {
|
|
7
|
+
passwordHash?: string;
|
|
8
|
+
protected secrets: Secrets;
|
|
9
|
+
constructor(data: Props);
|
|
10
|
+
abstract save(): void;
|
|
11
|
+
get(key: string): string | undefined;
|
|
12
|
+
set(key: string, value: string): void;
|
|
13
|
+
delete(key: string): void;
|
|
14
|
+
toObject(): {};
|
|
15
|
+
toString(): string;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileKeystore = void 0;
|
|
4
|
+
class FileKeystore {
|
|
5
|
+
constructor(data) {
|
|
6
|
+
const { passwordHash, secrets = {} } = data;
|
|
7
|
+
this.passwordHash = passwordHash;
|
|
8
|
+
this.secrets = secrets;
|
|
9
|
+
}
|
|
10
|
+
get(key) {
|
|
11
|
+
if (!(key in this.secrets)) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return this.secrets[key];
|
|
15
|
+
}
|
|
16
|
+
set(key, value) {
|
|
17
|
+
this.secrets[key] = value;
|
|
18
|
+
}
|
|
19
|
+
delete(key) {
|
|
20
|
+
if (!(key in this.secrets)) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
delete this.secrets[key];
|
|
24
|
+
}
|
|
25
|
+
toObject() {
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
toString() {
|
|
29
|
+
const secrets = JSON.stringify(this.secrets, null, 4);
|
|
30
|
+
return `// Wocker keystore\nexports.passwordHash = "${this.passwordHash}";\nexports.secrets = ${secrets};\n`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.FileKeystore = FileKeystore;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { getPassword, setPassword, deletePassword, findPassword, findCredentials } from "keytar";
|
|
2
|
+
export type Keytar = {
|
|
3
|
+
getPassword: typeof getPassword;
|
|
4
|
+
setPassword: typeof setPassword;
|
|
5
|
+
deletePassword: typeof deletePassword;
|
|
6
|
+
findPassword: typeof findPassword;
|
|
7
|
+
findCredentials: typeof findCredentials;
|
|
8
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createEncryptionKey: (password: string, passwordHash: string) => Buffer<ArrayBufferLike>;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.createEncryptionKey = void 0;
|
|
37
|
+
const crypto = __importStar(require("crypto"));
|
|
38
|
+
const verifyPasswordHash_1 = require("./verifyPasswordHash");
|
|
39
|
+
const createEncryptionKey = (password, passwordHash) => {
|
|
40
|
+
if (!(0, verifyPasswordHash_1.verifyPasswordHash)(password, passwordHash)) {
|
|
41
|
+
throw new Error("Invalid password provided");
|
|
42
|
+
}
|
|
43
|
+
const [, saltValue] = passwordHash.split(":"), salt = Buffer.from(saltValue, "hex");
|
|
44
|
+
return crypto.scryptSync(password, salt, 32);
|
|
45
|
+
};
|
|
46
|
+
exports.createEncryptionKey = createEncryptionKey;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createPasswordHash: (password: string, salt?: string) => string;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createPasswordHash = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const createPasswordHash = (password, salt) => {
|
|
9
|
+
const saltBuffer = salt
|
|
10
|
+
? Buffer.from(salt, "hex")
|
|
11
|
+
: crypto_1.default.randomBytes(16);
|
|
12
|
+
if (!salt) {
|
|
13
|
+
salt = saltBuffer.toString("hex");
|
|
14
|
+
}
|
|
15
|
+
const hash = crypto_1.default.createHmac("sha256", saltBuffer)
|
|
16
|
+
.update(password)
|
|
17
|
+
.digest("hex");
|
|
18
|
+
return `${hash}:${salt}`;
|
|
19
|
+
};
|
|
20
|
+
exports.createPasswordHash = createPasswordHash;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const decrypt: (encryptedKey: Buffer, encryptedValue: string) => string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.decrypt = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const decrypt = (encryptedKey, encryptedValue) => {
|
|
9
|
+
const buffer = Buffer.from(encryptedValue, "base64"), iv = buffer.subarray(0, 12), authTag = buffer.subarray(12, 28), encrypted = buffer.subarray(28).toString("base64"), decipher = crypto_1.default.createDecipheriv("aes-256-gcm", encryptedKey, iv);
|
|
10
|
+
decipher.setAuthTag(authTag);
|
|
11
|
+
let decrypted = decipher.update(encrypted, "base64", "utf8");
|
|
12
|
+
decrypted += decipher.final("utf8");
|
|
13
|
+
return decrypted;
|
|
14
|
+
};
|
|
15
|
+
exports.decrypt = decrypt;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const encrypt: (encryptedKey: Buffer, value: string) => string;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.encrypt = void 0;
|
|
7
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
8
|
+
const encrypt = (encryptedKey, value) => {
|
|
9
|
+
const iv = crypto_1.default.randomBytes(12), cipher = crypto_1.default.createCipheriv("aes-256-gcm", encryptedKey, iv);
|
|
10
|
+
let encrypted = cipher.update(value, "utf8", "base64");
|
|
11
|
+
encrypted += cipher.final("base64");
|
|
12
|
+
const authTag = cipher.getAuthTag();
|
|
13
|
+
return Buffer.concat([
|
|
14
|
+
iv,
|
|
15
|
+
authTag,
|
|
16
|
+
Buffer.from(encrypted, "base64")
|
|
17
|
+
]).toString("base64");
|
|
18
|
+
};
|
|
19
|
+
exports.encrypt = encrypt;
|