UNPKG

3.74 kBJavaScriptView Raw
1"use strict";
2/*
3 * MIT License
4 *
5 * Copyright (c) 2017 Choko (choko@curioswitch.org)
6 *
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included in all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24 */
25var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26 return new (P || (P = Promise))(function (resolve, reject) {
27 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
28 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
29 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
30 step((generator = generator.apply(thisArg, _arguments || [])).next());
31 });
32};
33var __importDefault = (this && this.__importDefault) || function (mod) {
34 return (mod && mod.__esModule) ? mod : { "default": mod };
35};
36Object.defineProperty(exports, "__esModule", { value: true });
37const config_1 = __importDefault(require("./config"));
38const gcloud_1 = __importDefault(require("./gcloud"));
39class KeyManager {
40 constructor() {
41 this.decryptedKeys = new Map();
42 }
43 getGithubToken(repo) {
44 return __awaiter(this, void 0, void 0, function* () {
45 return this.getDecrypted(config_1.default.repos[repo].encryptedGithubToken, `GITHUB_TOKEN-${repo}`);
46 });
47 }
48 getWebhookSecret() {
49 return __awaiter(this, void 0, void 0, function* () {
50 return this.getDecrypted(config_1.default.encryptedWebhookSecret, 'WEBHOOK_SECRET');
51 });
52 }
53 getDecrypted(encryptedBase64, cacheKey) {
54 return __awaiter(this, void 0, void 0, function* () {
55 const cached = this.decryptedKeys.get(cacheKey);
56 if (cached) {
57 return cached;
58 }
59 const google = yield gcloud_1.default();
60 const projectId = yield google.auth.getProjectId();
61 console.log('Decrypting ', cacheKey);
62 const response = yield google
63 .cloudkms({ version: 'v1' })
64 .projects.locations.keyRings.cryptoKeys.decrypt({
65 name: `projects/${projectId}/locations/${config_1.default.kms.location}/keyRings/${config_1.default.kms.keyring}/cryptoKeys/${config_1.default.kms.key}`,
66 requestBody: {
67 ciphertext: encryptedBase64,
68 },
69 });
70 const decrypted = Buffer.from(response.data.plaintext, 'base64').toString('ascii');
71 this.decryptedKeys.set(cacheKey, decrypted);
72 return decrypted;
73 });
74 }
75}
76exports.KeyManager = KeyManager;
77exports.keyManager = new KeyManager();
78//# sourceMappingURL=keymanager.js.map
\No newline at end of file