From 2eb8d8fd2f0fc9de7d9b9c02583756cbd3631cd6 Mon Sep 17 00:00:00 2001
From: Heinrich Lee Yu <heinrich@gitlab.com>
Date: Tue, 21 Jan 2020 19:11:08 +0800
Subject: [PATCH] Proxy ActionCable websocket connection

Had to use a simple proxy because the other ResponseWriter
wrappers do not support HiJack and we don't need those for
this route anyway
---
 internal/upstream/routes.go | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/internal/upstream/routes.go b/internal/upstream/routes.go
index f002a8991cc45..196b9a64139c1 100644
--- a/internal/upstream/routes.go
+++ b/internal/upstream/routes.go
@@ -162,6 +162,7 @@ func (u *upstream) configureRoutes() {
 
 	static := &staticpages.Static{DocumentRoot: u.DocumentRoot}
 	proxy := buildProxy(u.Backend, u.Version, u.RoundTripper)
+	simpleProxy := proxypkg.NewProxy(u.Backend, u.Version, u.RoundTripper)
 
 	signingTripper := secret.NewRoundTripper(u.RoundTripper, u.Version)
 	signingProxy := buildProxy(u.Backend, u.Version, signingTripper)
@@ -191,6 +192,9 @@ func (u *upstream) configureRoutes() {
 		route("POST", apiPattern+`v4/jobs/[0-9]+/artifacts\z`, contentEncodingHandler(artifacts.UploadArtifacts(api, signingProxy))),
 		route("POST", ciAPIPattern+`v1/builds/[0-9]+/artifacts\z`, contentEncodingHandler(artifacts.UploadArtifacts(api, signingProxy))),
 
+		// ActionCable websocket
+		wsRoute(`^/-/cable\z`, simpleProxy),
+
 		// Terminal websocket
 		wsRoute(projectPattern+`-/environments/[0-9]+/terminal.ws\z`, channel.Handler(api)),
 		wsRoute(projectPattern+`-/jobs/[0-9]+/terminal.ws\z`, channel.Handler(api)),
-- 
GitLab