Skip to content

Commit fa7baeb

Browse files
authored
fix(coderd): handle rbac.NotAuthorizedError when deleting template (#21645)
Relates to https://github.com/coder/aibridge/pull/143/changes#r2720659638 We previously had been returning the following when attempting to delete failed due to lack of permissions. ``` 500 Internal error deleting template: unauthorized: rbac: forbidden ``` This PR updates the handler to return our usual 403 forbidden response.
1 parent 3398833 commit fa7baeb

2 files changed

Lines changed: 19 additions & 0 deletions

File tree

coderd/templates.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ func (api *API) deleteTemplate(rw http.ResponseWriter, r *http.Request) {
101101
Deleted: true,
102102
UpdatedAt: dbtime.Now(),
103103
})
104+
if dbauthz.IsNotAuthorizedError(err) {
105+
httpapi.Forbidden(rw)
106+
return
107+
}
104108
if err != nil {
105109
httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
106110
Message: "Internal error deleting template.",

coderd/templates_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"github.com/coder/coder/v2/coderd/coderdtest"
1818
"github.com/coder/coder/v2/coderd/database"
1919
"github.com/coder/coder/v2/coderd/database/dbauthz"
20+
"github.com/coder/coder/v2/coderd/database/dbfake"
2021
"github.com/coder/coder/v2/coderd/database/dbgen"
2122
"github.com/coder/coder/v2/coderd/database/dbtestutil"
2223
"github.com/coder/coder/v2/coderd/database/dbtime"
@@ -1753,6 +1754,20 @@ func TestDeleteTemplate(t *testing.T) {
17531754
require.ErrorAs(t, err, &apiErr)
17541755
require.Equal(t, http.StatusBadRequest, apiErr.StatusCode())
17551756
})
1757+
1758+
t.Run("NoPermission", func(t *testing.T) {
1759+
t.Parallel()
1760+
client, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1761+
owner := coderdtest.CreateFirstUser(t, client)
1762+
memberClient, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID)
1763+
tpl := dbfake.TemplateVersion(t, db).Seed(database.TemplateVersion{CreatedBy: owner.UserID, OrganizationID: owner.OrganizationID}).Do()
1764+
1765+
ctx := testutil.Context(t, testutil.WaitShort)
1766+
err := memberClient.DeleteTemplate(ctx, tpl.Template.ID)
1767+
var apiErr *codersdk.Error
1768+
require.ErrorAs(t, err, &apiErr)
1769+
require.Equal(t, http.StatusForbidden, apiErr.StatusCode())
1770+
})
17561771
}
17571772

17581773
func TestTemplateMetrics(t *testing.T) {

0 commit comments

Comments
 (0)