Skip to content

Commit ce1250e

Browse files
committed
Rewrite access tokens to sqlc
1 parent 96d81c4 commit ce1250e

36 files changed

+239
-4470
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
-- name: ValidateEnvBuilds :one
2+
SELECT at.user_id FROM envs e
3+
JOIN users_teams ut on ut.team_id = e.team_id
4+
JOIN access_tokens at on at.user_id = ut.user_id
5+
WHERE at.access_token_hash = $1
6+
AND e.id = @template_id;

packages/db/queries/delete_access_tokens.sql.go

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
-- name: Test_DeleteAccessToken :exec
2+
DELETE FROM "public"."access_tokens"
3+
WHERE user_id = $1;

packages/db/queries/validate_build.sql.go

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

packages/db/sqlc.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
version: "2"
22
sql:
33
- engine: "postgresql"
4-
queries: "queries"
4+
queries: "queries/**"
55
schema: "migrations"
66
gen:
77
go:

packages/docker-reverse-proxy/go.mod

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,25 +4,24 @@ go 1.24.7
44

55
replace github.com/e2b-dev/infra/packages/shared v0.0.0 => ../shared
66

7+
replace github.com/e2b-dev/infra/packages/db v0.0.0 => ../db
8+
79
require (
10+
github.com/e2b-dev/infra/packages/db v0.0.0
811
github.com/e2b-dev/infra/packages/shared v0.0.0
912
github.com/jellydator/ttlcache/v3 v3.4.0
1013
)
1114

1215
require (
13-
ariga.io/atlas v0.15.0 // indirect
14-
entgo.io/ent v0.12.5 // indirect
15-
github.com/agext/levenshtein v1.2.3 // indirect
16-
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
17-
github.com/dchest/uniuri v1.2.0 // indirect
18-
github.com/go-openapi/inflect v0.21.0 // indirect
19-
github.com/go-test/deep v1.0.8 // indirect
20-
github.com/google/go-cmp v0.7.0 // indirect
2116
github.com/google/uuid v1.6.0 // indirect
22-
github.com/hashicorp/hcl/v2 v2.19.1 // indirect
17+
github.com/jackc/pgpassfile v1.0.0 // indirect
18+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
19+
github.com/jackc/pgx/v5 v5.7.4 // indirect
20+
github.com/jackc/puddle/v2 v2.2.2 // indirect
2321
github.com/lib/pq v1.10.9 // indirect
24-
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
25-
github.com/zclconf/go-cty v1.14.1 // indirect
22+
go.uber.org/multierr v1.11.0 // indirect
23+
go.uber.org/zap v1.27.0 // indirect
24+
golang.org/x/crypto v0.42.0 // indirect
2625
golang.org/x/mod v0.27.0 // indirect
2726
golang.org/x/sync v0.17.0 // indirect
2827
golang.org/x/text v0.29.0 // indirect

packages/docker-reverse-proxy/go.sum

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

packages/docker-reverse-proxy/internal/auth/validate.go

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,60 +2,52 @@ package auth
22

33
import (
44
"context"
5+
"database/sql"
56
"encoding/base64"
7+
"errors"
68
"fmt"
79
"log"
810
"strings"
911

12+
"github.com/e2b-dev/infra/packages/db/client"
13+
"github.com/e2b-dev/infra/packages/db/queries"
1014
"github.com/e2b-dev/infra/packages/shared/pkg/keys"
11-
"github.com/e2b-dev/infra/packages/shared/pkg/models"
12-
"github.com/e2b-dev/infra/packages/shared/pkg/models/accesstoken"
13-
"github.com/e2b-dev/infra/packages/shared/pkg/models/env"
14-
"github.com/e2b-dev/infra/packages/shared/pkg/models/envbuild"
15-
"github.com/e2b-dev/infra/packages/shared/pkg/models/user"
1615
)
1716

18-
func Validate(ctx context.Context, db *models.Client, token, envID string) (bool, error) {
17+
func Validate(ctx context.Context, sqlcDB *client.Client, token, envID string) (bool, error) {
1918
hashedToken, err := keys.VerifyKey(keys.AccessTokenPrefix, token)
2019
if err != nil {
2120
return false, err
2221
}
2322

24-
u, err := db.User.Query().Where(user.HasAccessTokensWith(accesstoken.AccessTokenHash(hashedToken))).WithTeams().Only(ctx)
23+
_, err = sqlcDB.ValidateEnvBuilds(ctx, queries.ValidateEnvBuildsParams{
24+
TemplateID: envID,
25+
AccessTokenHash: hashedToken,
26+
})
2527
if err != nil {
26-
return false, err
27-
}
28+
if errors.Is(err, sql.ErrNoRows) {
29+
return false, nil
30+
}
2831

29-
e, err := db.Env.Query().Where(
30-
env.ID(envID),
31-
env.HasBuildsWith(envbuild.StatusEQ(envbuild.StatusWaiting)),
32-
).Only(ctx)
33-
if err != nil {
3432
return false, err
3533
}
3634

37-
for _, team := range u.Edges.Teams {
38-
if team.ID == e.TeamID {
39-
return true, nil
40-
}
41-
}
42-
43-
return false, nil
35+
return true, nil
4436
}
4537

46-
func ValidateAccessToken(ctx context.Context, db *models.Client, accessToken string) bool {
38+
func ValidateAccessToken(ctx context.Context, db *client.Client, accessToken string) bool {
4739
hashedToken, err := keys.VerifyKey(keys.AccessTokenPrefix, accessToken)
4840
if err != nil {
4941
return false
5042
}
5143

52-
exists, err := db.AccessToken.Query().Where(accesstoken.AccessTokenHash(hashedToken)).Exist(ctx)
44+
_, err = db.GetUserIDFromAccessToken(ctx, hashedToken)
5345
if err != nil {
5446
log.Printf("Error while checking access token: %s\n", err.Error())
5547
return false
5648
}
5749

58-
return exists
50+
return true
5951
}
6052

6153
func ExtractAccessToken(authHeader, authType string) (string, error) {

packages/docker-reverse-proxy/internal/handlers/store.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,28 @@
11
package handlers
22

33
import (
4+
"context"
45
"fmt"
56
"io"
67
"log"
78
"net/http"
89
"net/http/httputil"
910
"net/url"
1011

12+
"github.com/e2b-dev/infra/packages/db/client"
1113
"github.com/e2b-dev/infra/packages/docker-reverse-proxy/internal/cache"
1214
"github.com/e2b-dev/infra/packages/shared/pkg/consts"
13-
"github.com/e2b-dev/infra/packages/shared/pkg/db"
1415
)
1516

1617
type APIStore struct {
17-
db *db.DB
18+
db *client.Client
1819
AuthCache *cache.AuthCache
1920
proxy *httputil.ReverseProxy
2021
}
2122

22-
func NewStore() *APIStore {
23+
func NewStore(ctx context.Context) *APIStore {
2324
authCache := cache.New()
24-
database, err := db.NewClient(3, 2)
25+
database, err := client.NewClient(ctx, client.WithMaxConnections(3))
2526
if err != nil {
2627
log.Fatal(err)
2728
}

packages/docker-reverse-proxy/internal/handlers/token.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (a *APIStore) GetToken(w http.ResponseWriter, r *http.Request) error {
3737
return fmt.Errorf("error while extracting access token: %w", err)
3838
}
3939

40-
if !auth.ValidateAccessToken(ctx, a.db.Client, accessToken) {
40+
if !auth.ValidateAccessToken(ctx, a.db, accessToken) {
4141
log.Printf("Invalid access token: '%s'\n", accessToken)
4242

4343
w.WriteHeader(http.StatusForbidden)
@@ -78,7 +78,7 @@ func (a *APIStore) GetToken(w http.ResponseWriter, r *http.Request) error {
7878
}
7979

8080
// Validate if the user has access to the template
81-
hasAccess, err := auth.Validate(ctx, a.db.Client, accessToken, templateID)
81+
hasAccess, err := auth.Validate(ctx, a.db, accessToken, templateID)
8282
if err != nil {
8383
w.WriteHeader(http.StatusInternalServerError)
8484

0 commit comments

Comments
 (0)