@@ -5,6 +5,7 @@ import { CliMessage } from "../../lib/vscode/src/vs/server/ipc"
5
5
import { ApiHttpProvider } from "./app/api"
6
6
import { DashboardHttpProvider } from "./app/dashboard"
7
7
import { LoginHttpProvider } from "./app/login"
8
+ import { ProxyHttpProvider } from "./app/proxy"
8
9
import { StaticHttpProvider } from "./app/static"
9
10
import { UpdateHttpProvider } from "./app/update"
10
11
import { VscodeHttpProvider } from "./app/vscode"
@@ -25,22 +26,13 @@ const main = async (args: Args): Promise<void> => {
25
26
logger . warn ( error . message )
26
27
}
27
28
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
-
36
29
// Spawn the main HTTP server.
37
30
const options : HttpServerOptions = {
38
31
auth,
39
32
commit : commit || "development" ,
40
33
host : args . host || ( args . auth === AuthType . Password && typeof args . cert !== "undefined" ? "0.0.0.0" : "localhost" ) ,
41
34
password : originalPassword ? hash ( originalPassword ) : undefined ,
42
35
port : typeof args . port !== "undefined" ? args . port : process . env . PORT ? parseInt ( process . env . PORT , 10 ) : 8080 ,
43
- proxyDomains : normalizeProxyDomains ( args [ "proxy-domain" ] ) ,
44
36
socket : args . socket ,
45
37
...( args . cert && ! args . cert . value
46
38
? await generateCertificate ( )
@@ -54,13 +46,23 @@ const main = async (args: Args): Promise<void> => {
54
46
throw new Error ( "--cert-key is missing" )
55
47
}
56
48
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
+
57
57
const httpServer = new HttpServer ( options )
58
58
const vscode = httpServer . registerHttpProvider ( "/" , VscodeHttpProvider , args )
59
59
const api = httpServer . registerHttpProvider ( "/api" , ApiHttpProvider , httpServer , vscode , args [ "user-data-dir" ] )
60
60
const update = httpServer . registerHttpProvider ( "/update" , UpdateHttpProvider , ! args [ "disable-updates" ] )
61
+ const proxy = httpServer . registerHttpProvider ( "/proxy" , ProxyHttpProvider , proxyDomains )
61
62
httpServer . registerHttpProvider ( "/login" , LoginHttpProvider )
62
63
httpServer . registerHttpProvider ( "/static" , StaticHttpProvider )
63
64
httpServer . registerHttpProvider ( "/dashboard" , DashboardHttpProvider , api , update )
65
+ httpServer . registerProxy ( proxy )
64
66
65
67
ipcMain ( ) . onDispose ( ( ) => httpServer . dispose ( ) )
66
68
@@ -107,13 +109,11 @@ const main = async (args: Args): Promise<void> => {
107
109
logger . info ( " - Not serving HTTPS" )
108
110
}
109
111
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 ) {
113
115
logger . info ( " - Proxying the following domains:" )
114
- options . proxyDomains . forEach ( ( domain ) => {
115
- logger . info ( ` - *.${ domain } ` )
116
- } )
116
+ proxyDomains . forEach ( ( domain ) => logger . info ( ` - *.${ domain } ` ) )
117
117
}
118
118
119
119
logger . info ( `Automatic updates are ${ update . enabled ? "enabled" : "disabled" } ` )
0 commit comments