forked from coder/code-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request coder#2563 from cdr/proxy-path-passthrough-0bb9
pathProxy.ts: Implement --proxy-path-passthrough
- Loading branch information
Showing
13 changed files
with
277 additions
and
95 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
import * as http from "http" | ||
import * as nodeFetch from "node-fetch" | ||
import * as util from "../src/common/util" | ||
import { ensureAddress } from "../src/node/app" | ||
|
||
// Perhaps an abstraction similar to this should be used in app.ts as well. | ||
export class HttpServer { | ||
private hs = http.createServer() | ||
|
||
public constructor(hs?: http.Server) { | ||
// See usage in test/integration.ts | ||
if (hs) { | ||
this.hs = hs | ||
} | ||
} | ||
|
||
/** | ||
* listen starts the server on a random localhost port. | ||
* Use close to cleanup when done. | ||
*/ | ||
public listen(fn: http.RequestListener): Promise<void> { | ||
this.hs.on("request", fn) | ||
|
||
let resolved = false | ||
return new Promise((res, rej) => { | ||
this.hs.listen(0, "localhost", () => { | ||
res() | ||
resolved = true | ||
}) | ||
|
||
this.hs.on("error", (err) => { | ||
if (!resolved) { | ||
rej(err) | ||
} else { | ||
// Promise resolved earlier so this is some other error. | ||
util.logError("http server error", err) | ||
} | ||
}) | ||
}) | ||
} | ||
|
||
/** | ||
* close cleans up the server. | ||
*/ | ||
public close(): Promise<void> { | ||
return new Promise((res, rej) => { | ||
this.hs.close((err) => { | ||
if (err) { | ||
rej(err) | ||
return | ||
} | ||
res() | ||
}) | ||
}) | ||
} | ||
|
||
/** | ||
* fetch fetches the request path. | ||
* The request path must be rooted! | ||
*/ | ||
public fetch(requestPath: string, opts?: nodeFetch.RequestInit): Promise<nodeFetch.Response> { | ||
return nodeFetch.default(`${ensureAddress(this.hs)}${requestPath}`, opts) | ||
} | ||
|
||
public port(): number { | ||
const addr = this.hs.address() | ||
if (addr && typeof addr === "object") { | ||
return addr.port | ||
} | ||
throw new Error("server not listening or listening on unix socket") | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,21 @@ | ||
import * as express from "express" | ||
import { createApp } from "../src/node/app" | ||
import { parse, setDefaults, parseConfigFile, DefaultedArgs } from "../src/node/cli" | ||
import { register } from "../src/node/routes" | ||
import * as httpserver from "./httpserver" | ||
|
||
export async function setup( | ||
argv: string[], | ||
configFile?: string, | ||
): Promise<[express.Application, express.Application, httpserver.HttpServer, DefaultedArgs]> { | ||
argv = ["--bind-addr=localhost:0", ...argv] | ||
|
||
const cliArgs = parse(argv) | ||
const configArgs = parseConfigFile(configFile || "", "test/integration.ts") | ||
const args = await setDefaults(cliArgs, configArgs) | ||
|
||
const [app, wsApp, server] = await createApp(args) | ||
await register(app, wsApp, server, args) | ||
|
||
return [app, wsApp, new httpserver.HttpServer(server), args] | ||
} |
Oops, something went wrong.