UNPKG

25.3 kBJavaScriptView Raw
1/* eslint-disable */
2"use strict";
3
4Object.defineProperty(exports, "__esModule", {
5 value: true
6});
7exports.default = void 0;
8
9var _libCli = _interopRequireDefault(require("@pagedip/lib-cli"));
10
11var _package = require("../package.json");
12
13var _inquirer = _interopRequireDefault(require("inquirer"));
14
15var _updateNotifier = _interopRequireDefault(require("update-notifier"));
16
17var _fs = _interopRequireDefault(require("mz/fs"));
18
19var _libLicenseTools = require("@pagedip/lib-license-tools");
20
21var _index = require("./index");
22
23var _utilLogger = _interopRequireDefault(require("@pagedip/util-logger"));
24
25var _util = require("util");
26
27var _getStdin = _interopRequireDefault(require("get-stdin"));
28
29function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
31function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
32
33function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
34
35var apps = ["api", "auth", "auth-proxy", "couchdb-setup", "editor", "enterprise-edition", "files-proxy", "live", "theme"]; // check for updates daily
36
37(0, _updateNotifier.default)({
38 pkg: {
39 name: _package.name,
40 version: _package.version
41 }
42}).notify();
43var cli = (0, _libCli.default)();
44var _default = cli;
45exports.default = _default;
46cli.version("".concat(_package.name, " ").concat(_package.version));
47cli.command({
48 command: "$0 [command] --",
49 passthrough: true,
50 describe: "The Pagedip CLI tool",
51 notes: "This is the main Pagedip CLI tool. With this tool you can install Pagedip packages, run servers, and more.\n\nThe following app names can be used as commands directly: ".concat(apps.join(", ")),
52 handler: function () {
53 var _handler = _asyncToGenerator(function* (_ref) {
54 var app = _ref.app,
55 _ref$argv = _ref.argv,
56 params = _ref$argv.params,
57 args = _ref$argv.args,
58 flags = _ref$argv.flags;
59
60 if (params.command) {
61 var cmdname = params.command; // resolveCommandName(params.command);
62
63 if (this.getCommand(cmdname)) {
64 yield this.run(cmdname, args);
65 return;
66 }
67
68 if (apps.includes(cmdname)) {
69 yield this.run("run", [cmdname].concat(args));
70 return;
71 }
72 } else if (flags.version) {
73 console.log(app.version());
74 return;
75 }
76
77 console.log(app.help());
78 });
79
80 function handler(_x) {
81 return _handler.apply(this, arguments);
82 }
83
84 return handler;
85 }()
86});
87cli.command({
88 command: "install <packages...>",
89 alias: ["i"],
90 describe: "Install Pagedip packages.",
91 notes: "This will install Pagedip packages and apps from the Pagedip registry. This host should already be registered with a valid license key before installing packages.\n\nOne or more packages can be installed at once. Postfix the package name with '@version' to install a specific version.",
92 flags: {
93 tag: {
94 type: "string",
95 describe: "Install packages from a specific dist-tag.",
96 alias: ["t"]
97 }
98 },
99 handler: function () {
100 var _handler2 = _asyncToGenerator(function* (_ref2) {
101 var _ref2$argv = _ref2.argv,
102 params = _ref2$argv.params,
103 flags = _ref2$argv.flags;
104 yield (0, _index.install)(params.packages, {
105 tag: flags.tag
106 });
107 });
108
109 function handler(_x2) {
110 return _handler2.apply(this, arguments);
111 }
112
113 return handler;
114 }()
115});
116cli.command({
117 command: "run <app> --",
118 alias: ["app"],
119 passthrough: true,
120 describe: "Run a Pagedip app by name.",
121 notes: "CLI options are passed through to the app directly. This host should already be registered with a valid license key before running apps.\n\nIf the app is not installed on the host, you will be asked to install the app before it runs.",
122 handler: function () {
123 var _handler3 = _asyncToGenerator(function* (_ref3) {
124 var _ref3$argv = _ref3.argv,
125 params = _ref3$argv.params,
126 args = _ref3$argv.args;
127 var cmd;
128 var cmdname = params.app;
129
130 try {
131 cmd = yield (0, _index.load)(cmdname);
132 } catch (e) {
133 if (e.code !== "PACKAGE_NOT_FOUND") throw e;
134
135 var _ref4 = yield _inquirer.default.prompt([{
136 type: "confirm",
137 name: "confirm",
138 message: "Could not locate a package named '".concat(args[0], "'. Do you want to attempt to install it?"),
139 default: true
140 }]),
141 confirm = _ref4.confirm;
142
143 if (!confirm) throw e;
144 yield (0, _index.install)(cmdname);
145 cmd = yield (0, _index.load)(cmdname);
146 }
147
148 if (cmd) {
149 return yield cmd.run(args);
150 }
151 });
152
153 function handler(_x3) {
154 return _handler3.apply(this, arguments);
155 }
156
157 return handler;
158 }()
159});
160cli.command({
161 command: "start --",
162 alias: ["server", "ee", "enterprise-edition"],
163 passthrough: true,
164 describe: "Start a Pagedip Enterprise server.",
165 handler: function () {
166 var _handler4 = _asyncToGenerator(function* (_ref5) {
167 var args = _ref5.argv.args;
168 return yield this.run("run", ["enterprise-edition"].concat(args));
169 });
170
171 function handler(_x4) {
172 return _handler4.apply(this, arguments);
173 }
174
175 return handler;
176 }()
177});
178
179function printLicense(data) {
180 console.log("%s\nID: %s\nRegistered To: %s\nIssued: %s\nExpires: %s", _utilLogger.default.color.white.bgGreen("Valid Pagedip license key."), data.id, data.user, new Date(data.issued).toString(), new Date(data.ttl).toString());
181 console.log("\n%s\n", (0, _util.inspect)(data.payload, {
182 colors: true,
183 depth: Infinity
184 }));
185}
186
187cli.command({
188 command: "license [key]",
189 describe: "Verify and print information about a Pagedip license key.",
190 notes: "This will verify a license key and print some basic information about it. If you do not pass a license key, this will display info on the installed key.",
191 handler: function () {
192 var _handler5 = _asyncToGenerator(function* (_ref6) {
193 var params = _ref6.argv.params;
194 var data = yield (0, _libLicenseTools.verify)((0, _libLicenseTools.getLicense)(params.key));
195 printLicense(data);
196 });
197
198 function handler(_x5) {
199 return _handler5.apply(this, arguments);
200 }
201
202 return handler;
203 }()
204});
205cli.command({
206 command: "register [key]",
207 describe: "Register this host with a Pagedip License key to interact with various restricted Pagedip services.",
208 params: {
209 key: {
210 describe: "A license key to register this machine with. Pass '-' to read the key from stdin."
211 }
212 },
213 flags: {
214 keyFile: {
215 type: "string",
216 describe: "Register via a Pagedip license file.",
217 alias: ["f", "key-file", "file"],
218 usageFlag: "key-file"
219 }
220 },
221 handler: function () {
222 var _handler6 = _asyncToGenerator(function* (_ref7) {
223 var app = _ref7.app,
224 _ref7$argv = _ref7.argv,
225 params = _ref7$argv.params,
226 flags = _ref7$argv.flags;
227 var key;
228
229 if (params.key === "-") {
230 key = yield (0, _getStdin.default)();
231 } else if (params.key) {
232 key = params.key;
233 } else if (flags.keyFile) {
234 key = yield _fs.default.readFile(flags.keyFile, "utf-8");
235 } else {
236 var result = yield _inquirer.default.prompt([{
237 type: "input",
238 name: "key",
239 message: "License Key (paste the raw license contents here)",
240 validate: function validate(v) {
241 return Boolean(v.length);
242 }
243 }]);
244 key = result.key;
245 }
246
247 if (!key) {
248 console.log(app.help());
249 return;
250 }
251
252 var data = yield (0, _libLicenseTools.verifyInstall)(key);
253 console.log("");
254 printLicense(data);
255 console.log(_utilLogger.default.color.green("Thank you for registering! You can now download and use Pagedip packages. \uD83C\uDF89\n"));
256 });
257
258 function handler(_x6) {
259 return _handler6.apply(this, arguments);
260 }
261
262 return handler;
263 }()
264});
265cli.command({
266 command: "unregister",
267 describe: "Removes the Pagedip license key from this machine.",
268 handler: function () {
269 var _handler7 = _asyncToGenerator(function* () {
270 yield (0, _libLicenseTools.uninstall)();
271 console.log("Successfully unregistered this machine.");
272 });
273
274 function handler() {
275 return _handler7.apply(this, arguments);
276 }
277
278 return handler;
279 }()
280});
281module.exports = exports.default;
282//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGkuanMiXSwibmFtZXMiOlsiYXBwcyIsInBrZyIsIm5hbWUiLCJ2ZXJzaW9uIiwibm90aWZ5IiwiY2xpIiwiY29tbWFuZCIsInBhc3N0aHJvdWdoIiwiZGVzY3JpYmUiLCJub3RlcyIsImpvaW4iLCJoYW5kbGVyIiwiYXBwIiwiYXJndiIsInBhcmFtcyIsImFyZ3MiLCJmbGFncyIsImNtZG5hbWUiLCJnZXRDb21tYW5kIiwicnVuIiwiaW5jbHVkZXMiLCJjb25jYXQiLCJjb25zb2xlIiwibG9nIiwiaGVscCIsImFsaWFzIiwidGFnIiwidHlwZSIsInBhY2thZ2VzIiwiY21kIiwiZSIsImNvZGUiLCJpbnF1aXJlciIsInByb21wdCIsIm1lc3NhZ2UiLCJkZWZhdWx0IiwiY29uZmlybSIsInByaW50TGljZW5zZSIsImRhdGEiLCJjb2xvciIsIndoaXRlIiwiYmdHcmVlbiIsImlkIiwidXNlciIsIkRhdGUiLCJpc3N1ZWQiLCJ0b1N0cmluZyIsInR0bCIsInBheWxvYWQiLCJjb2xvcnMiLCJkZXB0aCIsIkluZmluaXR5Iiwia2V5Iiwia2V5RmlsZSIsInVzYWdlRmxhZyIsImZzIiwicmVhZEZpbGUiLCJyZXN1bHQiLCJ2YWxpZGF0ZSIsInYiLCJCb29sZWFuIiwibGVuZ3RoIiwiZ3JlZW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBSUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7Ozs7Ozs7O0FBRUEsSUFBTUEsSUFBSSxHQUFHLENBQ1gsS0FEVyxFQUVYLE1BRlcsRUFHWCxZQUhXLEVBSVgsZUFKVyxFQUtYLFFBTFcsRUFNWCxvQkFOVyxFQU9YLGFBUFcsRUFRWCxNQVJXLEVBU1gsT0FUVyxDQUFiLEMsQ0FZQTs7QUFDQSw2QkFBZTtBQUNiQyxFQUFBQSxHQUFHLEVBQUU7QUFBRUMsSUFBQUEsSUFBSSxFQUFKQSxhQUFGO0FBQVFDLElBQUFBLE9BQU8sRUFBUEE7QUFBUjtBQURRLENBQWYs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cENnQyxVQUFBQSxPQUFPLEVBQUUsbURBSDJCO0FBSXBDd0IsVUFBQUEsUUFBUSxFQUFFLGtCQUFDQyxDQUFEO0FBQUEsbUJBQU9DLE9BQU8sQ0FBQ0QsQ0FBQyxDQUFDRSxNQUFILENBQWQ7QUFBQTtBQUowQixTQUFELENBQWhCLENBQXJCO0FBT0FULFFBQUFBLEdBQUcsR0FBR0ssTUFBTSxDQUFDTCxHQUFiO0FBQ0Q7O0FBRUQsVUFBSSxDQUFDQSxHQUFMLEVBQVU7QUFDUjlCLFFBQUFBLE9BQU8sQ0FBQ0MsR0FBUixDQUFZWCxHQUFHLENBQUNZLElBQUosRUFBWjtBQUNBO0FBQ0Q7O0FBRUQsVUFBTWMsSUFBSSxTQUFTLG9DQUFjYyxHQUFkLENBQW5CO0FBQ0E5QixNQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWSxFQUFaO0FBQ0FjLE1BQUFBLFlBQVksQ0FBQ0MsSUFBRCxDQUFaO0FBQ0FoQixNQUFBQSxPQUFPLENBQUNDLEdBQVIsQ0FBWUEsb0JBQUlnQixLQUFKLENBQVV1QixLQUFWLDRGQUFaO0FBQ0QsS0E3Q1M7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQSxDQUFaO0FBZ0RBekQsR0FBRyxDQUFDQyxPQUFKLENBQVk7QUFDVkEsRUFBQUEsT0FBTyxFQUFFLFlBREM7QUFFVkUsRUFBQUEsUUFBUSxFQUFFLG9EQUZBO0FBR0pHLEVBQUFBLE9BSEk7QUFBQSxtREFHTTtBQUNkLFlBQU0saUNBQU47QUFDQVcsTUFBQUEsT0FBTyxDQUFDQyxHQUFSLENBQVkseUNBQVo7QUFDRCxLQU5TOztBQUFBO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUEsQ0FBWiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVDbGkgZnJvbSBcIkBwYWdlZGlwL2xpYi1jbGlcIjtcbmltcG9ydCB7bmFtZSx2ZXJzaW9ufSBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCI7XG5pbXBvcnQgaW5xdWlyZXIgZnJvbSBcImlucXVpcmVyXCI7XG5pbXBvcnQgdXBkYXRlTm90aWZpZXIgZnJvbSBcInVwZGF0ZS1ub3RpZmllclwiO1xuaW1wb3J0IGZzIGZyb20gXCJtei9mc1wiO1xuaW1wb3J0IHtcbiAgdmVyaWZ5SW5zdGFsbCwgZ2V0TGljZW5zZSxcbiAgdmVyaWZ5LCB1bmluc3RhbGxcbn0gZnJvbSBcIkBwYWdlZGlwL2xpYi1saWNlbnNlLXRvb2xzXCI7XG5pbXBvcnQgeyBpbnN0YWxsLCBsb2FkIH0gZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBsb2cgZnJvbSBcIkBwYWdlZGlwL3V0aWwtbG9nZ2VyXCI7XG5pbXBvcnQge2luc3BlY3R9IGZyb20gXCJ1dGlsXCI7XG5pbXBvcnQgZ2V0U3RkaW4gZnJvbSBcImdldC1zdGRpblwiO1xuXG5jb25zdCBhcHBzID0gW1xuICBcImFwaVwiLFxuICBcImF1dGhcIixcbiAgXCJhdXRoLXByb3h5XCIsXG4gIFwiY291Y2hkYi1zZXR1cFwiLFxuICBcImVkaXRvclwiLFxuICBcImVudGVycHJpc2UtZWRpdGlvblwiLFxuICBcImZpbGVzLXByb3h5XCIsXG4gIFwibGl2ZVwiLFxuICBcInRoZW1lXCJcbl07XG5cbi8vIGNoZWNrIGZvciB1cGRhdGVzIGRhaWx5XG51cGRhdGVOb3RpZmllcih7XG4gIHBrZzogeyBuYW1lLCB2ZXJzaW9uIH1cbn0pLm5vdGlmeSgpO1xuXG5jb25zdCBjbGkgPSBjcmVhdGVDbGkoKTtcbmV4cG9ydCBkZWZhdWx0IGNsaTtcblxuY2xpLnZlcnNpb24oYCR7bmFtZX0gJHt2ZXJzaW9ufWApO1xuXG5jbGkuY29tbWFuZCh7XG4gIGNvbW1hbmQ6IFwiJDAgW2NvbW1hbmRdIC0tXCIsXG4gIHBhc3N0aHJvdWdoOiB0cnVlLFxuICBkZXNjcmliZTogXCJUaGUgUGFnZWRpcCBDTEkgdG9vbFwiLFxuICBub3RlczogYFRoaXMgaXMgdGhlIG1haW4gUGFnZWRpcCBDTEkgdG9vbC4gV2l0aCB0aGlzIHRvb2wgeW91IGNhbiBpbnN0YWxsIFBhZ2VkaXAgcGFja2FnZXMsIHJ1biBzZXJ2ZXJzLCBhbmQgbW9yZS5cblxuVGhlIGZvbGxvd2luZyBhcHAgbmFtZXMgY2FuIGJlIHVzZWQgYXMgY29tbWFuZHMgZGlyZWN0bHk6ICR7YXBwcy5qb2luKFwiLCBcIil9YCxcbiAgYXN5bmMgaGFuZGxlcih7IGFwcCwgYXJndjogeyBwYXJhbXMsIGFyZ3MsIGZsYWdzIH0gfSkge1xuICAgIGlmIChwYXJhbXMuY29tbWFuZCkge1xuICAgICAgY29uc3QgY21kbmFtZSA9IHBhcmFtcy5jb21tYW5kOyAvLyByZXNvbHZlQ29tbWFuZE5hbWUocGFyYW1zLmNvbW1hbmQpO1xuXG4gICAgICBpZiAodGhpcy5nZXRDb21tYW5kKGNtZG5hbWUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuKGNtZG5hbWUsIGFyZ3MpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChhcHBzLmluY2x1ZGVzKGNtZG5hbWUpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVuKFwicnVuXCIsIFtjbWRuYW1lXS5jb25jYXQoYXJncykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChmbGFncy52ZXJzaW9uKSB7XG4gICAgICBjb25zb2xlLmxvZyhhcHAudmVyc2lvbigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZyhhcHAuaGVscCgpKTtcbiAgfVxufSk7XG5cbmNsaS5jb21tYW5kKHtcbiAgY29tbWFuZDogXCJpbnN0YWxsIDxwYWNrYWdlcy4uLj5cIixcbiAgYWxpYXM6IFsgXCJpXCIgXSxcbiAgZGVzY3JpYmU6IFwiSW5zdGFsbCBQYWdlZGlwIHBhY2thZ2VzLlwiLFxuICBub3RlczogYFRoaXMgd2lsbCBpbnN0YWxsIFBhZ2VkaXAgcGFja2FnZXMgYW5kIGFwcHMgZnJvbSB0aGUgUGFnZWRpcCByZWdpc3RyeS4gVGhpcyBob3N0IHNob3VsZCBhbHJlYWR5IGJlIHJlZ2lzdGVyZWQgd2l0aCBhIHZhbGlkIGxpY2Vuc2Uga2V5IGJlZm9yZSBpbnN0YWxsaW5nIHBhY2thZ2VzLlxuXG5PbmUgb3IgbW9yZSBwYWNrYWdlcyBjYW4gYmUgaW5zdGFsbGVkIGF0IG9uY2UuIFBvc3RmaXggdGhlIHBhY2thZ2UgbmFtZSB3aXRoICdAdmVyc2lvbicgdG8gaW5zdGFsbCBhIHNwZWNpZmljIHZlcnNpb24uYCxcbiAgZmxhZ3M6IHtcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICBkZXNjcmliZTogXCJJbnN0YWxsIHBhY2thZ2VzIGZyb20gYSBzcGVjaWZpYyBkaXN0LXRhZy5cIixcbiAgICAgIGFsaWFzOiBbIFwidFwiIF1cbiAgICB9XG4gIH0sXG4gIGFzeW5jIGhhbmRsZXIoeyBhcmd2OiB7IHBhcmFtcywgZmxhZ3MgfSB9KSB7XG4gICAgYXdhaXQgaW5zdGFsbChwYXJhbXMucGFja2FnZXMsIHtcbiAgICAgIHRhZzogZmxhZ3MudGFnXG4gICAgfSk7XG4gIH1cbn0pO1xuXG5jbGkuY29tbWFuZCh7XG4gIGNvbW1hbmQ6IFwicnVuIDxhcHA+IC0tXCIsXG4gIGFsaWFzOiBbIFwiYXBwXCIgXSxcbiAgcGFzc3Rocm91Z2g6IHRydWUsXG4gIGRlc2NyaWJlOiBcIlJ1biBhIFBhZ2VkaXAgYXBwIGJ5IG5hbWUuXCIsXG4gIG5vdGVzOiBgQ0xJIG9wdGlvbnMgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBhcHAgZGlyZWN0bHkuIFRoaXMgaG9zdCBzaG91bGQgYWxyZWFkeSBiZSByZWdpc3RlcmVkIHdpdGggYSB2YWxpZCBsaWNlbnNlIGtleSBiZWZvcmUgcnVubmluZyBhcHBzLlxuXG5JZiB0aGUgYXBwIGlzIG5vdCBpbnN0YWxsZWQgb24gdGhlIGhvc3QsIHlvdSB3aWxsIGJlIGFza2VkIHRvIGluc3RhbGwgdGhlIGFwcCBiZWZvcmUgaXQgcnVucy5gLFxuICBhc3luYyBoYW5kbGVyKHsgYXJndjogeyBwYXJhbXMsIGFyZ3MgfSB9KSB7XG4gICAgbGV0IGNtZDtcbiAgICBjb25zdCBjbWRuYW1lID0gcGFyYW1zLmFwcDtcblxuICAgIHRyeSB7XG4gICAgICBjbWQgPSBhd2FpdCBsb2FkKGNtZG5hbWUpO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgaWYgKGUuY29kZSAhPT0gXCJQQUNLQUdFX05PVF9GT1VORFwiKSB0aHJvdyBlO1xuXG4gICAgICBjb25zdCB7Y29uZmlybX0gPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW3tcbiAgICAgICAgdHlwZTogXCJjb25maXJtXCIsXG4gICAgICAgIG5hbWU6IFwiY29uZmlybVwiLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IGxvY2F0ZSBhIHBhY2thZ2UgbmFtZWQgJyR7YXJnc1swXX0nLiBEbyB5b3Ugd2FudCB0byBhdHRlbXB0IHRvIGluc3RhbGwgaXQ/YCxcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfV0pO1xuXG4gICAgICBpZiAoIWNvbmZpcm0pIHRocm93IGU7XG5cbiAgICAgIGF3YWl0IGluc3RhbGwoY21kbmFtZSk7XG4gICAgICBjbWQgPSBhd2FpdCBsb2FkKGNtZG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChjbWQpIHtcbiAgICAgIHJldHVybiBhd2FpdCBjbWQucnVuKGFyZ3MpO1xuICAgIH1cbiAgfVxufSk7XG5cbmNsaS5jb21tYW5kKHtcbiAgY29tbWFuZDogXCJzdGFydCAtLVwiLFxuICBhbGlhczogWyBcInNlcnZlclwiLCBcImVlXCIsIFwiZW50ZXJwcmlzZS1lZGl0aW9uXCIgXSxcbiAgcGFzc3Rocm91Z2g6IHRydWUsXG4gIGRlc2NyaWJlOiBcIlN0YXJ0IGEgUGFnZWRpcCBFbnRlcnByaXNlIHNlcnZlci5cIixcbiAgYXN5bmMgaGFuZGxlcih7IGFyZ3Y6IHsgYXJncyB9IH0pIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW4oXCJydW5cIiwgWyBcImVudGVycHJpc2UtZWRpdGlvblwiIF0uY29uY2F0KGFyZ3MpKTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHByaW50TGljZW5zZShkYXRhKSB7XG4gIGNvbnNvbGUubG9nKGAlc1xcbklEOiAlc1xcblJlZ2lzdGVyZWQgVG86ICVzXFxuSXNzdWVkOiAlc1xcbkV4cGlyZXM6ICVzYCxcbiAgICBsb2cuY29sb3Iud2hpdGUuYmdHcmVlbihgVmFsaWQgUGFnZWRpcCBsaWNlbnNlIGtleS5gKSxcbiAgICBkYXRhLmlkLFxuICAgIGRhdGEudXNlcixcbiAgICBuZXcgRGF0ZShkYXRhLmlzc3VlZCkudG9TdHJpbmcoKSxcbiAgICBuZXcgRGF0ZShkYXRhLnR0bCkudG9TdHJpbmcoKVxuICApO1xuICBjb25zb2xlLmxvZyhcIlxcbiVzXFxuXCIsIGluc3BlY3QoZGF0YS5wYXlsb2FkLCB7XG4gICAgY29sb3JzOiB0cnVlLFxuICAgIGRlcHRoOiBJbmZpbml0eVxuICB9KSk7XG59XG5cbmNsaS5jb21tYW5kKHtcbiAgY29tbWFuZDogXCJsaWNlbnNlIFtrZXldXCIsXG4gIGRlc2NyaWJlOiBcIlZlcmlmeSBhbmQgcHJpbnQgaW5mb3JtYXRpb24gYWJvdXQgYSBQYWdlZGlwIGxpY2Vuc2Uga2V5LlwiLFxuICBub3RlczogYFRoaXMgd2lsbCB2ZXJpZnkgYSBsaWNlbnNlIGtleSBhbmQgcHJpbnQgc29tZSBiYXNpYyBpbmZvcm1hdGlvbiBhYm91dCBpdC4gSWYgeW91IGRvIG5vdCBwYXNzIGEgbGljZW5zZSBrZXksIHRoaXMgd2lsbCBkaXNwbGF5IGluZm8gb24gdGhlIGluc3RhbGxlZCBrZXkuYCxcbiAgYXN5bmMgaGFuZGxlcih7IGFyZ3Y6IHsgcGFyYW1zIH0gfSkge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB2ZXJpZnkoZ2V0TGljZW5zZShwYXJhbXMua2V5KSk7XG4gICAgcHJpbnRMaWNlbnNlKGRhdGEpO1xuICB9XG59KTtcblxuY2xpLmNvbW1hbmQoe1xuICBjb21tYW5kOiBcInJlZ2lzdGVyIFtrZXldXCIsXG4gIGRlc2NyaWJlOiBgUmVnaXN0ZXIgdGhpcyBob3N0IHdpdGggYSBQYWdlZGlwIExpY2Vuc2Uga2V5IHRvIGludGVyYWN0IHdpdGggdmFyaW91cyByZXN0cmljdGVkIFBhZ2VkaXAgc2VydmljZXMuYCxcbiAgcGFyYW1zOiB7XG4gICAga2V5OiB7XG4gICAgICBkZXNjcmliZTogYEEgbGljZW5zZSBrZXkgdG8gcmVnaXN0ZXIgdGhpcyBtYWNoaW5lIHdpdGguIFBhc3MgJy0nIHRvIHJlYWQgdGhlIGtleSBmcm9tIHN0ZGluLmBcbiAgICB9XG4gIH0sXG4gIGZsYWdzOiB7XG4gICAga2V5RmlsZToge1xuICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgIGRlc2NyaWJlOiBcIlJlZ2lzdGVyIHZpYSBhIFBhZ2VkaXAgbGljZW5zZSBmaWxlLlwiLFxuICAgICAgYWxpYXM6IFsgXCJmXCIsIFwia2V5LWZpbGVcIiwgXCJmaWxlXCIgXSxcbiAgICAgIHVzYWdlRmxhZzogXCJrZXktZmlsZVwiXG4gICAgfVxuICB9LFxuICBhc3luYyBoYW5kbGVyKHsgYXBwLCBhcmd2OiB7IHBhcmFtcywgZmxhZ3MgfSB9KSB7XG4gICAgbGV0IGtleTtcblxuICAgIGlmIChwYXJhbXMua2V5ID09PSBcIi1cIikge1xuICAgICAga2V5ID0gYXdhaXQgZ2V0U3RkaW4oKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5rZXkpIHtcbiAgICAgIGtleSA9IHBhcmFtcy5rZXk7XG4gICAgfSBlbHNlIGlmIChmbGFncy5rZXlGaWxlKSB7XG4gICAgICBrZXkgPSBhd2FpdCBmcy5yZWFkRmlsZShmbGFncy5rZXlGaWxlLCBcInV0Zi04XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBpbnF1aXJlci5wcm9tcHQoW3tcbiAgICAgICAgdHlwZTogXCJpbnB1dFwiLFxuICAgICAgICBuYW1lOiBcImtleVwiLFxuICAgICAgICBtZXNzYWdlOiBcIkxpY2Vuc2UgS2V5IChwYXN0ZSB0aGUgcmF3IGxpY2Vuc2UgY29udGVudHMgaGVyZSlcIixcbiAgICAgICAgdmFsaWRhdGU6ICh2KSA9PiBCb29sZWFuKHYubGVuZ3RoKVxuICAgICAgfV0pO1xuXG4gICAgICBrZXkgPSByZXN1bHQua2V5O1xuICAgIH1cblxuICAgIGlmICgha2V5KSB7XG4gICAgICBjb25zb2xlLmxvZyhhcHAuaGVscCgpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdmVyaWZ5SW5zdGFsbChrZXkpO1xuICAgIGNvbnNvbGUubG9nKFwiXCIpO1xuICAgIHByaW50TGljZW5zZShkYXRhKTtcbiAgICBjb25zb2xlLmxvZyhsb2cuY29sb3IuZ3JlZW4oYFRoYW5rIHlvdSBmb3IgcmVnaXN0ZXJpbmchIFlvdSBjYW4gbm93IGRvd25sb2FkIGFuZCB1c2UgUGFnZWRpcCBwYWNrYWdlcy4g8J+OiVxcbmApKTtcbiAgfVxufSk7XG5cbmNsaS5jb21tYW5kKHtcbiAgY29tbWFuZDogXCJ1bnJlZ2lzdGVyXCIsXG4gIGRlc2NyaWJlOiBcIlJlbW92ZXMgdGhlIFBhZ2VkaXAgbGljZW5zZSBrZXkgZnJvbSB0aGlzIG1hY2hpbmUuXCIsXG4gIGFzeW5jIGhhbmRsZXIoKSB7XG4gICAgYXdhaXQgdW5pbnN0YWxsKCk7XG4gICAgY29uc29sZS5sb2coXCJTdWNjZXNzZnVsbHkgdW5yZWdpc3RlcmVkIHRoaXMgbWFjaGluZS5cIik7XG4gIH1cbn0pO1xuIl19
\No newline at end of file