Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit af54d5a

Browse files
committed
update insert query format
1 parent d528d2e commit af54d5a

File tree

10 files changed

+152
-80
lines changed

10 files changed

+152
-80
lines changed

coderd/database/dbauthz/dbauthz.go

Lines changed: 44 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -725,11 +725,6 @@ func (q *querier) CleanTailnetTunnels(ctx context.Context) error {
725725
return q.db.CleanTailnetTunnels(ctx)
726726
}
727727

728-
func (q *querier) CreateWorkspaceAgentPortShare(ctx context.Context, arg database.CreateWorkspaceAgentPortShareParams) error {
729-
// TODO: do authz
730-
return q.db.CreateWorkspaceAgentPortShare(ctx, arg)
731-
}
732-
733728
func (q *querier) DeleteAPIKeyByID(ctx context.Context, id string) error {
734729
return deleteQ(q.log, q.auth, q.db.GetAPIKeyByID, q.db.DeleteAPIKeyByID)(ctx, id)
735730
}
@@ -897,7 +892,16 @@ func (q *querier) DeleteTailnetTunnel(ctx context.Context, arg database.DeleteTa
897892
}
898893

899894
func (q *querier) DeleteWorkspaceAgentPortShare(ctx context.Context, arg database.DeleteWorkspaceAgentPortShareParams) error {
900-
// TODO: do authz
895+
w, err := q.db.GetWorkspaceByID(ctx, arg.WorkspaceID)
896+
if err != nil {
897+
return err
898+
}
899+
900+
// deleting a workspace port share is more akin to just updating the workspace.
901+
if err = q.authorizeContext(ctx, rbac.ActionUpdate, w.RBACObject()); err != nil {
902+
return xerrors.Errorf("authorize context: %w", err)
903+
}
904+
901905
return q.db.DeleteWorkspaceAgentPortShare(ctx, arg)
902906
}
903907

@@ -1879,7 +1883,16 @@ func (q *querier) GetWorkspaceAgentMetadata(ctx context.Context, arg database.Ge
18791883
}
18801884

18811885
func (q *querier) GetWorkspaceAgentPortShare(ctx context.Context, arg database.GetWorkspaceAgentPortShareParams) (database.WorkspaceAgentPortShare, error) {
1882-
// TODO: do authz
1886+
w, err := q.db.GetWorkspaceByID(ctx, arg.WorkspaceID)
1887+
if err != nil {
1888+
return database.WorkspaceAgentPortShare{}, err
1889+
}
1890+
1891+
// reading a workspace port share is more akin to just reading the workspace.
1892+
if err = q.authorizeContext(ctx, rbac.ActionRead, w.RBACObject()); err != nil {
1893+
return database.WorkspaceAgentPortShare{}, xerrors.Errorf("authorize context: %w", err)
1894+
}
1895+
18831896
return q.db.GetWorkspaceAgentPortShare(ctx, arg)
18841897
}
18851898

@@ -2395,6 +2408,20 @@ func (q *querier) InsertWorkspaceAgentMetadata(ctx context.Context, arg database
23952408
return q.db.InsertWorkspaceAgentMetadata(ctx, arg)
23962409
}
23972410

2411+
func (q *querier) InsertWorkspaceAgentPortShare(ctx context.Context, arg database.InsertWorkspaceAgentPortShareParams) (database.WorkspaceAgentPortShare, error) {
2412+
w, err := q.db.GetWorkspaceByID(ctx, arg.WorkspaceID)
2413+
if err != nil {
2414+
return database.WorkspaceAgentPortShare{}, err
2415+
}
2416+
2417+
// inserting a workspace port share is more akin to just updating the workspace.
2418+
if err = q.authorizeContext(ctx, rbac.ActionUpdate, w.RBACObject()); err != nil {
2419+
return database.WorkspaceAgentPortShare{}, xerrors.Errorf("authorize context: %w", err)
2420+
}
2421+
2422+
return q.db.InsertWorkspaceAgentPortShare(ctx, arg)
2423+
}
2424+
23982425
func (q *querier) InsertWorkspaceAgentScripts(ctx context.Context, arg database.InsertWorkspaceAgentScriptsParams) ([]database.WorkspaceAgentScript, error) {
23992426
if err := q.authorizeContext(ctx, rbac.ActionCreate, rbac.ResourceSystem); err != nil {
24002427
return []database.WorkspaceAgentScript{}, err
@@ -3023,7 +3050,16 @@ func (q *querier) UpdateWorkspaceAgentMetadata(ctx context.Context, arg database
30233050
}
30243051

30253052
func (q *querier) UpdateWorkspaceAgentPortShare(ctx context.Context, arg database.UpdateWorkspaceAgentPortShareParams) error {
3026-
// TODO: do authz
3053+
w, err := q.db.GetWorkspaceByID(ctx, arg.WorkspaceID)
3054+
if err != nil {
3055+
return err
3056+
}
3057+
3058+
// updating a workspace port share is more akin to just updating the workspace.
3059+
if err = q.authorizeContext(ctx, rbac.ActionUpdate, w.RBACObject()); err != nil {
3060+
return xerrors.Errorf("authorize context: %w", err)
3061+
}
3062+
30273063
return q.db.UpdateWorkspaceAgentPortShare(ctx, arg)
30283064
}
30293065

coderd/database/dbauthz/dbauthz_test.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1601,6 +1601,14 @@ func (s *MethodTestSuite) TestWorkspace() {
16011601
}))
16021602
}
16031603

1604+
func (s *MethodTestSuite) TestWorkspacePortSharing() {
1605+
s.Run("UnfavoriteWorkspace", s.Subtest(func(db database.Store, check *expects) {
1606+
u := dbgen.User(s.T(), db, database.User{})
1607+
ws := dbgen.Workspace(s.T(), db, database.Workspace{OwnerID: u.ID})
1608+
check.Args(ws.ID).Asserts(ws, rbac.ActionUpdate).Returns()
1609+
}))
1610+
}
1611+
16041612
func (s *MethodTestSuite) TestExtraMethods() {
16051613
s.Run("GetProvisionerDaemons", s.Subtest(func(db database.Store, check *expects) {
16061614
d, err := db.UpsertProvisionerDaemon(context.Background(), database.UpsertProvisionerDaemonParams{

coderd/database/dbgen/dbgen.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222
"github.com/coder/coder/v2/coderd/database/provisionerjobs"
2323
"github.com/coder/coder/v2/coderd/database/pubsub"
2424
"github.com/coder/coder/v2/coderd/rbac"
25+
"github.com/coder/coder/v2/codersdk"
2526
"github.com/coder/coder/v2/cryptorand"
2627
)
2728

@@ -134,6 +135,17 @@ func APIKey(t testing.TB, db database.Store, seed database.APIKey) (key database
134135
return key, fmt.Sprintf("%s-%s", key.ID, secret)
135136
}
136137

138+
func WorkspaceAgentPortShare(t testing.TB, db database.Store, orig database.WorkspaceAgentPortShare) database.WorkspaceAgentPortShare {
139+
ps, err := db.InsertWorkspaceAgentPortShare(genCtx, database.InsertWorkspaceAgentPortShareParams{
140+
WorkspaceID: takeFirst(orig.WorkspaceID, uuid.New()),
141+
AgentName: takeFirst(orig.AgentName, namesgenerator.GetRandomName(1)),
142+
Port: takeFirst(orig.Port, 8080),
143+
ShareLevel: takeFirst(orig.ShareLevel, int32(codersdk.WorkspaceAgentPortShareLevelPublic)),
144+
})
145+
require.NoError(t, err, "insert workspace agent")
146+
return ps
147+
}
148+
137149
func WorkspaceAgent(t testing.TB, db database.Store, orig database.WorkspaceAgent) database.WorkspaceAgent {
138150
agt, err := db.InsertWorkspaceAgent(genCtx, database.InsertWorkspaceAgentParams{
139151
ID: takeFirst(orig.ID, uuid.New()),

coderd/database/dbmem/dbmem.go

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,32 +1003,6 @@ func (*FakeQuerier) CleanTailnetTunnels(context.Context) error {
10031003
return ErrUnimplemented
10041004
}
10051005

1006-
func (q *FakeQuerier) CreateWorkspaceAgentPortShare(_ context.Context, arg database.CreateWorkspaceAgentPortShareParams) error {
1007-
err := validateDatabaseType(arg)
1008-
if err != nil {
1009-
return err
1010-
}
1011-
1012-
q.mutex.Lock()
1013-
defer q.mutex.Unlock()
1014-
1015-
for _, share := range q.workspaceAgentPortShares {
1016-
if share.WorkspaceID == arg.WorkspaceID && share.AgentName == arg.AgentName && share.Port == arg.Port {
1017-
return xerrors.New("port share already exists")
1018-
}
1019-
}
1020-
1021-
//nolint:gosimple // I disagree
1022-
q.workspaceAgentPortShares = append(q.workspaceAgentPortShares, database.WorkspaceAgentPortShare{
1023-
WorkspaceID: arg.WorkspaceID,
1024-
AgentName: arg.AgentName,
1025-
Port: arg.Port,
1026-
ShareLevel: arg.ShareLevel,
1027-
})
1028-
1029-
return nil
1030-
}
1031-
10321006
func (q *FakeQuerier) DeleteAPIKeyByID(_ context.Context, id string) error {
10331007
q.mutex.Lock()
10341008
defer q.mutex.Unlock()
@@ -5758,6 +5732,33 @@ func (q *FakeQuerier) InsertWorkspaceAgentMetadata(_ context.Context, arg databa
57585732
return nil
57595733
}
57605734

5735+
func (q *FakeQuerier) InsertWorkspaceAgentPortShare(_ context.Context, arg database.InsertWorkspaceAgentPortShareParams) (database.WorkspaceAgentPortShare, error) {
5736+
err := validateDatabaseType(arg)
5737+
if err != nil {
5738+
return database.WorkspaceAgentPortShare{}, err
5739+
}
5740+
5741+
q.mutex.Lock()
5742+
defer q.mutex.Unlock()
5743+
5744+
for _, share := range q.workspaceAgentPortShares {
5745+
if share.WorkspaceID == arg.WorkspaceID && share.AgentName == arg.AgentName && share.Port == arg.Port {
5746+
return database.WorkspaceAgentPortShare{}, xerrors.New("port share already exists")
5747+
}
5748+
}
5749+
5750+
//nolint:gosimple // casting objects is not a simplification imo.
5751+
ps := database.WorkspaceAgentPortShare{
5752+
WorkspaceID: arg.WorkspaceID,
5753+
AgentName: arg.AgentName,
5754+
Port: arg.Port,
5755+
ShareLevel: arg.ShareLevel,
5756+
}
5757+
q.workspaceAgentPortShares = append(q.workspaceAgentPortShares, ps)
5758+
5759+
return ps, nil
5760+
}
5761+
57615762
func (q *FakeQuerier) InsertWorkspaceAgentScripts(_ context.Context, arg database.InsertWorkspaceAgentScriptsParams) ([]database.WorkspaceAgentScript, error) {
57625763
err := validateDatabaseType(arg)
57635764
if err != nil {

coderd/database/dbmetrics/dbmetrics.go

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

coderd/database/dbmock/dbmock.go

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

coderd/database/querier.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

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

coderd/database/queries/workspaceagentportshare.sql

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
-- name: CreateWorkspaceAgentPortShare :exec
2-
INSERT INTO workspace_agent_port_share (workspace_id, agent_name, port, share_level) VALUES ($1, $2, $3, $4);
1+
-- name: InsertWorkspaceAgentPortShare :one
2+
INSERT INTO workspace_agent_port_share (workspace_id, agent_name, port, share_level) VALUES ($1, $2, $3, $4) RETURNING *;
33

44
-- name: GetWorkspaceAgentPortShare :one
55
SELECT * FROM workspace_agent_port_share WHERE workspace_id = $1 AND agent_name = $2 AND port = $3;

coderd/workspaceportshare.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (api *API) postWorkspaceAgentPortShare(rw http.ResponseWriter, r *http.Requ
9090
return
9191
}
9292

93-
err = api.Database.CreateWorkspaceAgentPortShare(ctx, database.CreateWorkspaceAgentPortShareParams{
93+
_, err = api.Database.InsertWorkspaceAgentPortShare(ctx, database.InsertWorkspaceAgentPortShareParams{
9494
WorkspaceID: workspace.ID,
9595
AgentName: req.AgentName,
9696
Port: req.Port,

0 commit comments

Comments
 (0)