Skip to content

Commit 8036b6b

Browse files
committed
fix interface
1 parent 8629626 commit 8036b6b

File tree

4 files changed

+52
-25
lines changed

4 files changed

+52
-25
lines changed

coderd/portsharing/portsharing.go

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,25 @@
11
package portsharing
22

3+
import (
4+
"golang.org/x/xerrors"
5+
6+
"github.com/coder/coder/v2/coderd/database"
7+
"github.com/coder/coder/v2/codersdk"
8+
)
9+
310
type PortSharer interface {
4-
CanRestrictSharing() bool
11+
AuthorizedPortSharingLevel(template database.Template, level codersdk.WorkspaceAgentPortShareLevel) error
12+
ValidateTemplateMaxPortSharingLevel(level codersdk.WorkspaceAgentPortShareLevel) error
513
}
614

715
type AGPLPortSharer struct{}
816

9-
func (AGPLPortSharer) CanRestrictSharing() bool {
10-
return false
17+
func (AGPLPortSharer) AuthorizedPortSharingLevel(_ database.Template, _ codersdk.WorkspaceAgentPortShareLevel) error {
18+
return nil
19+
}
20+
21+
func (AGPLPortSharer) ValidateTemplateMaxPortSharingLevel(_ codersdk.WorkspaceAgentPortShareLevel) error {
22+
return xerrors.New("Restricting port sharing level is an enterprise feature that is not enabled.")
1123
}
1224

1325
var DefaultPortSharer PortSharer = AGPLPortSharer{}

coderd/templates.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -633,14 +633,12 @@ func (api *API) patchTemplateMeta(rw http.ResponseWriter, r *http.Request) {
633633
}
634634
maxPortShareLevel := template.MaxPortSharingLevel
635635
if req.MaxPortShareLevel != nil {
636-
if req.MaxPortShareLevel.ValidMaxLevel() {
637-
validErrs = append(validErrs, codersdk.ValidationError{Field: "max_port_sharing_level", Detail: "Value must be 'authenticated' or 'public'."})
638-
}
639-
if !portSharer.CanRestrictSharing() {
640-
validErrs = append(validErrs, codersdk.ValidationError{Field: "max_port_sharing_level", Detail: "Restricting port sharing level is an enterprise feature that is not enabled."})
636+
err := portSharer.ValidateTemplateMaxPortSharingLevel(*req.MaxPortShareLevel)
637+
if err != nil {
638+
validErrs = append(validErrs, codersdk.ValidationError{Field: "max_port_sharing_level", Detail: err.Error()})
639+
} else {
640+
maxPortShareLevel = database.AppSharingLevel(*req.MaxPortShareLevel)
641641
}
642-
643-
maxPortShareLevel = database.AppSharingLevel(*req.MaxPortShareLevel)
644642
}
645643

646644
if len(validErrs) > 0 {

coderd/workspaceportshare.go

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package coderd
33
import (
44
"database/sql"
55
"errors"
6-
"fmt"
76
"net/http"
87

98
"github.com/coder/coder/v2/coderd/database"
@@ -37,19 +36,18 @@ func (api *API) postWorkspaceAgentPortShare(rw http.ResponseWriter, r *http.Requ
3736
return
3837
}
3938

40-
if portSharer.CanRestrictSharing() {
41-
template, err := api.Database.GetTemplateByID(ctx, workspace.TemplateID)
42-
if err != nil {
43-
httpapi.InternalServerError(rw, err)
44-
return
45-
}
39+
template, err := api.Database.GetTemplateByID(ctx, workspace.TemplateID)
40+
if err != nil {
41+
httpapi.InternalServerError(rw, err)
42+
return
43+
}
4644

47-
if req.ShareLevel > codersdk.WorkspaceAgentPortShareLevel(template.MaxPortSharingLevel) {
48-
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
49-
Message: fmt.Sprintf("Port sharing level not allowed. Must not be greater than '%s'.", template.MaxPortSharingLevel),
50-
})
51-
return
52-
}
45+
err = portSharer.AuthorizedPortSharingLevel(template, req.ShareLevel)
46+
if err != nil {
47+
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
48+
Message: err.Error(),
49+
})
50+
return
5351
}
5452

5553
agents, err := api.Database.GetWorkspaceAgentsInLatestBuildByWorkspaceID(ctx, workspace.ID)
Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,30 @@
11
package portsharing
22

3+
import (
4+
"golang.org/x/xerrors"
5+
6+
"github.com/coder/coder/v2/coderd/database"
7+
"github.com/coder/coder/v2/codersdk"
8+
)
9+
310
type EnterprisePortSharer struct{}
411

512
func NewEnterprisePortSharer() *EnterprisePortSharer {
613
return &EnterprisePortSharer{}
714
}
815

9-
func (EnterprisePortSharer) CanRestrictSharing() bool {
10-
return true
16+
func (EnterprisePortSharer) AuthorizedPortSharingLevel(template database.Template, level codersdk.WorkspaceAgentPortShareLevel) error {
17+
if level > codersdk.WorkspaceAgentPortShareLevel(template.MaxPortSharingLevel) {
18+
return xerrors.Errorf("port sharing level not allowed. Must not be greater than '%s'", template.MaxPortSharingLevel)
19+
}
20+
21+
return nil
22+
}
23+
24+
func (EnterprisePortSharer) ValidateTemplateMaxPortSharingLevel(level codersdk.WorkspaceAgentPortShareLevel) error {
25+
if !level.ValidMaxLevel() {
26+
return xerrors.New("invalid max port sharing level, value must be 'authenticated' or 'public'.")
27+
}
28+
29+
return nil
1130
}

0 commit comments

Comments
 (0)