@@ -5,6 +5,7 @@ import { CliMessage } from "../../lib/vscode/src/vs/server/ipc"
55import { ApiHttpProvider } from "./app/api"
66import { DashboardHttpProvider } from "./app/dashboard"
77import { LoginHttpProvider } from "./app/login"
8+ import { ProxyHttpProvider } from "./app/proxy"
89import { StaticHttpProvider } from "./app/static"
910import { UpdateHttpProvider } from "./app/update"
1011import { VscodeHttpProvider } from "./app/vscode"
@@ -25,22 +26,13 @@ const main = async (args: Args): Promise<void> => {
2526 logger . warn ( error . message )
2627 }
2728
28- /**
29- * Domains can be in the form `coder.com` or `*.coder.com`. Either way,
30- * `[number].coder.com` will be proxied to `number`.
31- */
32- const normalizeProxyDomains = ( domains ?: string [ ] ) : string [ ] => {
33- return domains ? domains . map ( ( d ) => d . replace ( / ^ \* \. / , "" ) ) . filter ( ( d , i ) => domains . indexOf ( d ) === i ) : [ ]
34- }
35-
3629 // Spawn the main HTTP server.
3730 const options : HttpServerOptions = {
3831 auth,
3932 commit : commit || "development" ,
4033 host : args . host || ( args . auth === AuthType . Password && typeof args . cert !== "undefined" ? "0.0.0.0" : "localhost" ) ,
4134 password : originalPassword ? hash ( originalPassword ) : undefined ,
4235 port : typeof args . port !== "undefined" ? args . port : process . env . PORT ? parseInt ( process . env . PORT , 10 ) : 8080 ,
43- proxyDomains : normalizeProxyDomains ( args [ "proxy-domain" ] ) ,
4436 socket : args . socket ,
4537 ...( args . cert && ! args . cert . value
4638 ? await generateCertificate ( )
@@ -54,13 +46,23 @@ const main = async (args: Args): Promise<void> => {
5446 throw new Error ( "--cert-key is missing" )
5547 }
5648
49+ /**
50+ * Domains can be in the form `coder.com` or `*.coder.com`. Either way,
51+ * `[number].coder.com` will be proxied to `number`.
52+ */
53+ const proxyDomains = args [ "proxy-domain" ]
54+ ? args [ "proxy-domain" ] . map ( ( d ) => d . replace ( / ^ \* \. / , "" ) ) . filter ( ( d , i , arr ) => arr . indexOf ( d ) === i )
55+ : [ ]
56+
5757 const httpServer = new HttpServer ( options )
5858 const vscode = httpServer . registerHttpProvider ( "/" , VscodeHttpProvider , args )
5959 const api = httpServer . registerHttpProvider ( "/api" , ApiHttpProvider , httpServer , vscode , args [ "user-data-dir" ] )
6060 const update = httpServer . registerHttpProvider ( "/update" , UpdateHttpProvider , ! args [ "disable-updates" ] )
61+ const proxy = httpServer . registerHttpProvider ( "/proxy" , ProxyHttpProvider , proxyDomains )
6162 httpServer . registerHttpProvider ( "/login" , LoginHttpProvider )
6263 httpServer . registerHttpProvider ( "/static" , StaticHttpProvider )
6364 httpServer . registerHttpProvider ( "/dashboard" , DashboardHttpProvider , api , update )
65+ httpServer . registerProxy ( proxy )
6466
6567 ipcMain ( ) . onDispose ( ( ) => httpServer . dispose ( ) )
6668
@@ -107,13 +109,11 @@ const main = async (args: Args): Promise<void> => {
107109 logger . info ( " - Not serving HTTPS" )
108110 }
109111
110- if ( options . proxyDomains && options . proxyDomains . length === 1 ) {
111- logger . info ( ` - Proxying *.${ options . proxyDomains [ 0 ] } ` )
112- } else if ( options . proxyDomains && options . proxyDomains . length > 1 ) {
112+ if ( proxyDomains . length === 1 ) {
113+ logger . info ( ` - Proxying *.${ proxyDomains [ 0 ] } ` )
114+ } else if ( proxyDomains && proxyDomains . length > 1 ) {
113115 logger . info ( " - Proxying the following domains:" )
114- options . proxyDomains . forEach ( ( domain ) => {
115- logger . info ( ` - *.${ domain } ` )
116- } )
116+ proxyDomains . forEach ( ( domain ) => logger . info ( ` - *.${ domain } ` ) )
117117 }
118118
119119 logger . info ( `Automatic updates are ${ update . enabled ? "enabled" : "disabled" } ` )
0 commit comments