Deprecate --host and --port in favour of --bind-addr

This commit is contained in:
Anmol Sethi 2020-04-27 09:22:52 -04:00
parent f21ba53609
commit af28885ea6
No known key found for this signature in database
GPG Key ID: 8CEF1878FF10ADEB
5 changed files with 23 additions and 6 deletions

2
.gitignore vendored
View File

@ -3,6 +3,6 @@
build build
dist* dist*
out* out*
release* release/
node_modules node_modules
binaries binaries

View File

@ -40,4 +40,4 @@ RUN cd /tmp && tar -xzf code-server*.tar.gz && rm code-server*.tar.gz && \
EXPOSE 8080 EXPOSE 8080
USER coder USER coder
WORKDIR /home/coder WORKDIR /home/coder
ENTRYPOINT ["dumb-init", "fixuid", "-q", "/usr/local/bin/code-server", "--host", "0.0.0.0", "."] ENTRYPOINT ["dumb-init", "fixuid", "-q", "/usr/local/bin/code-server", "--bind-addr", "0.0.0.0:8080", "."]

View File

@ -30,6 +30,7 @@ export interface Args extends VsArgs {
log?: LogLevel log?: LogLevel
readonly open?: boolean readonly open?: boolean
readonly port?: number readonly port?: number
readonly "bind-addr"?: string
readonly socket?: string readonly socket?: string
readonly version?: boolean readonly version?: boolean
readonly force?: boolean readonly force?: boolean
@ -88,11 +89,16 @@ const options: Options<Required<Args>> = {
"cert-key": { type: "string", path: true, description: "Path to certificate key when using non-generated cert." }, "cert-key": { type: "string", path: true, description: "Path to certificate key when using non-generated cert." },
"disable-updates": { type: "boolean", description: "Disable automatic updates." }, "disable-updates": { type: "boolean", description: "Disable automatic updates." },
"disable-telemetry": { type: "boolean", description: "Disable telemetry." }, "disable-telemetry": { type: "boolean", description: "Disable telemetry." },
host: { type: "string", description: "Host for the HTTP server." },
help: { type: "boolean", short: "h", description: "Show this output." }, help: { type: "boolean", short: "h", description: "Show this output." },
json: { type: "boolean" }, json: { type: "boolean" },
open: { type: "boolean", description: "Open in browser on startup. Does not work remotely." }, open: { type: "boolean", description: "Open in browser on startup. Does not work remotely." },
port: { type: "number", description: "Port for the HTTP server." },
"bind-addr": { type: "string", description: "Address to bind to in host:port." },
// These two have been deprecated by bindAddr.
host: { type: "string", description: "" },
port: { type: "number", description: "" },
socket: { type: "string", path: true, description: "Path to a socket (host and port will be ignored)." }, socket: { type: "string", path: true, description: "Path to a socket (host and port will be ignored)." },
version: { type: "boolean", short: "v", description: "Display version information." }, version: { type: "boolean", short: "v", description: "Display version information." },
_: { type: "string[]" }, _: { type: "string[]" },

View File

@ -35,13 +35,21 @@ const main = async (args: Args): Promise<void> => {
const auth = args.auth || AuthType.Password const auth = args.auth || AuthType.Password
const originalPassword = auth === AuthType.Password && (process.env.PASSWORD || (await generatePassword())) const originalPassword = auth === AuthType.Password && (process.env.PASSWORD || (await generatePassword()))
let host = args.host
let port = args.port
if (args["bind-addr"] !== undefined) {
const u = new URL(`http://${args["bind-addr"]}`)
host = u.hostname
port = parseInt(u.port, 10)
}
// Spawn the main HTTP server. // Spawn the main HTTP server.
const options: HttpServerOptions = { const options: HttpServerOptions = {
auth, auth,
commit, commit,
host: args.host || (args.auth === AuthType.Password && typeof args.cert !== "undefined" ? "0.0.0.0" : "localhost"), host: host || (args.auth === AuthType.Password && 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: port !== undefined ? port : process.env.PORT ? parseInt(process.env.PORT, 10) : 8080,
proxyDomains: args["proxy-domain"], proxyDomains: args["proxy-domain"],
socket: args.socket, socket: args.socket,
...(args.cert && !args.cert.value ...(args.cert && !args.cert.value

View File

@ -19,6 +19,7 @@ describe("cli", () => {
it("should parse all available options", () => { it("should parse all available options", () => {
assert.deepEqual( assert.deepEqual(
parse([ parse([
"--bind-addr=192.169.0.1:8080",
"--auth", "--auth",
"none", "none",
"--extensions-dir", "--extensions-dir",
@ -74,6 +75,7 @@ describe("cli", () => {
"user-data-dir": path.resolve("bar"), "user-data-dir": path.resolve("bar"),
verbose: true, verbose: true,
version: true, version: true,
"bind-addr": "192.169.0.1:8080",
}, },
) )
}) })
@ -117,6 +119,7 @@ describe("cli", () => {
assert.throws(() => parse(["--auth=", "--log=debug"]), /--auth requires a value/) assert.throws(() => parse(["--auth=", "--log=debug"]), /--auth requires a value/)
assert.throws(() => parse(["--auth", "--log"]), /--auth requires a value/) assert.throws(() => parse(["--auth", "--log"]), /--auth requires a value/)
assert.throws(() => parse(["--auth", "--invalid"]), /--auth requires a value/) assert.throws(() => parse(["--auth", "--invalid"]), /--auth requires a value/)
assert.throws(() => parse(["--bind-addr"]), /--bind-addr requires a value/)
}) })
it("should error if value is invalid", () => { it("should error if value is invalid", () => {