qcobjects-cli
Version:
qcobjects cli command line tool
87 lines (81 loc) • 3.31 kB
text/typescript
/**
* QCObjects CLI 2.4.x
* ________________
*
* Author: Jean Machuca <correojean@gmail.com>
*
* Cross Browser Javascript Framework for MVC Patterns
* QuickCorp/QCObjects is licensed under the
* GNU Lesser General Public License v3.0
* [LICENSE] (https://github.com/QuickCorp/QCObjects/blob/master/LICENSE.txt)
*
* Permissions of this copyleft license are conditioned on making available
* complete source code of licensed works and modifications under the same
* license or the GNU GPLv3. Copyright and license notices must be preserved.
* Contributors provide an express grant of patent rights. However, a larger
* work using the licensed work through interfaces provided by the licensed
* work may be distributed under different terms and without source code for
* the larger work.
*
* Copyright (C) 2015 Jean Machuca,<correojean@gmail.com>
*
* Everyone is permitted to copy and distribute verbatim copies of this
* license document, but changing it is not allowed.
*/
/*eslint no-unused-vars: "off"*/
/*eslint no-redeclare: "off"*/
/*eslint no-empty: "off"*/
/*eslint strict: "off"*/
/*eslint no-mixed-operators: "off"*/
/*eslint no-undef: "off"*/
import path from "node:path";
import os from "node:os";
import "./defaultsettings";
import { InheritClass, CONFIG } from "qcobjects";
(async () => {
"use strict";
const absolutePath = path.resolve(__dirname, "./");
const templatePath = path.resolve(__dirname, "./templates/apps/") + "/";
const isWindows = () => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return os.platform().toLowerCase().startsWith("win");
};
const isMac = () => {
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
return os.platform().toLowerCase().startsWith("darwin");
};
const { execSync } = await import("node:child_process");
class Main extends InheritClass {
constructor() {
super();
this.start();
}
start() {
const certificate_provider = CONFIG.get("certificate_provider", "self_signed");
let stdout;
switch (certificate_provider) {
case "self_signed":
// stderr is sent to stderr of parent process
// you can set options.stdio if you want it to go elsewhere
if (isWindows()) {
stdout = execSync("openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj \"/CN=" + CONFIG.get("domain") + "\" -keyout " + CONFIG.get("private-key-pem") + " -out " + CONFIG.get("private-cert-pem"));
} else {
stdout = execSync("openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=" + CONFIG.get("domain") + "' -keyout " + CONFIG.get("private-key-pem") + " -out " + CONFIG.get("private-cert-pem"));
}
break;
case "letsencrypt":
if (isWindows()) {
throw Error("Letsencrypt certificate is not supported in Windows");
} else {
var prehook_posthook = "--pre-hook \"service qcobjects stop\" --post-hook=\"service qcobjects start\"";
stdout = execSync(`certbot -n -d ${CONFIG.get("domain")} certonly --standalone ${prehook_posthook}`);
}
break;
default:
break;
}
}
}
const __main__ = new Main();
})().catch(e => console.error(e));