Minor startup code improvements

- Add type to HTTP options.
- Fix certificate message always saying it was generated.
- Dedent output not directly related to the HTTP server.
- Remove unnecessary comma.
This commit is contained in:
Asher 2020-03-23 12:07:23 -05:00
parent e480f6527e
commit 37299abcc9
No known key found for this signature in database
GPG Key ID: D63C1EF81242354A
1 changed files with 23 additions and 26 deletions

View File

@ -9,7 +9,7 @@ import { StaticHttpProvider } from "./app/static"
import { UpdateHttpProvider } from "./app/update" import { UpdateHttpProvider } from "./app/update"
import { VscodeHttpProvider } from "./app/vscode" import { VscodeHttpProvider } from "./app/vscode"
import { Args, optionDescriptions, parse } from "./cli" import { Args, optionDescriptions, parse } from "./cli"
import { AuthType, HttpServer } from "./http" import { AuthType, HttpServer, HttpServerOptions } from "./http"
import { SshProvider } from "./ssh/server" import { SshProvider } from "./ssh/server"
import { generateCertificate, generatePassword, generateSshHostKey, hash, open } from "./util" import { generateCertificate, generatePassword, generateSshHostKey, hash, open } from "./util"
import { ipcMain, wrap } from "./wrapper" import { ipcMain, wrap } from "./wrapper"
@ -36,38 +36,25 @@ const main = async (args: Args): Promise<void> => {
const originalPassword = auth === AuthType.Password && (process.env.PASSWORD || (await generatePassword())) const originalPassword = auth === AuthType.Password && (process.env.PASSWORD || (await generatePassword()))
// Spawn the main HTTP server. // Spawn the main HTTP server.
const options = { const options: HttpServerOptions = {
auth, auth,
cert: args.cert ? args.cert.value : undefined,
certKey: args["cert-key"],
sshHostKey: args["ssh-host-key"],
commit, commit,
host: args.host || (args.auth === AuthType.Password && typeof args.cert !== "undefined" ? "0.0.0.0" : "localhost"), host: args.host || (args.auth === AuthType.Password && typeof args.cert !== "undefined" ? "0.0.0.0" : "localhost"),
password: originalPassword ? hash(originalPassword) : undefined, password: originalPassword ? hash(originalPassword) : undefined,
port: typeof args.port !== "undefined" ? args.port : process.env.PORT ? parseInt(process.env.PORT, 10) : 8080, port: typeof args.port !== "undefined" ? args.port : process.env.PORT ? parseInt(process.env.PORT, 10) : 8080,
socket: args.socket, socket: args.socket,
...(args.cert && !args.cert.value
? await generateCertificate()
: {
cert: args.cert && args.cert.value,
certKey: args["cert-key"],
}),
} }
if (!options.cert && args.cert) { if (options.cert && !options.certKey) {
const { cert, certKey } = await generateCertificate()
options.cert = cert
options.certKey = certKey
} else if (args.cert && !args["cert-key"]) {
throw new Error("--cert-key is missing") throw new Error("--cert-key is missing")
} }
if (!args["disable-ssh"]) {
if (!options.sshHostKey && typeof options.sshHostKey !== "undefined") {
throw new Error("--ssh-host-key cannot be blank")
} else if (!options.sshHostKey) {
try {
options.sshHostKey = await generateSshHostKey()
} catch (error) {
logger.error("Unable to start SSH server", field("error", error.message))
}
}
}
const httpServer = new HttpServer(options) const httpServer = new HttpServer(options)
const vscode = httpServer.registerHttpProvider("/", VscodeHttpProvider, args) const vscode = httpServer.registerHttpProvider("/", VscodeHttpProvider, args)
const api = httpServer.registerHttpProvider("/api", ApiHttpProvider, httpServer, vscode, args["user-data-dir"]) const api = httpServer.registerHttpProvider("/api", ApiHttpProvider, httpServer, vscode, args["user-data-dir"])
@ -84,7 +71,7 @@ const main = async (args: Args): Promise<void> => {
if (auth === AuthType.Password && !process.env.PASSWORD) { if (auth === AuthType.Password && !process.env.PASSWORD) {
logger.info(` - Password is ${originalPassword}`) logger.info(` - Password is ${originalPassword}`)
logger.info(" - To use your own password, set the PASSWORD environment variable") logger.info(" - To use your own password set the PASSWORD environment variable")
if (!args.auth) { if (!args.auth) {
logger.info(" - To disable use `--auth none`") logger.info(" - To disable use `--auth none`")
} }
@ -96,7 +83,7 @@ const main = async (args: Args): Promise<void> => {
if (httpServer.protocol === "https") { if (httpServer.protocol === "https") {
logger.info( logger.info(
typeof args.cert === "string" args.cert && args.cert.value
? ` - Using provided certificate and key for HTTPS` ? ` - Using provided certificate and key for HTTPS`
: ` - Using generated certificate and key for HTTPS`, : ` - Using generated certificate and key for HTTPS`,
) )
@ -106,9 +93,18 @@ const main = async (args: Args): Promise<void> => {
logger.info(`Automatic updates are ${update.enabled ? "enabled" : "disabled"}`) logger.info(`Automatic updates are ${update.enabled ? "enabled" : "disabled"}`)
let sshHostKey = args["ssh-host-key"]
if (!args["disable-ssh"] && !sshHostKey) {
try {
sshHostKey = await generateSshHostKey()
} catch (error) {
logger.error("Unable to start SSH server", field("error", error.message))
}
}
let sshPort: number | undefined let sshPort: number | undefined
if (!args["disable-ssh"] && options.sshHostKey) { if (!args["disable-ssh"] && sshHostKey) {
const sshProvider = httpServer.registerHttpProvider("/ssh", SshProvider, options.sshHostKey as string) const sshProvider = httpServer.registerHttpProvider("/ssh", SshProvider, sshHostKey)
try { try {
sshPort = await sshProvider.listen() sshPort = await sshProvider.listen()
} catch (error) { } catch (error) {
@ -118,6 +114,7 @@ const main = async (args: Args): Promise<void> => {
if (typeof sshPort !== "undefined") { if (typeof sshPort !== "undefined") {
logger.info(`SSH server listening on localhost:${sshPort}`) logger.info(`SSH server listening on localhost:${sshPort}`)
logger.info(" - To disable use `--disable-ssh`")
} else { } else {
logger.info("SSH server disabled") logger.info("SSH server disabled")
} }