MCPcopy Index your code
hub / github.com/coder/coder / fetchTemplateVersionDryRunJob

Method fetchTemplateVersionDryRunJob

coderd/templateversions.go:743–805  ·  view source on GitHub ↗
(rw http.ResponseWriter, r *http.Request)

Source from the content-addressed store, hash-verified

741}
742
743func (api *API) fetchTemplateVersionDryRunJob(rw http.ResponseWriter, r *http.Request) (database.GetProvisionerJobsByIDsWithQueuePositionRow, bool) {
744 var (
745 ctx = r.Context()
746 templateVersion = httpmw.TemplateVersionParam(r)
747 jobID = chi.URLParam(r, "jobID")
748 )
749
750 jobUUID, err := uuid.Parse(jobID)
751 if err != nil {
752 httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
753 Message: fmt.Sprintf("Job ID %q must be a valid UUID.", jobID),
754 Detail: err.Error(),
755 })
756 return database.GetProvisionerJobsByIDsWithQueuePositionRow{}, false
757 }
758
759 jobs, err := api.Database.GetProvisionerJobsByIDsWithQueuePosition(ctx, database.GetProvisionerJobsByIDsWithQueuePositionParams{
760 IDs: []uuid.UUID{jobUUID},
761 StaleIntervalMS: provisionerdserver.StaleInterval.Milliseconds(),
762 })
763 if httpapi.Is404Error(err) {
764 httpapi.Write(ctx, rw, http.StatusNotFound, codersdk.Response{
765 Message: fmt.Sprintf("Provisioner job %q not found.", jobUUID),
766 })
767 return database.GetProvisionerJobsByIDsWithQueuePositionRow{}, false
768 }
769 if err != nil || len(jobs) == 0 {
770 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
771 Message: "Internal error fetching provisioner job.",
772 Detail: err.Error(),
773 })
774 return database.GetProvisionerJobsByIDsWithQueuePositionRow{}, false
775 }
776 job := jobs[0]
777 if job.ProvisionerJob.Type != database.ProvisionerJobTypeTemplateVersionDryRun {
778 httpapi.Forbidden(rw)
779 return database.GetProvisionerJobsByIDsWithQueuePositionRow{}, false
780 }
781
782 // Do a workspace resource check since it's basically a workspace dry-run.
783 if !api.Authorize(r, policy.ActionRead,
784 rbac.ResourceWorkspace.InOrg(templateVersion.OrganizationID).WithOwner(job.ProvisionerJob.InitiatorID.String())) {
785 httpapi.Forbidden(rw)
786 return database.GetProvisionerJobsByIDsWithQueuePositionRow{}, false
787 }
788
789 // Verify that the template version is the one used in the request.
790 var input provisionerdserver.TemplateVersionDryRunJob
791 err = json.Unmarshal(job.ProvisionerJob.Input, &input)
792 if err != nil {
793 httpapi.Write(ctx, rw, http.StatusInternalServerError, codersdk.Response{
794 Message: "Internal error unmarshalling job metadata.",
795 Detail: err.Error(),
796 })
797 return database.GetProvisionerJobsByIDsWithQueuePositionRow{}, false
798 }
799 if input.TemplateVersionID != templateVersion.ID {
800 httpapi.Forbidden(rw)

Calls 13

AuthorizeMethod · 0.95
TemplateVersionParamFunction · 0.92
WriteFunction · 0.92
Is404ErrorFunction · 0.92
ForbiddenFunction · 0.92
WithOwnerMethod · 0.80
InOrgMethod · 0.80
ContextMethod · 0.65
ParseMethod · 0.65
ErrorMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected