mirror of
https://github.com/coder/coder.git
synced 2025-07-23 21:32:07 +00:00
feat: Validate swagger definitions (#5694)
* docs: audit, deploymentconfig, files, parameters * Swagger comments in workspacebuilds.go * structs in workspacebuilds.go * workspaceagents: instance identity * workspaceagents.go in progress * workspaceagents.go in progress * Agents * workspacebuilds.go * /workspaces * templates.go, templateversions.go * templateversion.go in progress * cancel * templateversions * wip * Merge * x-apidocgen * NullTime hack not needed anymore * Fix: x-apidocgen * Members * Fixes * Fix * WIP * WIP * Users * Logout * User profile * Status suspend activate * User roles * User tokens * Keys * SSH key * All * Typo * Fix * Entitlements * Groups * SCIM * Fix * Fix * Clean templates * Sort API pages * Fix: HashedSecret * WIP * WIP * WIP * Fix: cover workspaceagents * Assert: consistent ID and summary * Assert: success or failure defined * Fix: parallel * Refactor * Support enterprise * Go comment goes to top * Security * assertPathParametersDefined * assertUniqueRoutes * assertRequestBody * More fixes * Fix: exceptions * Fix field format * Address PR comments * Refactor
This commit is contained in:
@ -84,6 +84,7 @@ func validateHexColor(color string) error {
|
||||
// @Summary Update appearance
|
||||
// @ID update-appearance
|
||||
// @Security CoderSessionToken
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Tags Enterprise
|
||||
// @Param request body codersdk.AppearanceConfig true "Update appearance request"
|
||||
|
@ -87,7 +87,7 @@ func New(ctx context.Context, options *Options) (*API, error) {
|
||||
httpmw.ExtractGroupByNameParam(api.Database),
|
||||
)
|
||||
|
||||
r.Get("/", api.group)
|
||||
r.Get("/", api.groupByOrganization)
|
||||
})
|
||||
})
|
||||
r.Route("/organizations/{organization}/provisionerdaemons", func(r chi.Router) {
|
||||
|
20
enterprise/coderd/coderdenttest/swagger_test.go
Normal file
20
enterprise/coderd/coderdenttest/swagger_test.go
Normal file
@ -0,0 +1,20 @@
|
||||
package coderdenttest_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/coder/coder/coderd/coderdtest"
|
||||
"github.com/coder/coder/enterprise/coderd/coderdenttest"
|
||||
)
|
||||
|
||||
func TestEnterpriseEndpointsDocumented(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
swaggerComments, err := coderdtest.ParseSwaggerComments("..", "../../../coderd")
|
||||
require.NoError(t, err, "can't parse swagger comments")
|
||||
|
||||
_, _, api := coderdenttest.NewWithAPI(t, nil)
|
||||
coderdtest.VerifySwaggerDefinitions(t, api.AGPL.APIHandler, swaggerComments)
|
||||
}
|
@ -80,6 +80,14 @@ func (api *API) postGroupByOrganization(rw http.ResponseWriter, r *http.Request)
|
||||
httpapi.Write(ctx, rw, http.StatusCreated, convertGroup(group, nil))
|
||||
}
|
||||
|
||||
// @Summary Update group by name
|
||||
// @ID update-group-by-name
|
||||
// @Security CoderSessionToken
|
||||
// @Produce json
|
||||
// @Tags Enterprise
|
||||
// @Param group path string true "Group name"
|
||||
// @Success 200 {object} codersdk.Group
|
||||
// @Router /groups/{group} [patch]
|
||||
func (api *API) patchGroup(rw http.ResponseWriter, r *http.Request) {
|
||||
var (
|
||||
ctx = r.Context()
|
||||
@ -236,6 +244,14 @@ func (api *API) patchGroup(rw http.ResponseWriter, r *http.Request) {
|
||||
httpapi.Write(ctx, rw, http.StatusOK, convertGroup(group, members))
|
||||
}
|
||||
|
||||
// @Summary Delete group by name
|
||||
// @ID delete-group-by-name
|
||||
// @Security CoderSessionToken
|
||||
// @Produce json
|
||||
// @Tags Enterprise
|
||||
// @Param group path string true "Group name"
|
||||
// @Success 200 {object} codersdk.Group
|
||||
// @Router /groups/{group} [delete]
|
||||
func (api *API) deleteGroup(rw http.ResponseWriter, r *http.Request) {
|
||||
var (
|
||||
ctx = r.Context()
|
||||
@ -274,14 +290,27 @@ func (api *API) deleteGroup(rw http.ResponseWriter, r *http.Request) {
|
||||
})
|
||||
}
|
||||
|
||||
// @Summary Get group by organization and group name
|
||||
// @ID get-group-by-organization-and-group-name
|
||||
// @Security CoderSessionToken
|
||||
// @Produce json
|
||||
// @Tags Enterprise
|
||||
// @Param organization path string true "Organization ID" format(uuid)
|
||||
// @Param groupName path string true "Group name"
|
||||
// @Success 200 {object} codersdk.Group
|
||||
// @Router /organizations/{organization}/groups/{groupName} [get]
|
||||
func (api *API) groupByOrganization(rw http.ResponseWriter, r *http.Request) {
|
||||
api.group(rw, r)
|
||||
}
|
||||
|
||||
// @Summary Get group by name
|
||||
// @ID get-group-by-name
|
||||
// @Security CoderSessionToken
|
||||
// @Produce json
|
||||
// @Tags Enterprise
|
||||
// @Param groupName path string true "Group name"
|
||||
// @Param group path string true "Group name"
|
||||
// @Success 200 {object} codersdk.Group
|
||||
// @Router /groups/{groupName} [get]
|
||||
// @Router /groups/{group} [get]
|
||||
func (api *API) group(rw http.ResponseWriter, r *http.Request) {
|
||||
var (
|
||||
ctx = r.Context()
|
||||
|
@ -52,6 +52,7 @@ var Keys = map[string]ed25519.PublicKey{"2022-08-12": ed25519.PublicKey(key20220
|
||||
// @Summary Add new license
|
||||
// @ID add-new-license
|
||||
// @Security CoderSessionToken
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Tags Organizations
|
||||
// @Param request body codersdk.AddLicenseRequest true "Add license request"
|
||||
@ -178,7 +179,7 @@ func (api *API) licenses(rw http.ResponseWriter, r *http.Request) {
|
||||
// @Tags Enterprise
|
||||
// @Param id path string true "License ID" format(number)
|
||||
// @Success 200
|
||||
// @Router /license/{id} [delete]
|
||||
// @Router /licenses/{id} [delete]
|
||||
func (api *API) deleteLicense(rw http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
if !api.AGPL.Authorize(r, rbac.ActionDelete, rbac.ResourceLicense) {
|
||||
|
@ -94,7 +94,6 @@ func (api *API) provisionerDaemons(rw http.ResponseWriter, r *http.Request) {
|
||||
// @Summary Serve provisioner daemon
|
||||
// @ID serve-provisioner-daemon
|
||||
// @Security CoderSessionToken
|
||||
// @Produce json
|
||||
// @Tags Enterprise
|
||||
// @Param organization path string true "Organization ID" format(uuid)
|
||||
// @Success 101
|
||||
|
@ -49,7 +49,7 @@ func (api *API) scimVerifyAuthHeader(r *http.Request) bool {
|
||||
// @Produce application/scim+json
|
||||
// @Tags Enterprise
|
||||
// @Success 200
|
||||
// @Router /scim/v2/Users [post]
|
||||
// @Router /scim/v2/Users [get]
|
||||
//
|
||||
//nolint:revive
|
||||
func (api *API) scimGetUsers(rw http.ResponseWriter, r *http.Request) {
|
||||
|
@ -103,6 +103,7 @@ func (api *API) templateACL(rw http.ResponseWriter, r *http.Request) {
|
||||
// @Summary Update template ACL
|
||||
// @ID update-template-acl
|
||||
// @Security CoderSessionToken
|
||||
// @Accept json
|
||||
// @Produce json
|
||||
// @Tags Enterprise
|
||||
// @Param template path string true "Template ID" format(uuid)
|
||||
|
Reference in New Issue
Block a user