Skip to content

Commit f691c80

Browse files
authored
Telemetry/Logs: Track requests by sessionType and projectID (#41)
1 parent 2d372be commit f691c80

File tree

9 files changed

+153
-52
lines changed

9 files changed

+153
-52
lines changed

go.mod

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,40 @@ module github.com/0xsequence/authcontrol
33
go 1.23.2
44

55
require (
6-
github.com/go-chi/chi/v5 v5.1.0
6+
github.com/go-chi/chi/v5 v5.2.2
7+
github.com/go-chi/httplog/v3 v3.2.2
78
github.com/go-chi/jwtauth/v5 v5.3.3
9+
github.com/go-chi/metrics v0.1.0
810
github.com/go-chi/traceid v0.2.0
911
github.com/go-chi/transport v0.4.0
1012
github.com/lestrrat-go/jwx/v2 v2.1.3
11-
github.com/stretchr/testify v1.9.0
13+
github.com/stretchr/testify v1.10.0
1214
)
1315

1416
require (
17+
github.com/beorn7/perks v1.0.1 // indirect
18+
github.com/cespare/xxhash/v2 v2.3.0 // indirect
1519
github.com/davecgh/go-spew v1.1.1 // indirect
1620
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect
1721
github.com/goccy/go-json v0.10.3 // indirect
1822
github.com/google/uuid v1.6.0 // indirect
19-
github.com/kr/pretty v0.3.1 // indirect
23+
github.com/kr/text v0.2.0 // indirect
2024
github.com/lestrrat-go/blackmagic v1.0.2 // indirect
2125
github.com/lestrrat-go/httpcc v1.0.1 // indirect
2226
github.com/lestrrat-go/httprc v1.0.6 // indirect
2327
github.com/lestrrat-go/iter v1.0.2 // indirect
2428
github.com/lestrrat-go/option v1.0.1 // indirect
29+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
2530
github.com/pmezard/go-difflib v1.0.0 // indirect
31+
github.com/prometheus/client_golang v1.22.0 // indirect
32+
github.com/prometheus/client_model v0.6.1 // indirect
33+
github.com/prometheus/common v0.62.0 // indirect
34+
github.com/prometheus/procfs v0.15.1 // indirect
2635
github.com/rogpeppe/go-internal v1.12.0 // indirect
2736
github.com/segmentio/asm v1.2.0 // indirect
2837
golang.org/x/crypto v0.31.0 // indirect
2938
golang.org/x/sync v0.10.0 // indirect
30-
golang.org/x/sys v0.28.0 // indirect
31-
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
39+
golang.org/x/sys v0.30.0 // indirect
40+
google.golang.org/protobuf v1.36.5 // indirect
3241
gopkg.in/yaml.v3 v3.0.1 // indirect
3342
)

go.sum

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,39 @@
1+
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
2+
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
3+
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
4+
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
15
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
26
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
37
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
48
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
59
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg=
610
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0=
7-
github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw=
8-
github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8=
11+
github.com/go-chi/chi/v5 v5.2.2 h1:CMwsvRVTbXVytCk1Wd72Zy1LAsAh9GxMmSNWLHCG618=
12+
github.com/go-chi/chi/v5 v5.2.2/go.mod h1:L2yAIGWB3H+phAw1NxKwWM+7eUH/lU8pOMm5hHcoops=
13+
github.com/go-chi/httplog/v3 v3.2.2 h1:G0oYv3YYcikNjijArHFUlqfR78cQNh9fGT43i6StqVc=
14+
github.com/go-chi/httplog/v3 v3.2.2/go.mod h1:N/J1l5l1fozUrqIVuT8Z/HzNeSy8TF2EFyokPLe6y2w=
915
github.com/go-chi/jwtauth/v5 v5.3.3 h1:50Uzmacu35/ZP9ER2Ht6SazwPsnLQ9LRJy6zTZJpHEo=
1016
github.com/go-chi/jwtauth/v5 v5.3.3/go.mod h1:O4QvPRuZLZghl9WvfVaON+ARfGzpD2PBX/QY5vUz7aQ=
17+
github.com/go-chi/metrics v0.1.0 h1:lLE2/43HtiPXrEIRFv6rbXarnta+E7O6C5WUE8Bv9Ho=
18+
github.com/go-chi/metrics v0.1.0/go.mod h1:eRYNXI3HzvDiyHgGaIDTTWEGNT4xnecgs1af7J75XCw=
1119
github.com/go-chi/traceid v0.2.0 h1:M4SVlzbnq6zfNCOvi8LwLFGugY04El+hS8njO0Pwml4=
1220
github.com/go-chi/traceid v0.2.0/go.mod h1:XFfEEYZjqgML4ySh+wYBU29eqJkc2um7oEzgIc63e74=
1321
github.com/go-chi/transport v0.4.0 h1:wKkHHapDbijGz7sGicEqyQIj6KD/LV5+R7H8QrZQMco=
1422
github.com/go-chi/transport v0.4.0/go.mod h1:uoCleTaQiFtoatEiiqcXFZ5OxIp6s1DfGeVsCVbalT4=
1523
github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA=
1624
github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
25+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
26+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
1727
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
1828
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
19-
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
29+
github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
30+
github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
2031
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
2132
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
22-
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
23-
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
2433
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
2534
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
35+
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
36+
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
2637
github.com/lestrrat-go/blackmagic v1.0.2 h1:Cg2gVSc9h7sz9NOByczrbUvLopQmXrfFx//N+AkAr5k=
2738
github.com/lestrrat-go/blackmagic v1.0.2/go.mod h1:UrEqBzIR2U6CnzVyUtfM6oZNMt/7O7Vohk2J0OGSAtU=
2839
github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE=
@@ -35,26 +46,36 @@ github.com/lestrrat-go/jwx/v2 v2.1.3 h1:Ud4lb2QuxRClYAmRleF50KrbKIoM1TddXgBrneT5
3546
github.com/lestrrat-go/jwx/v2 v2.1.3/go.mod h1:q6uFgbgZfEmQrfJfrCo90QcQOcXFMfbI/fO0NqRtvZo=
3647
github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU=
3748
github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I=
38-
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
49+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
50+
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
3951
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
4052
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
41-
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
53+
github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q=
54+
github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0=
55+
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
56+
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
57+
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
58+
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
59+
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
60+
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
4261
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
4362
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
4463
github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
4564
github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
4665
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
4766
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
4867
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
49-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
50-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
68+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
69+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
5170
golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U=
5271
golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk=
5372
golang.org/x/sync v0.4.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
5473
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
5574
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
56-
golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA=
57-
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
75+
golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
76+
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
77+
google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM=
78+
google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
5879
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
5980
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
6081
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

go.work.sum

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,25 @@
11
cloud.google.com/go/compute/metadata v0.3.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
2+
github.com/alecthomas/kingpin/v2 v2.4.0/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE=
3+
github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
24
github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo=
5+
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
6+
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
7+
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
8+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
9+
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
10+
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
311
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
412
github.com/webrpc/gen-typescript v0.16.1/go.mod h1:xQzYnVaSMfcygDXA5SuW8eYyCLHBHkj15wCF7gcJF5Y=
513
github.com/webrpc/webrpc v0.22.0/go.mod h1:eeABnLz9BC4F9GGw6UKebVPkzkFYLrZRlcOvh6o8n10=
14+
github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU=
615
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
716
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
817
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
9-
golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
10-
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
18+
golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4=
19+
golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI=
1120
golang.org/x/sys v0.23.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1221
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
22+
golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
1323
golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0=
1424
golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8=
1525
golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM=

middleware.go

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package authcontrol
22

33
import (
4+
"cmp"
45
"context"
56
"errors"
67
"log/slog"
78
"net/http"
9+
"strconv"
810
"strings"
911
"time"
1012

13+
"github.com/go-chi/chi/v5/middleware"
14+
"github.com/go-chi/httplog/v3"
1115
"github.com/go-chi/jwtauth/v5"
1216
"github.com/lestrrat-go/jwx/v2/jwt"
1317

@@ -138,13 +142,17 @@ func Session(cfg Options) func(next http.Handler) http.Handler {
138142
ctx := r.Context()
139143

140144
// if a custom middleware already sets the session type, skip this middleware
141-
if _, ok := GetSessionType(ctx); ok {
145+
if sessionType, ok := GetSessionType(ctx); ok {
146+
httplog.SetAttrs(ctx, slog.String("sessionType", sessionType.String()))
142147
next.ServeHTTP(w, r)
143148
return
144149
}
145150

146-
sessionType := proto.SessionType_Public
147-
var accessKey string
151+
var (
152+
sessionType = proto.SessionType_Public
153+
accessKey string
154+
projectID uint64
155+
)
148156

149157
for _, f := range cfg.AccessKeyFuncs {
150158
if accessKey = f(r); accessKey != "" {
@@ -171,7 +179,7 @@ func Session(cfg Options) func(next http.Handler) http.Handler {
171179
switch {
172180
case serviceClaim != "":
173181
ctx = WithService(ctx, serviceClaim)
174-
sessionType = proto.SessionType_InternalService
182+
sessionType = proto.SessionType_S2S
175183

176184
case accountClaim != "":
177185
ctx = WithAccount(ctx, accountClaim)
@@ -199,13 +207,18 @@ func Session(cfg Options) func(next http.Handler) http.Handler {
199207
}
200208

201209
if projectClaim > 0 {
202-
ctx = WithProjectID(ctx, uint64(projectClaim))
210+
projectID = uint64(projectClaim)
203211
sessionType = max(sessionType, proto.SessionType_Project)
204212
} else if projectIDClaim > 0 {
205-
ctx = WithProjectID(ctx, uint64(projectIDClaim))
213+
projectID = uint64(projectIDClaim)
206214
sessionType = max(sessionType, proto.SessionType_Project)
207215
}
208216

217+
if projectID > 0 {
218+
ctx = WithProjectID(ctx, projectID)
219+
httplog.SetAttrs(ctx, slog.Uint64("projectId", projectID))
220+
}
221+
209222
// Restrict CORS for Builder Admin API Secret Keys.
210223
// These keys are designed for backend service use by third-party customers, not for web apps.
211224
if accountClaim != "" && projectClaim > 0 {
@@ -215,12 +228,12 @@ func Session(cfg Options) func(next http.Handler) http.Handler {
215228

216229
origin := r.Header.Get("Origin")
217230
if origin != "" {
218-
err := proto.ErrSecretKeyCorsDisallowed.WithCausef("project_id: %v", projectClaim)
231+
err := proto.ErrSecretKeyCorsDisallowed.WithCausef("project_id: %v", projectID)
219232

220233
slog.ErrorContext(ctx, "CORS disallowed for Secret Key",
221234
slog.Any("error", err),
222235
slog.String("origin", origin),
223-
slog.Uint64("project_id", uint64(projectClaim)),
236+
slog.Uint64("project_id", projectID),
224237
)
225238

226239
// TODO: Uncomment once we're confident it won't disrupt major customers.
@@ -236,7 +249,30 @@ func Session(cfg Options) func(next http.Handler) http.Handler {
236249
}
237250

238251
ctx = WithSessionType(ctx, sessionType)
239-
next.ServeHTTP(w, r.WithContext(ctx))
252+
httplog.SetAttrs(ctx, slog.String("sessionType", sessionType.String()))
253+
254+
ww, ok := w.(middleware.WrapResponseWriter)
255+
if !ok {
256+
ww = middleware.NewWrapResponseWriter(w, r.ProtoMajor)
257+
}
258+
259+
defer func() {
260+
// Track requests by session type.
261+
sessionTypeCounter.Inc(sessionLabels{
262+
SessionType: sessionType.String(),
263+
Status: strconv.Itoa(cmp.Or(ww.Status(), 200)),
264+
})
265+
266+
// Track requests by project ID.
267+
if projectID > 0 {
268+
projectCounter.Inc(projectLabels{
269+
ProjectID: strconv.FormatUint(projectID, 10),
270+
Status: strconv.Itoa(cmp.Or(ww.Status(), 200)),
271+
})
272+
}
273+
}()
274+
275+
next.ServeHTTP(ww, r.WithContext(ctx))
240276
})
241277
}
242278
}

proto/authcontrol.gen.go

Lines changed: 11 additions & 11 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

proto/authcontrol.gen.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* eslint-disable */
2-
// authcontrol v0.9.1 6d8f688a98165b12e0ddfa4ecbaeb8bd7d7f92ac
2+
// authcontrol v0.9.1 efc70751a8d3d04b62886c568ebe71265a4e3d5b
33
// --
44
// Code generated by [email protected] with typescript generator. DO NOT EDIT.
55
//
@@ -16,7 +16,7 @@ export const WebRPCVersion = "v1"
1616
export const WebRPCSchemaVersion = "v0.9.1"
1717

1818
// Schema hash generated from your RIDL schema
19-
export const WebRPCSchemaHash = "6d8f688a98165b12e0ddfa4ecbaeb8bd7d7f92ac"
19+
export const WebRPCSchemaHash = "efc70751a8d3d04b62886c568ebe71265a4e3d5b"
2020

2121
type WebrpcGenVersions = {
2222
webrpcGenVersion: string;
@@ -78,7 +78,7 @@ export enum SessionType {
7878
Project = 'Project',
7979
User = 'User',
8080
Admin = 'Admin',
81-
InternalService = 'InternalService'
81+
S2S = 'S2S'
8282
}
8383

8484

proto/authcontrol.ridl

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ name = authcontrol
44
version = v0.9.1
55

66
enum SessionType: uint16
7-
- Public # Public access (anonymous)
8-
- Wallet # Wallet access (wallet signed proof to jwt)
9-
- AccessKey # API access via a project *public* X-Access-Key (no jwt)
10-
- Project # Project access via *private* jwt scoped for the project (jwt)
11-
- User # User-level access (jwt)
12-
- Admin # Admin-level access (jwt)
13-
- InternalService # Internal service-to-service access (jwt)
14-
15-
import "./authcontrol.errors.ridl"
7+
- Public # Public access (anonymous)
8+
- Wallet # Wallet access (wallet signed proof to jwt)
9+
- AccessKey # API access via a project *public* X-Access-Key (no jwt)
10+
- Project # Project access via *private* jwt scoped for the project (jwt)
11+
- User # User-level access (jwt)
12+
- Admin # Admin-level access (jwt)
13+
- S2S # Internal service-to-service access (jwt)
14+
15+
import "./authcontrol.errors.ridl"
16+

proto/proto.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,17 @@
22
//go:generate go run github.com/webrpc/webrpc/cmd/webrpc-gen -schema=authcontrol.ridl -target=typescript -client -out=./authcontrol.gen.ts
33
package proto
44

5-
const SessionType_Max SessionType = SessionType_InternalService + 1
5+
const SessionType_Max SessionType = SessionType_S2S + 1
66

77
// AndUp returns a list of all session types from the current one up to the maximum.
88
func (s SessionType) OrHigher() []SessionType {
9-
list := make([]SessionType, 0, SessionType_InternalService-s+1)
9+
list := make([]SessionType, 0, SessionType_S2S-s+1)
1010
for i := s; i < SessionType_Max; i++ {
1111
list = append(list, i)
1212
}
1313
return list
1414
}
15+
16+
// Deprecated: Use SessionType_S2S instead.
17+
// Note: Remove this after some time.
18+
const SessionType_InternalService = SessionType_S2S

0 commit comments

Comments
 (0)