Remove sendgrid-proxy.
We are unable to use their service.
Bug: skia:13284
Change-Id: I2c33263e9ff46059b80e184c8575298dd2aaa47c
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/540080
Reviewed-by: Leandro Lovisolo <lovisolo@google.com>
Commit-Queue: Joe Gregorio <jcgregorio@google.com>
diff --git a/sendgrid-proxy/Makefile b/sendgrid-proxy/Makefile
deleted file mode 100644
index 55aa404..0000000
--- a/sendgrid-proxy/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-build:
- bazelisk build //sendgrid-proxy/...
-
-# The keys from SendGrid are managed at
-# https://app.sendgrid.com/settings/api_keys.
-#
-# The sendgrid-proxy application only loads the API Key on startup, so if the
-# API Key gets updated make sure to restart all sendgrid-proxy pods.
-update-sendgrid-api-key-secret:
- bazelisk run //kube/go/secrets:secrets -- update skia-public sendgrid-proxy
diff --git a/sendgrid-proxy/go/sendgrid-proxy/BUILD.bazel b/sendgrid-proxy/go/sendgrid-proxy/BUILD.bazel
deleted file mode 100644
index a040d5e..0000000
--- a/sendgrid-proxy/go/sendgrid-proxy/BUILD.bazel
+++ /dev/null
@@ -1,33 +0,0 @@
-load("//bazel/go:go_test.bzl", "go_test")
-load("@io_bazel_rules_go//go:def.bzl", "go_binary", "go_library")
-
-go_library(
- name = "sendgrid-proxy_lib",
- srcs = ["main.go"],
- importpath = "go.skia.org/infra/sendgrid-proxy/go/sendgrid-proxy",
- visibility = ["//visibility:private"],
- deps = [
- "//go/common",
- "//go/httputils",
- "//go/metrics2",
- "//go/secret",
- "//go/sklog",
- ],
-)
-
-go_binary(
- name = "sendgrid-proxy",
- embed = [":sendgrid-proxy_lib"],
- visibility = ["//visibility:public"],
-)
-
-go_test(
- name = "sendgrid-proxy_test",
- srcs = ["main_test.go"],
- embed = [":sendgrid-proxy_lib"],
- deps = [
- "//go/metrics2",
- "//go/testutils/unittest",
- "@com_github_stretchr_testify//require",
- ],
-)
diff --git a/sendgrid-proxy/go/sendgrid-proxy/main.go b/sendgrid-proxy/go/sendgrid-proxy/main.go
deleted file mode 100644
index 41f0655..0000000
--- a/sendgrid-proxy/go/sendgrid-proxy/main.go
+++ /dev/null
@@ -1,81 +0,0 @@
-// A reverse proxy for SendGrid that attaches the SendGrid API Key to every
-// request.
-package main
-
-import (
- "context"
- "flag"
- "fmt"
- "net/http"
- "net/http/httputil"
- "net/url"
-
- "go.skia.org/infra/go/common"
- "go.skia.org/infra/go/httputils"
- "go.skia.org/infra/go/metrics2"
- "go.skia.org/infra/go/secret"
- "go.skia.org/infra/go/sklog"
-)
-
-const (
- secretName = "sendgrid-proxy"
-
- requestsMetricName = "sendgrid_proxy_requests"
- errorsMetricName = "sendgrid_proxy_errors"
-)
-
-var (
- port = flag.String("port", ":8000", "HTTP service address (e.g., ':8000')")
- project = flag.String("project", "skia-public", "The GCP project that contains the API Key in GCP Secret manager.")
- promPort = flag.String("prom_port", ":20000", "Metrics service address (e.g., ':10110')")
- targetURL = flag.String("target_url", "https://api.sendgrid.com", "The URL we are proxying to.")
-)
-
-func newProxy(target *url.URL, sendGridAPIKey string) *httputil.ReverseProxy {
- numRequests := metrics2.GetCounter(requestsMetricName)
- numErrors := metrics2.GetCounter(errorsMetricName)
- authHeaderValue := []string{fmt.Sprintf("Bearer: %s", sendGridAPIKey)}
-
- reverseProxy := httputil.NewSingleHostReverseProxy(target)
- reverseProxy.Director = func(r *http.Request) {
- r.Header["Authorization"] = authHeaderValue
- numRequests.Inc(1)
- }
- reverseProxy.ErrorHandler = func(w http.ResponseWriter, r *http.Request, err error) {
- numErrors.Inc(1)
- httputils.ReportError(w, err, "failed to proxy request", http.StatusInternalServerError)
- }
-
- return reverseProxy
-}
-
-func main() {
- common.InitWithMust(
- "sendmail-proxy",
- common.PrometheusOpt(promPort),
- common.MetricsLoggingOpt(),
- )
-
- ctx := context.Background()
- secretClient, err := secret.NewClient(context.Background())
- if err != nil {
- sklog.Fatal(err)
- }
- sendGridAPIKey, err := secretClient.Get(ctx, *project, secretName, secret.VersionLatest)
- if err != nil {
- sklog.Fatal(err)
- }
- sklog.Infof("SendGrid API Key retrieved.")
-
- u, err := url.Parse(*targetURL)
- if err != nil {
- sklog.Fatal(err)
- }
-
- var h http.Handler = newProxy(u, sendGridAPIKey)
- h = httputils.HealthzAndHTTPS(h)
- http.Handle("/", h)
-
- sklog.Info("Start listening.")
- sklog.Fatal(http.ListenAndServe(*port, nil))
-}
diff --git a/sendgrid-proxy/go/sendgrid-proxy/main_test.go b/sendgrid-proxy/go/sendgrid-proxy/main_test.go
deleted file mode 100644
index 97db972..0000000
--- a/sendgrid-proxy/go/sendgrid-proxy/main_test.go
+++ /dev/null
@@ -1,100 +0,0 @@
-// Reverse proxy that handles SendGrid API requests and adds in the SendGrid API Key.
-package main
-
-import (
- "fmt"
- "net/http"
- "net/http/httptest"
- "net/url"
- "testing"
-
- "github.com/stretchr/testify/require"
- "go.skia.org/infra/go/metrics2"
- "go.skia.org/infra/go/testutils/unittest"
-)
-
-const (
- goodAPIKey = "123456"
- badAPIKey = "654321"
-)
-
-func setupForTest(t *testing.T, h http.HandlerFunc) *url.URL {
- unittest.MediumTest(t)
- // Create a stand-in for the SendGrid server.
- sendGridAPIServer := httptest.NewServer(h)
- t.Cleanup(func() {
- sendGridAPIServer.Close()
- })
-
- metrics2.GetCounter(requestsMetricName).Reset()
- metrics2.GetCounter(errorsMetricName).Reset()
-
- sendGridAPIServerURL, err := url.Parse(sendGridAPIServer.URL)
- require.NoError(t, err)
- return sendGridAPIServerURL
-}
-
-func TestNewProxy_HappyPath(t *testing.T) {
- sendGridAPIServerURL := setupForTest(t, func(w http.ResponseWriter, r *http.Request) {
- require.Equal(t, fmt.Sprintf("Bearer: %s", goodAPIKey), r.Header.Get("Authorization"))
- })
-
- // Create our proxy and point to the server constructed above.
- p := newProxy(sendGridAPIServerURL, goodAPIKey)
-
- // Send it a request.
- r := httptest.NewRequest("POST", sendGridAPIServerURL.String(), nil)
- w := httptest.NewRecorder()
- p.ServeHTTP(w, r)
-
- // A 200 OK response means the Bearer token was passed along correctly.
- require.Equal(t, http.StatusOK, w.Result().StatusCode)
- require.Equal(t, int64(1), metrics2.GetCounter(requestsMetricName).Get())
- require.Equal(t, int64(0), metrics2.GetCounter(errorsMetricName).Get())
-}
-
-func TestNewProxy_BadAPIKey_ResponseIsStatusUnauthorized(t *testing.T) {
- sendGridAPIServerURL := setupForTest(t, func(w http.ResponseWriter, r *http.Request) {
- // Test the test.
- require.Equal(t, fmt.Sprintf("Bearer: %s", badAPIKey), r.Header.Get("Authorization"))
- http.Error(w, "unauthorized", http.StatusUnauthorized)
- })
-
- // Create our proxy and point to the server constructed above.
- p := newProxy(sendGridAPIServerURL, badAPIKey)
-
- // Send it a request.
- r := httptest.NewRequest("POST", sendGridAPIServerURL.String(), nil)
- w := httptest.NewRecorder()
- p.ServeHTTP(w, r)
-
- // Confirm the StatusUnauthorized makes it back to the caller.
- require.Equal(t, http.StatusUnauthorized, w.Result().StatusCode)
- require.Equal(t, int64(1), metrics2.GetCounter(requestsMetricName).Get())
- require.Equal(t, int64(0), metrics2.GetCounter(errorsMetricName).Get())
-}
-
-func TestNewProxy_BadURLForTarget_ReturnsInternalServiceError(t *testing.T) {
- // Call setupForTest to reset the metrics.
- _ = setupForTest(t, nil)
-
- // Start with a bad target URL.
- target := &url.URL{
- Scheme: "http",
- Host: "dummy.tld",
- Path: "/",
- }
-
- // Point proxy to the bad URL.
- p := newProxy(target, goodAPIKey)
-
- // Send it a request.
- r := httptest.NewRequest("POST", target.String(), nil)
- w := httptest.NewRecorder()
- p.ServeHTTP(w, r)
-
- // Confirm StatusInternalServerError and error metric gets incremented.
- require.Equal(t, http.StatusInternalServerError, w.Result().StatusCode)
- require.Equal(t, int64(1), metrics2.GetCounter(requestsMetricName).Get())
- require.Equal(t, int64(1), metrics2.GetCounter(errorsMetricName).Get())
-}