first commit

This commit is contained in:
Stefan Hacker
2026-04-03 09:38:48 +02:00
commit 37ad745546
47450 changed files with 3120798 additions and 0 deletions
+2
View File
@@ -0,0 +1,2 @@
#!/usr/bin/env node
export {};
+62
View File
@@ -0,0 +1,62 @@
#!/usr/bin/env node
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const commander_1 = require("commander");
const office_addin_usage_data_1 = require("office-addin-usage-data");
const commands = __importStar(require("./commands"));
const defaults = __importStar(require("./defaults"));
/* global process */
const commander = new commander_1.Command();
commander.name("office-addin-dev-certs");
commander.version(process.env.npm_package_version || "(version not available)");
commander
.command("install")
.option("--machine", "Install the CA certificate for all users. You must be an Administrator.")
.option("--days <days>", `Specifies the validity of CA certificate in days. Default: ${defaults.daysUntilCertificateExpires}`)
.option("--domains <domains>", `List of IP address and domains separated by commas. Default: ${defaults.domain.join(",")}`)
.description(`Generate an SSL certificate for "localhost" issued by a CA certificate which is installed.`)
.action(commands.install);
commander.command("verify").description(`Verify the CA certificate.`).action(commands.verify);
commander
.command("uninstall")
.option("--machine", "Uninstall the CA certificate for all users. You must be an Administrator.")
.description(`Uninstall the certificate.`)
.action(commands.uninstall);
// if the command is not known, display an error
commander.on("command:*", function () {
(0, office_addin_usage_data_1.logErrorMessage)(`The command syntax is not valid.\n`);
process.exitCode = 1;
commander.help();
});
if (process.argv.length > 2) {
commander.parse(process.argv);
}
else {
commander.help();
}
//# sourceMappingURL=cli.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA,4DAA4D;AAC5D,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;AAElC,yCAAoC;AACpC,qEAA0D;AAC1D,qDAAuC;AACvC,qDAAuC;AAEvC,oBAAoB;AAEpB,MAAM,SAAS,GAAG,IAAI,mBAAO,EAAE,CAAC;AAEhC,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;AACzC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,yBAAyB,CAAC,CAAC;AAEhF,SAAS;KACN,OAAO,CAAC,SAAS,CAAC;KAClB,MAAM,CAAC,WAAW,EAAE,yEAAyE,CAAC;KAC9F,MAAM,CACL,eAAe,EACf,8DAA8D,QAAQ,CAAC,2BAA2B,EAAE,CACrG;KACA,MAAM,CACL,qBAAqB,EACrB,gEAAgE,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAC5F;KACA,WAAW,CACV,4FAA4F,CAC7F;KACA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAE5B,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,4BAA4B,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAE9F,SAAS;KACN,OAAO,CAAC,WAAW,CAAC;KACpB,MAAM,CAAC,WAAW,EAAE,2EAA2E,CAAC;KAChG,WAAW,CAAC,4BAA4B,CAAC;KACzC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AAE9B,gDAAgD;AAChD,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE;IACxB,IAAA,yCAAe,EAAC,oCAAoC,CAAC,CAAC;IACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,SAAS,CAAC,IAAI,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;IAC3B,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B;KAAM;IACL,SAAS,CAAC,IAAI,EAAE,CAAC;CAClB"}
+4
View File
@@ -0,0 +1,4 @@
import { OptionValues } from "commander";
export declare function install(options: OptionValues): Promise<void>;
export declare function uninstall(options: OptionValues): Promise<void>;
export declare function verify(options: OptionValues): Promise<void>;
+124
View File
@@ -0,0 +1,124 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.verify = exports.uninstall = exports.install = void 0;
const office_addin_cli_1 = require("office-addin-cli");
const office_addin_usage_data_1 = require("office-addin-usage-data");
const defaults = __importStar(require("./defaults"));
const install_1 = require("./install");
const uninstall_1 = require("./uninstall");
const verify_1 = require("./verify");
const defaults_1 = require("./defaults");
const office_addin_usage_data_2 = require("office-addin-usage-data");
/* global console */
function install(options) {
return __awaiter(this, void 0, void 0, function* () {
try {
const days = parseDays(options.days);
const domains = parseDomains(options.domains);
yield (0, install_1.ensureCertificatesAreInstalled)(days, domains, options.machine);
defaults_1.usageDataObject.reportSuccess("install");
}
catch (err) {
defaults_1.usageDataObject.reportException("install", err);
(0, office_addin_usage_data_1.logErrorMessage)(err);
}
});
}
exports.install = install;
function parseDays(optionValue) {
const days = (0, office_addin_cli_1.parseNumber)(optionValue, "--days should specify a number.");
if (days !== undefined) {
if (!Number.isInteger(days)) {
throw new office_addin_usage_data_2.ExpectedError("--days should be integer.");
}
if (days <= 0) {
throw new office_addin_usage_data_2.ExpectedError("--days should be greater than zero.");
}
}
return days;
}
function parseDomains(optionValue) {
switch (typeof optionValue) {
case "string": {
try {
return optionValue.split(",");
}
catch (_a) {
throw new Error("string value not in the correct format");
}
}
case "undefined": {
return undefined;
}
default: {
throw new Error("--domains value should be a string.");
}
}
}
function uninstall(options) {
return __awaiter(this, void 0, void 0, function* () {
try {
yield (0, uninstall_1.uninstallCaCertificate)(options.machine);
(0, uninstall_1.deleteCertificateFiles)(defaults.certificateDirectory);
defaults_1.usageDataObject.reportSuccess("uninstall");
}
catch (err) {
defaults_1.usageDataObject.reportException("uninstall", err);
(0, office_addin_usage_data_1.logErrorMessage)(err);
}
});
}
exports.uninstall = uninstall;
function verify(options /* eslint-disable-line @typescript-eslint/no-unused-vars */) {
return __awaiter(this, void 0, void 0, function* () {
try {
if (yield (0, verify_1.verifyCertificates)()) {
console.log(`You have trusted access to https://localhost.\nCertificate: ${defaults.localhostCertificatePath}\nKey: ${defaults.localhostKeyPath}`);
}
else {
console.log(`You need to install certificates for trusted access to https://localhost.`);
}
defaults_1.usageDataObject.reportSuccess("verify");
}
catch (err) {
defaults_1.usageDataObject.reportException("verify", err);
(0, office_addin_usage_data_1.logErrorMessage)(err);
}
});
}
exports.verify = verify;
//# sourceMappingURL=commands.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
+16
View File
@@ -0,0 +1,16 @@
import { OfficeAddinUsageData } from "office-addin-usage-data";
export declare const certificateDirectoryName = ".office-addin-dev-certs";
export declare const certificateDirectory: string;
export declare const caCertificateFileName = "ca.crt";
export declare const caCertificatePath: string;
export declare const localhostCertificateFileName = "localhost.crt";
export declare const localhostCertificatePath: string;
export declare const localhostKeyFileName = "localhost.key";
export declare const localhostKeyPath: string;
export declare const certificateName = "Developer CA for Microsoft Office Add-ins";
export declare const countryCode = "US";
export declare const daysUntilCertificateExpires = 30;
export declare const domain: string[];
export declare const locality = "Redmond";
export declare const state = "WA";
export declare const usageDataObject: OfficeAddinUsageData;
+34
View File
@@ -0,0 +1,34 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.usageDataObject = exports.state = exports.locality = exports.domain = exports.daysUntilCertificateExpires = exports.countryCode = exports.certificateName = exports.localhostKeyPath = exports.localhostKeyFileName = exports.localhostCertificatePath = exports.localhostCertificateFileName = exports.caCertificatePath = exports.caCertificateFileName = exports.certificateDirectory = exports.certificateDirectoryName = void 0;
const os_1 = __importDefault(require("os"));
const path_1 = __importDefault(require("path"));
const office_addin_usage_data_1 = require("office-addin-usage-data");
// Default certificate names
exports.certificateDirectoryName = ".office-addin-dev-certs";
exports.certificateDirectory = path_1.default.join(os_1.default.homedir(), exports.certificateDirectoryName);
exports.caCertificateFileName = "ca.crt";
exports.caCertificatePath = path_1.default.join(exports.certificateDirectory, exports.caCertificateFileName);
exports.localhostCertificateFileName = "localhost.crt";
exports.localhostCertificatePath = path_1.default.join(exports.certificateDirectory, exports.localhostCertificateFileName);
exports.localhostKeyFileName = "localhost.key";
exports.localhostKeyPath = path_1.default.join(exports.certificateDirectory, exports.localhostKeyFileName);
// Default certificate details
exports.certificateName = "Developer CA for Microsoft Office Add-ins";
exports.countryCode = "US";
exports.daysUntilCertificateExpires = 30;
exports.domain = ["127.0.0.1", "localhost"];
exports.locality = "Redmond";
exports.state = "WA";
// Usage data defaults
exports.usageDataObject = new office_addin_usage_data_1.OfficeAddinUsageData({
projectName: "office-addin-dev-certs",
instrumentationKey: office_addin_usage_data_1.instrumentationKeyForOfficeAddinCLITools,
raisePrompt: false,
});
//# sourceMappingURL=defaults.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../src/defaults.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;;;;AAElC,4CAAoB;AACpB,gDAAwB;AACxB,qEAGiC;AAEjC,4BAA4B;AACf,QAAA,wBAAwB,GAAG,yBAAyB,CAAC;AACrD,QAAA,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,OAAO,EAAE,EAAE,gCAAwB,CAAC,CAAC;AACzE,QAAA,qBAAqB,GAAG,QAAQ,CAAC;AACjC,QAAA,iBAAiB,GAAG,cAAI,CAAC,IAAI,CAAC,4BAAoB,EAAE,6BAAqB,CAAC,CAAC;AAC3E,QAAA,4BAA4B,GAAG,eAAe,CAAC;AAC/C,QAAA,wBAAwB,GAAG,cAAI,CAAC,IAAI,CAC/C,4BAAoB,EACpB,oCAA4B,CAC7B,CAAC;AACW,QAAA,oBAAoB,GAAG,eAAe,CAAC;AACvC,QAAA,gBAAgB,GAAG,cAAI,CAAC,IAAI,CAAC,4BAAoB,EAAE,4BAAoB,CAAC,CAAC;AAEtF,8BAA8B;AACjB,QAAA,eAAe,GAAG,2CAA2C,CAAC;AAC9D,QAAA,WAAW,GAAG,IAAI,CAAC;AACnB,QAAA,2BAA2B,GAAG,EAAE,CAAC;AACjC,QAAA,MAAM,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;AACpC,QAAA,QAAQ,GAAG,SAAS,CAAC;AACrB,QAAA,KAAK,GAAG,IAAI,CAAC;AAE1B,sBAAsB;AACT,QAAA,eAAe,GAAyB,IAAI,8CAAoB,CAAC;IAC5E,WAAW,EAAE,wBAAwB;IACrC,kBAAkB,EAAE,kEAAwC;IAC5D,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC"}
+1
View File
@@ -0,0 +1 @@
export declare function generateCertificates(caCertificatePath?: string, localhostCertificatePath?: string, localhostKeyPath?: string, daysUntilCertificateExpires?: number, domains?: string[]): Promise<void>;
+106
View File
@@ -0,0 +1,106 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.generateCertificates = void 0;
const fs_1 = __importDefault(require("fs"));
const fs_extra_1 = __importDefault(require("fs-extra"));
const mkcert = __importStar(require("mkcert"));
const path_1 = __importDefault(require("path"));
const defaults = __importStar(require("./defaults"));
/* global console */
/* Generate operation will check if there is already valid certificate installed.
if yes, then this operation will be no op.
else, new certificates are generated and installed if --install was provided.
*/
function generateCertificates(caCertificatePath = defaults.caCertificatePath, localhostCertificatePath = defaults.localhostCertificatePath, localhostKeyPath = defaults.localhostKeyPath, daysUntilCertificateExpires = defaults.daysUntilCertificateExpires, domains = defaults.domain) {
return __awaiter(this, void 0, void 0, function* () {
try {
fs_extra_1.default.ensureDirSync(path_1.default.dirname(caCertificatePath));
fs_extra_1.default.ensureDirSync(path_1.default.dirname(localhostCertificatePath));
fs_extra_1.default.ensureDirSync(path_1.default.dirname(localhostKeyPath));
}
catch (err) {
throw new Error(`Unable to create the directory.\n${err}`);
}
const cACertificateInfo = {
countryCode: defaults.countryCode,
locality: defaults.locality,
organization: defaults.certificateName,
state: defaults.state,
validity: daysUntilCertificateExpires,
};
let caCertificate;
try {
caCertificate = yield mkcert.createCA(cACertificateInfo);
}
catch (err) {
throw new Error(`Unable to generate the CA certificate.\n${err}`);
}
const localhostCertificateInfo = {
ca: caCertificate,
domains,
validity: daysUntilCertificateExpires,
};
let localhostCertificate;
try {
localhostCertificate = yield mkcert.createCert(localhostCertificateInfo);
}
catch (err) {
throw new Error(`Unable to generate the localhost certificate.\n${err}`);
}
try {
if (!fs_1.default.existsSync(caCertificatePath)) {
fs_1.default.writeFileSync(`${caCertificatePath}`, caCertificate.cert);
fs_1.default.writeFileSync(`${localhostCertificatePath}`, localhostCertificate.cert);
fs_1.default.writeFileSync(`${localhostKeyPath}`, localhostCertificate.key);
}
}
catch (err) {
throw new Error(`Unable to write generated certificates.\n${err}`);
}
if (caCertificatePath === defaults.caCertificatePath) {
console.log("The developer certificates have been generated in " + defaults.certificateDirectory);
}
else {
console.log("The developer certificates have been generated.");
}
});
}
exports.generateCertificates = generateCertificates;
//# sourceMappingURL=generate.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAElC,4CAAoB;AACpB,wDAA+B;AAC/B,+CAAiC;AACjC,gDAAwB;AACxB,qDAAuC;AAEvC,oBAAoB;AAEpB;;;EAGE;AACF,SAAsB,oBAAoB,CACxC,oBAA4B,QAAQ,CAAC,iBAAiB,EACtD,2BAAmC,QAAQ,CAAC,wBAAwB,EACpE,mBAA2B,QAAQ,CAAC,gBAAgB,EACpD,8BAAsC,QAAQ,CAAC,2BAA2B,EAC1E,UAAoB,QAAQ,CAAC,MAAM;;QAEnC,IAAI;YACF,kBAAO,CAAC,aAAa,CAAC,cAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;YACvD,kBAAO,CAAC,aAAa,CAAC,cAAI,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC9D,kBAAO,CAAC,aAAa,CAAC,cAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;SACvD;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;SAC5D;QAED,MAAM,iBAAiB,GAAuC;YAC5D,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,YAAY,EAAE,QAAQ,CAAC,eAAe;YACtC,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,QAAQ,EAAE,2BAA2B;SACtC,CAAC;QACF,IAAI,aAAiC,CAAC;QACtC,IAAI;YACF,aAAa,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;SAC1D;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,GAAG,EAAE,CAAC,CAAC;SACnE;QAED,MAAM,wBAAwB,GAA8B;YAC1D,EAAE,EAAE,aAAa;YACjB,OAAO;YACP,QAAQ,EAAE,2BAA2B;SACtC,CAAC;QACF,IAAI,oBAAwC,CAAC;QAC7C,IAAI;YACF,oBAAoB,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;SAC1E;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,kDAAkD,GAAG,EAAE,CAAC,CAAC;SAC1E;QAED,IAAI;YACF,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAAE;gBACrC,YAAE,CAAC,aAAa,CAAC,GAAG,iBAAiB,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;gBAC7D,YAAE,CAAC,aAAa,CAAC,GAAG,wBAAwB,EAAE,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;gBAC3E,YAAE,CAAC,aAAa,CAAC,GAAG,gBAAgB,EAAE,EAAE,oBAAoB,CAAC,GAAG,CAAC,CAAC;aACnE;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,GAAG,EAAE,CAAC,CAAC;SACpE;QAED,IAAI,iBAAiB,KAAK,QAAQ,CAAC,iBAAiB,EAAE;YACpD,OAAO,CAAC,GAAG,CACT,oDAAoD,GAAG,QAAQ,CAAC,oBAAoB,CACrF,CAAC;SACH;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;SAChE;IACH,CAAC;CAAA;AA1DD,oDA0DC"}
+8
View File
@@ -0,0 +1,8 @@
/// <reference types="node" />
interface IHttpsServerOptions {
ca: Buffer;
cert: Buffer;
key: Buffer;
}
export declare function getHttpsServerOptions(daysUntilCertificateExpires?: number, domains?: string[], machine?: boolean): Promise<IHttpsServerOptions>;
export {};
+70
View File
@@ -0,0 +1,70 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getHttpsServerOptions = void 0;
const fs_1 = __importDefault(require("fs"));
const defaults = __importStar(require("./defaults"));
const install_1 = require("./install");
function getHttpsServerOptions(daysUntilCertificateExpires, domains, machine) {
return __awaiter(this, void 0, void 0, function* () {
yield (0, install_1.ensureCertificatesAreInstalled)(daysUntilCertificateExpires, domains, machine);
const httpsServerOptions = {};
try {
httpsServerOptions.ca = fs_1.default.readFileSync(defaults.caCertificatePath);
}
catch (err) {
throw new Error(`Unable to read the CA certificate file.\n${err}`);
}
try {
httpsServerOptions.cert = fs_1.default.readFileSync(defaults.localhostCertificatePath);
}
catch (err) {
throw new Error(`Unable to read the certificate file.\n${err}`);
}
try {
httpsServerOptions.key = fs_1.default.readFileSync(defaults.localhostKeyPath);
}
catch (err) {
throw new Error(`Unable to read the certificate key.\n${err}`);
}
return httpsServerOptions;
});
}
exports.getHttpsServerOptions = getHttpsServerOptions;
//# sourceMappingURL=httpsServerOptions.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"httpsServerOptions.js","sourceRoot":"","sources":["../src/httpsServerOptions.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAElC,4CAAoB;AACpB,qDAAuC;AACvC,uCAA2D;AAU3D,SAAsB,qBAAqB,CACzC,2BAAoC,EACpC,OAAkB,EAClB,OAAiB;;QAEjB,MAAM,IAAA,wCAA8B,EAAC,2BAA2B,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEpF,MAAM,kBAAkB,GAAG,EAAyB,CAAC;QACrD,IAAI;YACF,kBAAkB,CAAC,EAAE,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;SACrE;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,4CAA4C,GAAG,EAAE,CAAC,CAAC;SACpE;QAED,IAAI;YACF,kBAAkB,CAAC,IAAI,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;SAC9E;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,yCAAyC,GAAG,EAAE,CAAC,CAAC;SACjE;QAED,IAAI;YACF,kBAAkB,CAAC,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;SACrE;QAAC,OAAO,GAAG,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,wCAAwC,GAAG,EAAE,CAAC,CAAC;SAChE;QAED,OAAO,kBAAkB,CAAC;IAC5B,CAAC;CAAA;AA3BD,sDA2BC"}
+2
View File
@@ -0,0 +1,2 @@
export declare function ensureCertificatesAreInstalled(daysUntilCertificateExpires?: number, domains?: string[], machine?: boolean): Promise<void>;
export declare function installCaCertificate(caCertificatePath?: string, machine?: boolean): Promise<void>;
+111
View File
@@ -0,0 +1,111 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.installCaCertificate = exports.ensureCertificatesAreInstalled = void 0;
const child_process_1 = require("child_process");
const path_1 = __importDefault(require("path"));
const defaults = __importStar(require("./defaults"));
const generate_1 = require("./generate");
const uninstall_1 = require("./uninstall");
const verify_1 = require("./verify");
const defaults_1 = require("./defaults");
const office_addin_usage_data_1 = require("office-addin-usage-data");
/* global console process __dirname */
function getInstallCommand(caCertificatePath, machine = false) {
switch (process.platform) {
case "win32": {
const script = path_1.default.resolve(__dirname, "..\\scripts\\install.ps1");
return `powershell -ExecutionPolicy Bypass -File "${script}" ${machine ? "LocalMachine" : "CurrentUser"} "${caCertificatePath}"`;
}
case "darwin": {
// macOS
const prefix = machine ? "sudo " : "";
const keychainFile = machine
? "/Library/Keychains/System.keychain"
: "~/Library/Keychains/login.keychain-db";
return `${prefix}security add-trusted-cert -d -r trustRoot -k ${keychainFile} '${caCertificatePath}'`;
}
case "linux": {
const script = path_1.default.resolve(__dirname, "../scripts/install_linux.sh");
return `sudo sh '${script}' '${caCertificatePath}'`;
}
default:
throw new office_addin_usage_data_1.ExpectedError(`Platform not supported: ${process.platform}`);
}
}
function ensureCertificatesAreInstalled(daysUntilCertificateExpires = defaults.daysUntilCertificateExpires, domains = defaults.domain, machine = false) {
return __awaiter(this, void 0, void 0, function* () {
try {
const areCertificatesValid = (0, verify_1.verifyCertificates)();
if (areCertificatesValid) {
console.log(`You already have trusted access to https://localhost.\nCertificate: ${defaults.localhostCertificatePath}\nKey: ${defaults.localhostKeyPath}`);
}
else {
yield (0, uninstall_1.uninstallCaCertificate)(false, false);
(0, uninstall_1.deleteCertificateFiles)(defaults.certificateDirectory);
yield (0, generate_1.generateCertificates)(defaults.caCertificatePath, defaults.localhostCertificatePath, defaults.localhostKeyPath, daysUntilCertificateExpires, domains);
yield installCaCertificate(defaults.caCertificatePath, machine);
}
defaults_1.usageDataObject.reportSuccess("ensureCertificatesAreInstalled()");
}
catch (err) {
defaults_1.usageDataObject.reportException("ensureCertificatesAreInstalled()", err);
throw err;
}
});
}
exports.ensureCertificatesAreInstalled = ensureCertificatesAreInstalled;
function installCaCertificate(caCertificatePath = defaults.caCertificatePath, machine = false) {
return __awaiter(this, void 0, void 0, function* () {
const command = getInstallCommand(caCertificatePath, machine);
try {
console.log(`Installing CA certificate "Developer CA for Microsoft Office Add-ins"...`);
// If the certificate is already installed by another instance skip it.
if (!(0, verify_1.isCaCertificateInstalled)()) {
(0, child_process_1.execSync)(command, { stdio: "pipe" });
}
console.log(`You now have trusted access to https://localhost.\nCertificate: ${defaults.localhostCertificatePath}\nKey: ${defaults.localhostKeyPath}`);
}
catch (error) {
throw new Error(`Unable to install the CA certificate. ${error.stderr.toString()}`);
}
});
}
exports.installCaCertificate = installCaCertificate;
//# sourceMappingURL=install.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
+5
View File
@@ -0,0 +1,5 @@
export * from "./generate";
export * from "./httpsServerOptions";
export * from "./install";
export * from "./verify";
export * from "./uninstall";
+24
View File
@@ -0,0 +1,24 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
__exportStar(require("./generate"), exports);
__exportStar(require("./httpsServerOptions"), exports);
__exportStar(require("./install"), exports);
__exportStar(require("./verify"), exports);
__exportStar(require("./uninstall"), exports);
//# sourceMappingURL=main.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;;;;;;;;;;;;;;AAElC,6CAA2B;AAC3B,uDAAqC;AACrC,4CAA0B;AAC1B,2CAAyB;AACzB,8CAA4B"}
+2
View File
@@ -0,0 +1,2 @@
export declare function deleteCertificateFiles(certificateDirectory?: string): void;
export declare function uninstallCaCertificate(machine?: boolean, verbose?: boolean): Promise<void>;
+103
View File
@@ -0,0 +1,103 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.uninstallCaCertificate = exports.deleteCertificateFiles = void 0;
const child_process_1 = require("child_process");
const fs_extra_1 = __importDefault(require("fs-extra"));
const path_1 = __importDefault(require("path"));
const defaults = __importStar(require("./defaults"));
const verify_1 = require("./verify");
const defaults_1 = require("./defaults");
const office_addin_usage_data_1 = require("office-addin-usage-data");
/* global console process __dirname */
function getUninstallCommand(machine = false) {
switch (process.platform) {
case "win32": {
const script = path_1.default.resolve(__dirname, "..\\scripts\\uninstall.ps1");
return `powershell -ExecutionPolicy Bypass -File "${script}" ${machine ? "LocalMachine" : "CurrentUser"} "${defaults.certificateName}"`;
}
case "darwin": {
// macOS
const script = path_1.default.resolve(__dirname, "../scripts/uninstall.sh");
return `sudo sh '${script}' '${defaults.certificateName}'`;
}
case "linux": {
const script = path_1.default.resolve(__dirname, "../scripts/uninstall_linux.sh");
return `sudo sh '${script}' '${defaults.caCertificateFileName}'`;
}
default:
throw new office_addin_usage_data_1.ExpectedError(`Platform not supported: ${process.platform}`);
}
}
// Deletes the generated certificate files and delete the certificate directory if its empty
function deleteCertificateFiles(certificateDirectory = defaults.certificateDirectory) {
if (fs_extra_1.default.existsSync(certificateDirectory)) {
fs_extra_1.default.removeSync(path_1.default.join(certificateDirectory, defaults.localhostCertificateFileName));
fs_extra_1.default.removeSync(path_1.default.join(certificateDirectory, defaults.localhostKeyFileName));
fs_extra_1.default.removeSync(path_1.default.join(certificateDirectory, defaults.caCertificateFileName));
if (fs_extra_1.default.readdirSync(certificateDirectory).length === 0) {
fs_extra_1.default.removeSync(certificateDirectory);
}
}
}
exports.deleteCertificateFiles = deleteCertificateFiles;
function uninstallCaCertificate(machine = false, verbose = true) {
return __awaiter(this, void 0, void 0, function* () {
if ((0, verify_1.isCaCertificateInstalled)(/* returnInvalidCertificate */ true)) {
const command = getUninstallCommand(machine);
try {
console.log(`Uninstalling CA certificate "Developer CA for Microsoft Office Add-ins"...`);
(0, child_process_1.execSync)(command, { stdio: "pipe" });
console.log(`You no longer have trusted access to https://localhost.`);
defaults_1.usageDataObject.reportSuccess("uninstallCaCertificate()");
}
catch (error) {
defaults_1.usageDataObject.reportException("uninstallCaCertificate()", error);
throw new Error(`Unable to uninstall the CA certificate.\n${error.stderr.toString()}`);
}
}
else {
if (verbose) {
console.log(`The CA certificate is not installed.`);
}
}
});
}
exports.uninstallCaCertificate = uninstallCaCertificate;
//# sourceMappingURL=uninstall.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../src/uninstall.ts"],"names":[],"mappings":";AAAA,4DAA4D;AAC5D,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAElC,iDAAyC;AACzC,wDAA+B;AAC/B,gDAAwB;AACxB,qDAAuC;AACvC,qCAAoD;AACpD,yCAA6C;AAC7C,qEAAwD;AAExD,sCAAsC;AAEtC,SAAS,mBAAmB,CAAC,UAAmB,KAAK;IACnD,QAAQ,OAAO,CAAC,QAAQ,EAAE;QACxB,KAAK,OAAO,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;YACrE,OAAO,6CAA6C,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,KACrG,QAAQ,CAAC,eACX,GAAG,CAAC;SACL;QACD,KAAK,QAAQ,CAAC,CAAC;YACb,QAAQ;YACR,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;YAClE,OAAO,YAAY,MAAM,MAAM,QAAQ,CAAC,eAAe,GAAG,CAAC;SAC5D;QACD,KAAK,OAAO,CAAC,CAAC;YACZ,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;YACxE,OAAO,YAAY,MAAM,MAAM,QAAQ,CAAC,qBAAqB,GAAG,CAAC;SAClE;QACD;YACE,MAAM,IAAI,uCAAa,CAAC,2BAA2B,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC1E;AACH,CAAC;AAED,4FAA4F;AAC5F,SAAgB,sBAAsB,CACpC,uBAA+B,QAAQ,CAAC,oBAAoB;IAE5D,IAAI,kBAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;QAC5C,kBAAO,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,4BAA4B,CAAC,CAAC,CAAC;QAC3F,kBAAO,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACnF,kBAAO,CAAC,UAAU,CAAC,cAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAEpF,IAAI,kBAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1D,kBAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;SAC1C;KACF;AACH,CAAC;AAZD,wDAYC;AAED,SAAsB,sBAAsB,CAAC,UAAmB,KAAK,EAAE,UAAmB,IAAI;;QAC5F,IAAI,IAAA,iCAAwB,EAAC,8BAA8B,CAAC,IAAI,CAAC,EAAE;YACjE,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAE7C,IAAI;gBACF,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;gBAC1F,IAAA,wBAAQ,EAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;gBACrC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBACvE,0BAAe,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC;aAC3D;YAAC,OAAO,KAAU,EAAE;gBACnB,0BAAe,CAAC,eAAe,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;gBACnE,MAAM,IAAI,KAAK,CAAC,4CAA4C,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;aACxF;SACF;aAAM;YACL,IAAI,OAAO,EAAE;gBACX,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;aACrD;SACF;IACH,CAAC;CAAA;AAlBD,wDAkBC"}
+3
View File
@@ -0,0 +1,3 @@
export declare const outputMarker: string;
export declare function isCaCertificateInstalled(returnInvalidCertificate?: boolean): boolean;
export declare function verifyCertificates(certificatePath?: string, keyPath?: string): boolean;
+134
View File
@@ -0,0 +1,134 @@
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.verifyCertificates = exports.isCaCertificateInstalled = exports.outputMarker = void 0;
const child_process_1 = require("child_process");
const crypto_1 = __importDefault(require("crypto"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const defaults = __importStar(require("./defaults"));
const defaults_1 = require("./defaults");
const office_addin_usage_data_1 = require("office-addin-usage-data");
/* global Buffer process __dirname */
// On win32 this is a unique hash used with PowerShell command to reliably delineate command output
exports.outputMarker = process.platform === "win32"
? `[${crypto_1.default.createHash("md5").update(`${defaults.certificateName}${defaults.caCertificatePath}`).digest("hex")}]`
: "";
function getVerifyCommand(returnInvalidCertificate) {
switch (process.platform) {
case "win32": {
const script = path_1.default.resolve(__dirname, "..\\scripts\\verify.ps1");
const defaultCommand = `powershell -ExecutionPolicy Bypass -File "${script}" -CaCertificateName "${defaults.certificateName}" -CaCertificatePath "${defaults.caCertificatePath}" -LocalhostCertificatePath "${defaults.localhostCertificatePath}" -OutputMarker "${exports.outputMarker}"`;
if (returnInvalidCertificate) {
return defaultCommand + ` -ReturnInvalidCertificate`;
}
return defaultCommand;
}
case "darwin": {
// macOS
const script = path_1.default.resolve(__dirname, "../scripts/verify.sh");
return `sh '${script}' '${defaults.certificateName}'`;
}
case "linux": {
const script = path_1.default.resolve(__dirname, "../scripts/verify_linux.sh");
return `sh '${script}' '${defaults.caCertificateFileName}'`;
}
default:
throw new office_addin_usage_data_1.ExpectedError(`Platform not supported: ${process.platform}`);
}
}
function isCaCertificateInstalled(returnInvalidCertificate = false) {
const command = getVerifyCommand(returnInvalidCertificate);
try {
const output = (0, child_process_1.execSync)(command, { stdio: "pipe" }).toString();
if (process.platform === "win32") {
// Remove any PowerShell output that preceeds invoking the actual certificate check command
return (output.slice(output.lastIndexOf(exports.outputMarker) + exports.outputMarker.length).trim().length !== 0);
}
// script files return empty string if the certificate not found or expired
if (output.length !== 0) {
return true;
}
}
catch (_a) {
// Some commands throw errors if the certifcate is not found or expired
}
return false;
}
exports.isCaCertificateInstalled = isCaCertificateInstalled;
function validateCertificateAndKey(certificatePath, keyPath) {
let certificate = "";
let key = "";
try {
certificate = fs_1.default.readFileSync(certificatePath).toString();
}
catch (err) {
throw new Error(`Unable to read the certificate.\n${err}`);
}
try {
key = fs_1.default.readFileSync(keyPath).toString();
}
catch (err) {
throw new Error(`Unable to read the certificate key.\n${err}`);
}
let encrypted;
try {
encrypted = crypto_1.default.publicEncrypt(certificate, Buffer.from("test"));
}
catch (err) {
throw new Error(`The certificate is not valid.\n${err}`);
}
try {
crypto_1.default.privateDecrypt(key, encrypted);
}
catch (err) {
throw new Error(`The certificate key is not valid.\n${err}`);
}
}
function verifyCertificates(certificatePath = defaults.localhostCertificatePath, keyPath = defaults.localhostKeyPath) {
try {
let isCertificateValid = true;
try {
validateCertificateAndKey(certificatePath, keyPath);
}
catch (_a) {
isCertificateValid = false;
}
let output = isCertificateValid && isCaCertificateInstalled();
defaults_1.usageDataObject.reportSuccess("verifyCertificates()");
return output;
}
catch (err) {
defaults_1.usageDataObject.reportException("verifyCertificates()", err);
throw err;
}
}
exports.verifyCertificates = verifyCertificates;
//# sourceMappingURL=verify.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}