Skip to content

Commit 9d87c53

Browse files
authored
Add robots.txt (#2080)
Closes #1886.
1 parent cc5ed1e commit 9d87c53

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

ci/build/build-release.sh

+1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ bundle_code_server() {
3737
rsync src/browser/media/ "$RELEASE_PATH/src/browser/media"
3838
mkdir -p "$RELEASE_PATH/src/browser/pages"
3939
rsync src/browser/pages/*.html "$RELEASE_PATH/src/browser/pages"
40+
rsync src/browser/robots.txt "$RELEASE_PATH/src/browser"
4041

4142
# Adds the commit to package.json
4243
jq --slurp '.[0] * .[1]' package.json <(

src/browser/robots.txt

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
User-agent: *
2+
Disallow: /

src/node/http.ts

+20-10
Original file line numberDiff line numberDiff line change
@@ -289,7 +289,7 @@ export abstract class HttpProvider {
289289
/**
290290
* Helper to error if not authorized.
291291
*/
292-
protected ensureAuthenticated(request: http.IncomingMessage): void {
292+
public ensureAuthenticated(request: http.IncomingMessage): void {
293293
if (!this.authenticated(request)) {
294294
throw new HttpError("Unauthorized", HttpCode.Unauthorized)
295295
}
@@ -647,10 +647,7 @@ export class HttpServer {
647647
}
648648

649649
try {
650-
const payload =
651-
this.maybeRedirect(request, route) ||
652-
(route.provider.authenticated(request) && this.maybeProxy(request)) ||
653-
(await route.provider.handleRequest(route, request))
650+
const payload = (await this.handleRequest(route, request)) || (await route.provider.handleRequest(route, request))
654651
if (payload.proxy) {
655652
this.doProxy(route, request, response, payload.proxy)
656653
} else {
@@ -685,15 +682,23 @@ export class HttpServer {
685682
}
686683

687684
/**
688-
* Return any necessary redirection before delegating to a provider.
685+
* Handle requests that are always in effect no matter what provider is
686+
* registered at the route.
689687
*/
690-
private maybeRedirect(request: http.IncomingMessage, route: ProviderRoute): RedirectResponse | undefined {
688+
private async handleRequest(route: ProviderRoute, request: http.IncomingMessage): Promise<HttpResponse | undefined> {
691689
// If we're handling TLS ensure all requests are redirected to HTTPS.
692690
if (this.options.cert && !(request.connection as tls.TLSSocket).encrypted) {
693691
return { redirect: route.fullPath }
694692
}
695693

696-
return undefined
694+
// Return robots.txt.
695+
if (route.fullPath === "/robots.txt") {
696+
const filePath = path.resolve(__dirname, "../../src/browser/robots.txt")
697+
return { content: await fs.readFile(filePath), filePath }
698+
}
699+
700+
// Handle proxy domains.
701+
return this.maybeProxy(route, request)
697702
}
698703

699704
/**
@@ -744,7 +749,7 @@ export class HttpServer {
744749
// can't be transferred so we need an in-between).
745750
const socketProxy = await this.socketProvider.createProxy(socket)
746751
const payload =
747-
this.maybeProxy(request) || (await route.provider.handleWebSocket(route, request, socketProxy, head))
752+
this.maybeProxy(route, request) || (await route.provider.handleWebSocket(route, request, socketProxy, head))
748753
if (payload && payload.proxy) {
749754
this.doProxy(route, request, { socket: socketProxy, head }, payload.proxy)
750755
}
@@ -894,8 +899,10 @@ export class HttpServer {
894899
*
895900
* For example if `coder.com` is specified `8080.coder.com` will be proxied
896901
* but `8080.test.coder.com` and `test.8080.coder.com` will not.
902+
*
903+
* Throw an error if proxying but the user isn't authenticated.
897904
*/
898-
public maybeProxy(request: http.IncomingMessage): HttpResponse | undefined {
905+
public maybeProxy(route: ProviderRoute, request: http.IncomingMessage): HttpResponse | undefined {
899906
// Split into parts.
900907
const host = request.headers.host || ""
901908
const idx = host.indexOf(":")
@@ -909,6 +916,9 @@ export class HttpServer {
909916
return undefined
910917
}
911918

919+
// Must be authenticated to use the proxy.
920+
route.provider.ensureAuthenticated(request)
921+
912922
return {
913923
proxy: {
914924
port,

0 commit comments

Comments
 (0)