Skip to content

Commit 999a2a3

Browse files
committed
WIP: Add remote report authorization
1 parent 3e6f8c7 commit 999a2a3

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

cmd/build.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ func getBuildOpts(cmd *cobra.Command) ([]leeway.BuildOption, *leeway.FilesystemC
254254
if ep, err := cmd.Flags().GetString("remote-report"); err != nil {
255255
log.Fatal(err)
256256
} else if ep != "" {
257-
reporter = append(reporter, remotereporter.NewReporter(ep))
257+
reporter = append(reporter, remotereporter.NewReporter(ep, os.Getenv("LEEWAY_REMOTE_REPORT_TOKEN")))
258258
}
259259

260260
dontTest, err := cmd.Flags().GetBool("dont-test")

pkg/remotereporter/reporter.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,21 @@ import (
1515
"github.com/sirupsen/logrus"
1616
)
1717

18-
func NewReporter(endpoint string) *Reporter {
18+
func NewReporter(endpoint, token string) *Reporter {
1919
id, err := uuid.NewRandom()
2020
if err != nil {
2121
panic(fmt.Sprintf("cannot create remote reporting sesison UUID: %v.\nTry running without --remote-report", err))
2222
}
2323

2424
httpclient := &http.Client{Timeout: 2 * time.Second}
25-
client := v1connect.NewReporterServiceClient(httpclient, endpoint)
25+
client := v1connect.NewReporterServiceClient(httpclient, endpoint, connect_go.WithInterceptors(connect_go.UnaryInterceptorFunc(func(uf connect_go.UnaryFunc) connect_go.UnaryFunc {
26+
return func(ctx context.Context, req connect_go.AnyRequest) (connect_go.AnyResponse, error) {
27+
if token != "" {
28+
req.Header().Set("Authorization", token)
29+
}
30+
return uf(ctx, req)
31+
}
32+
})))
2633
return &Reporter{
2734
sessionID: id.String(),
2835
times: make(map[string]time.Time),

tracker/backend/ingestor/main.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"context"
55
"flag"
6+
"fmt"
67
"log"
78
"net/http"
89
"os"
@@ -13,6 +14,7 @@ import (
1314
"github.com/aws/aws-sdk-go-v2/config"
1415
"github.com/aws/aws-sdk-go-v2/service/cloudwatch"
1516
"github.com/awslabs/aws-lambda-go-api-proxy/httpadapter"
17+
"github.com/bufbuild/connect-go"
1618
grpcreflect "github.com/bufbuild/connect-grpcreflect-go"
1719
segment "github.com/segmentio/analytics-go/v3"
1820
"github.com/sirupsen/logrus"
@@ -64,7 +66,15 @@ func main() {
6466
default:
6567
logrus.Fatalf("unsupported --sample-sink: %s", *sink)
6668
}
67-
mux.Handle(v1connect.NewReporterServiceHandler(handler.NewBuildReportHandler(store)))
69+
mux.Handle(v1connect.NewReporterServiceHandler(handler.NewBuildReportHandler(store), connect.WithInterceptors(connect.UnaryInterceptorFunc(func(uf connect.UnaryFunc) connect.UnaryFunc {
70+
return func(ctx context.Context, req connect.AnyRequest) (connect.AnyResponse, error) {
71+
tkn := req.Header().Get("Authorization")
72+
if tkn == "" {
73+
return nil, connect.NewError(connect.CodePermissionDenied, fmt.Errorf("no token present"))
74+
}
75+
return uf(ctx, req)
76+
}
77+
}))))
6878

6979
reflector := grpcreflect.NewStaticReflector(
7080
v1connect.ReporterServiceName,

0 commit comments

Comments
 (0)