Authenticate Handler API and SDK, and much more (#183)

This commit is contained in:
Todd Knight authored and GitHub committed 2020-07-14 17:32:47 -04:00
1 parent acce195dcb
commit 28dbcd84bd
89 files changed
+5296 -1943

No files matched your search

+86 -117
View File
@@ -12,150 +12,119 @@ type structInfo struct {
parentName string
detailName string
templateType templateType
nameJsonMap map[string]string
}
var inputStructs = []*structInfo{
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/error.pb.go",
"Error",
os.Getenv("GEN_BASEPATH") + "/api/error.gen.go",
"Error",
"api",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/error.pb.go",
inName: "Error",
outFile: os.Getenv("GEN_BASEPATH") + "/api/error.gen.go",
outName: "Error",
outPkg: "api",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/error.pb.go",
"ErrorDetails",
os.Getenv("GEN_BASEPATH") + "/api/error_details.gen.go",
"ErrorDetails",
"api",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/error.pb.go",
inName: "ErrorDetails",
outFile: os.Getenv("GEN_BASEPATH") + "/api/error_details.gen.go",
outName: "ErrorDetails",
outPkg: "api",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/error.pb.go",
"FieldError",
os.Getenv("GEN_BASEPATH") + "/api/field_error.gen.go",
"FieldError",
"api",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/error.pb.go",
inName: "FieldError",
outFile: os.Getenv("GEN_BASEPATH") + "/api/field_error.gen.go",
outName: "FieldError",
outPkg: "api",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host.pb.go",
"Host",
os.Getenv("GEN_BASEPATH") + "/api/hosts/host.gen.go",
"Host",
"hosts",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host.pb.go",
inName: "Host",
outFile: os.Getenv("GEN_BASEPATH") + "/api/hosts/host.gen.go",
outName: "Host",
outPkg: "hosts",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host_set.pb.go",
"HostSet",
os.Getenv("GEN_BASEPATH") + "/api/hosts/host_set.gen.go",
"HostSet",
"hosts",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host_set.pb.go",
inName: "HostSet",
outFile: os.Getenv("GEN_BASEPATH") + "/api/hosts/host_set.gen.go",
outName: "HostSet",
outPkg: "hosts",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host_catalog.pb.go",
"HostCatalog",
os.Getenv("GEN_BASEPATH") + "/api/hosts/host_catalog.gen.go",
"HostCatalog",
"hosts",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host_catalog.pb.go",
inName: "HostCatalog",
outFile: os.Getenv("GEN_BASEPATH") + "/api/hosts/host_catalog.gen.go",
outName: "HostCatalog",
outPkg: "hosts",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/scopes/org.pb.go",
"Org",
os.Getenv("GEN_BASEPATH") + "/api/scopes/org.gen.go",
"Org",
"scopes",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/scopes/org.pb.go",
inName: "Org",
outFile: os.Getenv("GEN_BASEPATH") + "/api/scopes/org.gen.go",
outName: "Org",
outPkg: "scopes",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/scopes/project.pb.go",
"Project",
os.Getenv("GEN_BASEPATH") + "/api/scopes/project.gen.go",
"Project",
"scopes",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/authtokens/authtoken.pb.go",
inName: "AuthToken",
outFile: os.Getenv("GEN_BASEPATH") + "/api/authtokens/authtoken.gen.go",
outName: "AuthToken",
outPkg: "authtokens",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/users/user.pb.go",
"User",
os.Getenv("GEN_BASEPATH") + "/api/users/user.gen.go",
"User",
"users",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/scopes/project.pb.go",
inName: "Project",
outFile: os.Getenv("GEN_BASEPATH") + "/api/scopes/project.gen.go",
outName: "Project",
outPkg: "scopes",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/groups/group.pb.go",
"Group",
os.Getenv("GEN_BASEPATH") + "/api/groups/group.gen.go",
"Group",
"groups",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/users/user.pb.go",
inName: "User",
outFile: os.Getenv("GEN_BASEPATH") + "/api/users/user.gen.go",
outName: "User",
outPkg: "users",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/roles/role.pb.go",
"Role",
os.Getenv("GEN_BASEPATH") + "/api/roles/role.gen.go",
"Role",
"roles",
"",
"",
"",
templateTypeResource,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/groups/group.pb.go",
inName: "Group",
outFile: os.Getenv("GEN_BASEPATH") + "/api/groups/group.gen.go",
outName: "Group",
outPkg: "groups",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host_catalog.pb.go",
"StaticHostCatalogDetails",
os.Getenv("GEN_BASEPATH") + "/api/hosts/static_host_catalog.gen.go",
"StaticHostCatalogDetails",
"hosts",
"",
"HostCatalog",
"StaticHostCatalog",
templateTypeDetail,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/roles/role.pb.go",
inName: "Role",
outFile: os.Getenv("GEN_BASEPATH") + "/api/roles/role.gen.go",
outName: "Role",
outPkg: "roles",
},
{
os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host_catalog.pb.go",
"AwsEc2HostCatalogDetails",
os.Getenv("GEN_BASEPATH") + "/api/hosts/awsec2_host_catalog.gen.go",
"AwsEc2HostCatalogDetails",
"hosts",
"",
"HostCatalog",
"AwsEc2HostCatalog",
templateTypeDetail,
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/roles/role.pb.go",
inName: "Principal",
outFile: os.Getenv("GEN_BASEPATH") + "/api/roles/principal.gen.go",
outName: "Principal",
outPkg: "roles",
},
{
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host_catalog.pb.go",
inName: "StaticHostCatalogDetails",
outFile: os.Getenv("GEN_BASEPATH") + "/api/hosts/static_host_catalog.gen.go",
outName: "StaticHostCatalogDetails",
outPkg: "hosts",
parentName: "HostCatalog",
detailName: "StaticHostCatalog",
templateType: templateTypeDetail,
},
{
inFile: os.Getenv("GEN_BASEPATH") + "/internal/gen/controller/api/resources/hosts/host_catalog.pb.go",
inName: "AwsEc2HostCatalogDetails",
outFile: os.Getenv("GEN_BASEPATH") + "/api/hosts/awsec2_host_catalog.gen.go",
outName: "AwsEc2HostCatalogDetails",
outPkg: "hosts",
parentName: "HostCatalog",
detailName: "AwsEc2HostCatalog",
templateType: templateTypeDetail,
},
}
+5 -6
View File
@@ -38,6 +38,7 @@ func parsePBs() {
os.Exit(1)
}
inputStruct.nameJsonMap = make(map[string]string)
ast.Walk(visitFn(func(n ast.Node) {
spec, ok := n.(*ast.TypeSpec)
if !ok {
@@ -114,11 +115,6 @@ func parsePBs() {
var selectorExpr *ast.SelectorExpr
switch typ := field.Type.(type) {
case *ast.Ident:
// Id values are immutable and should always exist, so
// don't make it a pointer
if field.Names[0].Name != "Id" {
typ.Name = "*" + typ.Name
}
goto TAGMODIFY
case *ast.ArrayType:
goto TAGMODIFY
@@ -222,7 +218,10 @@ func parsePBs() {
}
TAGMODIFY:
st.Fields.List[i].Tag.Value = "`" + regex.FindString(st.Fields.List[i].Tag.Value) + "`"
tagString := regex.FindString(st.Fields.List[i].Tag.Value)
st.Fields.List[i].Tag.Value = "`" + tagString + "`"
tagString = strings.TrimSuffix(strings.TrimPrefix(tagString, `json:"`), `,omitempty"`)
inputStruct.nameJsonMap[strings.ToLower(field.Names[0].Name)] = tagString
}
}), inAst)
+5 -5
View File
@@ -37,11 +37,6 @@ var readFuncs = map[string][]*readInfo{
targetType: "users.User",
path: "users",
},
{
baseType: "Project",
targetType: "hosts.HostCatalog",
path: "host-catalogs",
},
{
baseType: "Project",
targetType: "groups.Group",
@@ -52,6 +47,11 @@ var readFuncs = map[string][]*readInfo{
targetType: "roles.Role",
path: "roles",
},
{
baseType: "Project",
targetType: "hosts.HostCatalog",
path: "host-catalogs",
},
},
}
+20 -3
View File
@@ -25,10 +25,12 @@ func writeStructTemplates() {
Name string
Package string
StructFields string
NameJsonMap map[string]string
}{
Name: inputStruct.outName,
Package: inputStruct.outPkg,
StructFields: inputStruct.structFields,
NameJsonMap: inputStruct.nameJsonMap,
})
case templateTypeDetail:
@@ -61,11 +63,12 @@ func writeStructTemplates() {
// TODO: Add documentation around SetDefault and how it behaves when the field corresponding to the provided key is already set.
var structTemplate = template.Must(template.New("").Parse(
`// Code generated by "make api"; DO NOT EDIT.
package {{ .Package }}
package {{ .Package }}
import (
"context"
"encoding/json"
"strings"
"github.com/fatih/structs"
@@ -82,11 +85,25 @@ type {{ .Name }} struct {
}
func (s *{{ .Name }}) SetDefault(key string) {
s.defaultFields = strutil.AppendIfMissing(s.defaultFields, key)
lowerKey := strings.ToLower(key)
validMap := {{ printf "%#v" .NameJsonMap }}
for k, v := range validMap {
if k == lowerKey || v == lowerKey {
s.defaultFields = strutil.AppendIfMissing(s.defaultFields, v)
return
}
}
}
func (s *{{ .Name }}) UnsetDefault(key string) {
s.defaultFields = strutil.StrListDelete(s.defaultFields, key)
lowerKey := strings.ToLower(key)
validMap := {{ printf "%#v" .NameJsonMap }}
for k, v := range validMap {
if k == lowerKey || v == lowerKey {
s.defaultFields = strutil.StrListDelete(s.defaultFields, v)
return
}
}
}
func (s {{ .Name }}) MarshalJSON() ([]byte, error) {