Skip to content

Commit 116a38e

Browse files
committed
add codersdk autogen
1 parent 9bd101d commit 116a38e

File tree

8 files changed

+125
-100
lines changed

8 files changed

+125
-100
lines changed

Makefile

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,7 @@ gen: \
486486
$(DB_GEN_FILES) \
487487
site/src/api/typesGenerated.ts \
488488
coderd/rbac/object_gen.go \
489+
codersdk/rbacresources_gen.go \
489490
docs/admin/prometheus.md \
490491
docs/cli.md \
491492
docs/admin/audit-logs.md \
@@ -611,7 +612,10 @@ examples/examples.gen.json: scripts/examplegen/main.go examples/examples.go $(sh
611612
go run ./scripts/examplegen/main.go > examples/examples.gen.json
612613

613614
coderd/rbac/object_gen.go: scripts/rbacgen/main.go coderd/rbac/object.go
614-
go run scripts/rbacgen/main.go ./coderd/rbac > coderd/rbac/object_gen.go
615+
go run scripts/rbacgen/main.go rbac > coderd/rbac/object_gen.go
616+
617+
codersdk/rbacresources_gen.go: scripts/rbacgen/main.go coderd/rbac/object.go
618+
go run scripts/rbacgen/main.go codersdk > codersdk/rbacresources_gen.go
615619

616620
docs/admin/prometheus.md: scripts/metricsdocgen/main.go scripts/metricsdocgen/metrics
617621
go run scripts/metricsdocgen/main.go

coderd/authorize.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ func (api *API) checkAuthorization(rw http.ResponseWriter, r *http.Request) {
169169
obj := rbac.Object{
170170
Owner: v.Object.OwnerID,
171171
OrgID: v.Object.OrganizationID,
172-
Type: v.Object.ResourceType.String(),
172+
Type: string(v.Object.ResourceType),
173173
}
174174
if obj.Owner == "me" {
175175
obj.Owner = auth.ID
@@ -189,7 +189,7 @@ func (api *API) checkAuthorization(rw http.ResponseWriter, r *http.Request) {
189189
var dbObj rbac.Objecter
190190
var dbErr error
191191
// Only support referencing some resources by ID.
192-
switch v.Object.ResourceType.String() {
192+
switch string(v.Object.ResourceType) {
193193
case rbac.ResourceWorkspace.Type:
194194
dbObj, dbErr = api.Database.GetWorkspaceByID(ctx, id)
195195
case rbac.ResourceTemplate.Type:

coderd/rbac/object_gen.go

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

codersdk/rbacresources.go

Lines changed: 0 additions & 77 deletions
This file was deleted.

codersdk/rbacresources_gen.go

Lines changed: 47 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

scripts/rbacgen/codersdk.gotmpl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Code generated by rbacgen/main.go. DO NOT EDIT.
2+
package codersdk
3+
4+
type RBACResource string
5+
6+
const (
7+
{{- range $element := . }}
8+
Resource{{ pascalCaseName $element.FunctionName }} RBACResource = "{{ $element.Type }}"
9+
{{- end }}
10+
)
11+
12+
const (
13+
{{- range $element := actionsList }}
14+
{{ $element.Enum }} = "{{ $element.Value }}"
15+
{{- end }}
16+
)

scripts/rbacgen/main.go

Lines changed: 49 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ package main
22

33
import (
44
"bytes"
5-
"context"
65
_ "embed"
76
"errors"
7+
"flag"
88
"fmt"
99
"go/ast"
1010
"go/format"
@@ -19,17 +19,41 @@ import (
1919
"github.com/coder/coder/v2/coderd/rbac/policy"
2020
)
2121

22-
//go:embed object.gotmpl
23-
var objectGoTpl string
22+
//go:embed rbacobject.gotmpl
23+
var rbacObjectTemplate string
24+
25+
//go:embed codersdk.gotmpl
26+
var codersdkTemplate string
27+
28+
func usage() {
29+
_, _ = fmt.Println("Usage: rbacgen <codersdk|rbac>")
30+
_, _ = fmt.Println("Must choose a template target.")
31+
}
2432

2533
// main will generate a file that lists all rbac objects.
2634
// This is to provide an "AllResources" function that is always
2735
// in sync.
2836
func main() {
29-
ctx, cancel := context.WithCancel(context.Background())
30-
defer cancel()
37+
flag.Parse()
38+
39+
if len(flag.Args()) < 1 {
40+
usage()
41+
os.Exit(1)
42+
}
43+
44+
var source string
45+
switch strings.ToLower(flag.Args()[0]) {
46+
case "codersdk":
47+
source = codersdkTemplate
48+
case "rbac":
49+
source = rbacObjectTemplate
50+
default:
51+
_, _ = fmt.Fprintln(os.Stderr, fmt.Sprintf("%q is not a valid templte target", flag.Args()[0]))
52+
usage()
53+
os.Exit(2)
54+
}
3155

32-
out, err := generate(ctx)
56+
out, err := generateRbacObjects(source)
3357
if err != nil {
3458
log.Fatalf("Generate source: %s", err.Error())
3559
}
@@ -108,25 +132,36 @@ fileDeclLoop:
108132
return actions
109133
}
110134

111-
func generate(ctx context.Context) ([]byte, error) {
135+
type ActionDetails struct {
136+
Enum string
137+
Value string
138+
}
139+
140+
func generateRbacObjects(templateSource string) ([]byte, error) {
112141
// Parse the policy.go file for the action enums
113142
f, err := parser.ParseFile(token.NewFileSet(), "./coderd/rbac/policy/policy.go", nil, parser.ParseComments)
114143
if err != nil {
115144
return nil, fmt.Errorf("parsing policy.go: %w", err)
116145
}
117146
actionMap := fileActions(f)
147+
actionList := make([]ActionDetails, 0)
148+
for value, enum := range actionMap {
149+
actionList = append(actionList, ActionDetails{
150+
Enum: enum,
151+
Value: value,
152+
})
153+
}
154+
slices.SortFunc(actionList, func(a, b ActionDetails) int {
155+
return strings.Compare(a.Enum, b.Enum)
156+
})
118157

119158
var errorList []error
120159
var x int
121160
tpl, err := template.New("object.gotmpl").Funcs(template.FuncMap{
122161
"capitalize": capitalize,
123162
"pascalCaseName": pascalCaseName[string],
124-
"actionsList": func() []string {
125-
tmp := make([]string, 0)
126-
for _, actionEnum := range actionMap {
127-
tmp = append(tmp, actionEnum)
128-
}
129-
return tmp
163+
"actionsList": func() []ActionDetails {
164+
return actionList
130165
},
131166
"actionEnum": func(action policy.Action) string {
132167
x++
@@ -137,7 +172,7 @@ func generate(ctx context.Context) ([]byte, error) {
137172
return v
138173
},
139174
"concat": func(strs ...string) string { return strings.Join(strs, "") },
140-
}).Parse(objectGoTpl)
175+
}).Parse(templateSource)
141176
if err != nil {
142177
return nil, fmt.Errorf("parse template: %w", err)
143178
}

scripts/rbacgen/object.gotmpl renamed to scripts/rbacgen/rbacobject.gotmpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func AllResources() []Objecter {
3333
func AllActions() []policy.Action {
3434
return []policy.Action {
3535
{{- range $element := actionsList }}
36-
policy.{{ $element }},
36+
policy.{{ $element.Enum }},
3737
{{- end }}
3838
}
3939
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy