@@ -2,6 +2,7 @@ package authzquery
2
2
3
3
import (
4
4
"context"
5
+ "encoding/json"
5
6
6
7
"github.com/google/uuid"
7
8
"golang.org/x/xerrors"
@@ -51,7 +52,8 @@ func (q *AuthzQuerier) UpdateProvisionerJobWithCancelByID(ctx context.Context, a
51
52
return err
52
53
}
53
54
case database .ProvisionerJobTypeTemplateVersionDryRun , database .ProvisionerJobTypeTemplateVersionImport :
54
- templateVersion , err := q .database .GetTemplateVersionByJobID (ctx , arg .ID )
55
+ // Authorized call to get template version.
56
+ templateVersion , err := authorizedTemplateVersionFromJob (ctx , q , job )
55
57
if err != nil {
56
58
return err
57
59
}
@@ -91,9 +93,9 @@ func (q *AuthzQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID)
91
93
if err != nil {
92
94
return database.ProvisionerJob {}, err
93
95
}
94
- case database .ProvisionerJobTypeTemplateVersionImport , database .ProvisionerJobTypeTemplateVersionDryRun :
96
+ case database .ProvisionerJobTypeTemplateVersionDryRun , database .ProvisionerJobTypeTemplateVersionImport :
95
97
// Authorized call to get template version.
96
- _ , err := q . GetTemplateVersionByJobID (ctx , id )
98
+ _ , err := authorizedTemplateVersionFromJob (ctx , q , job )
97
99
if err != nil {
98
100
return database.ProvisionerJob {}, err
99
101
}
@@ -103,3 +105,33 @@ func (q *AuthzQuerier) GetProvisionerJobByID(ctx context.Context, id uuid.UUID)
103
105
104
106
return job , nil
105
107
}
108
+
109
+ func authorizedTemplateVersionFromJob (ctx context.Context , q * AuthzQuerier , job database.ProvisionerJob ) (database.TemplateVersion , error ) {
110
+ switch job .Type {
111
+ case database .ProvisionerJobTypeTemplateVersionDryRun :
112
+ // TODO: This is really unfortunate that we need to inspect the json
113
+ // payload. We should fix this.
114
+ tmp := struct {
115
+ TemplateVersionID uuid.UUID `json:"template_version_id"`
116
+ }{}
117
+ err := json .Unmarshal (job .Input , & tmp )
118
+ if err != nil {
119
+ return database.TemplateVersion {}, xerrors .Errorf ("dry-run unmarshal: %w" , err )
120
+ }
121
+ // Authorized call to get template version.
122
+ tv , err := q .GetTemplateVersionByID (ctx , tmp .TemplateVersionID )
123
+ if err != nil {
124
+ return database.TemplateVersion {}, err
125
+ }
126
+ return tv , nil
127
+ case database .ProvisionerJobTypeTemplateVersionImport :
128
+ // Authorized call to get template version.
129
+ tv , err := q .GetTemplateVersionByJobID (ctx , job .ID )
130
+ if err != nil {
131
+ return database.TemplateVersion {}, err
132
+ }
133
+ return tv , nil
134
+ default :
135
+ return database.TemplateVersion {}, xerrors .Errorf ("unknown job type: %q" , job .Type )
136
+ }
137
+ }
0 commit comments