Merge BYOW GA branch to main (#2398)
* feat(workers): Add ability to read and reinitialize cert authority (#2312) * feat(workers): Return Release Version on worker list and read (#2377) * feat(cli): Read and reinitialize worker certificate authority (#2387)
This commit is contained in:
1 parent
cee5ff7599
commit
18dff62b7b
50 files changed
+2401
-462
No files matched your search
@@ -4,6 +4,10 @@ Canonical reference for changes, improvements, and bugfixes for Boundary.
|
||||
|
||||
## Next
|
||||
|
||||
### New and Improved
|
||||
* Workers: Added the ability to read and reinitialize the Worker certificate authority ([PR1](https://github.com/hashicorp/boundary/pull/2312), [PR2](https://github.com/hashicorp/boundary/pull/2387))
|
||||
* Workers: Return the worker Boundary binary version on worker list and read ([PR](https://github.com/hashicorp/boundary/pull/2377))
|
||||
|
||||
## 0.10.4 (Unreleased)
|
||||
|
||||
### New and Improved
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// Code generated by "make api"; DO NOT EDIT.
|
||||
package workers
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type Certificate struct {
|
||||
Id string `json:"id,omitempty"`
|
||||
PublicKeySha256 string `json:"public_key_sha256,omitempty"`
|
||||
NotBeforeTime time.Time `json:"not_before_time,omitempty"`
|
||||
NotAfterTime time.Time `json:"not_after_time,omitempty"`
|
||||
}
|
||||
@@ -0,0 +1,25 @@
|
||||
// Code generated by "make api"; DO NOT EDIT.
|
||||
package workers
|
||||
|
||||
import (
|
||||
"github.com/hashicorp/boundary/api"
|
||||
)
|
||||
|
||||
type CertificateAuthority struct {
|
||||
Certs []*Certificate `json:"certs,omitempty"`
|
||||
|
||||
response *api.Response
|
||||
}
|
||||
|
||||
type CertificateAuthorityReadResult struct {
|
||||
Item *CertificateAuthority
|
||||
response *api.Response
|
||||
}
|
||||
|
||||
func (n CertificateAuthorityReadResult) GetItem() *CertificateAuthority {
|
||||
return n.Item
|
||||
}
|
||||
|
||||
func (n CertificateAuthorityReadResult) GetResponse() *api.Response {
|
||||
return n.response
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package workers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
type CertificateAuthorityReinitializeResult = CertificateAuthorityReadResult
|
||||
|
||||
func (c *Client) ReinitializeCA(ctx context.Context, scopeId string, opt ...Option) (*CertificateAuthorityReinitializeResult, error) {
|
||||
if scopeId == "" {
|
||||
return nil, fmt.Errorf("empty scopeId value passed into ReinitializeCA request")
|
||||
}
|
||||
|
||||
opts, apiOpts := getOpts(opt...)
|
||||
|
||||
if c.client == nil {
|
||||
return nil, fmt.Errorf("nil client")
|
||||
}
|
||||
opts.queryMap["scope_id"] = scopeId
|
||||
|
||||
req, err := c.client.NewRequest(ctx, "POST", "workers:reinitialize-certificate-authority", nil, apiOpts...)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error creating ReinitializeCA request: %w", err)
|
||||
}
|
||||
|
||||
if len(opts.queryMap) > 0 {
|
||||
q := url.Values{}
|
||||
for k, v := range opts.queryMap {
|
||||
q.Add(k, v)
|
||||
}
|
||||
req.URL.RawQuery = q.Encode()
|
||||
}
|
||||
|
||||
resp, err := c.client.Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error performing client request during ReinitializeCA call: %w", err)
|
||||
}
|
||||
|
||||
target := new(CertificateAuthorityReinitializeResult)
|
||||
target.Item = new(CertificateAuthority)
|
||||
apiErr, err := resp.Decode(target.Item)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error decoding ReinitializeCA response: %w", err)
|
||||
}
|
||||
if apiErr != nil {
|
||||
return nil, apiErr
|
||||
}
|
||||
target.response = resp
|
||||
return target, nil
|
||||
}
|
||||
|
||||
func (c *Client) ReadCA(ctx context.Context, scopeId string, opt ...Option) (*CertificateAuthorityReadResult, error) {
|
||||
if scopeId == "" {
|
||||
return nil, fmt.Errorf("empty scopeId value passed into ReadCA request")
|
||||
}
|
||||
|
||||
opts, apiOpts := getOpts(opt...)
|
||||
opts.queryMap["scope_id"] = scopeId
|
||||
|
||||
if c.client == nil {
|
||||
return nil, fmt.Errorf("nil client")
|
||||
}
|
||||
|
||||
req, err := c.client.NewRequest(ctx, "GET", "workers:read-certificate-authority", nil, apiOpts...)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error creating ReadCA request: %w", err)
|
||||
}
|
||||
|
||||
if len(opts.queryMap) > 0 {
|
||||
q := url.Values{}
|
||||
for k, v := range opts.queryMap {
|
||||
q.Add(k, v)
|
||||
}
|
||||
req.URL.RawQuery = q.Encode()
|
||||
}
|
||||
|
||||
resp, err := c.client.Do(req)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error performing client request during ReadCA call: %w", err)
|
||||
}
|
||||
|
||||
target := new(CertificateAuthorityReadResult)
|
||||
target.Item = new(CertificateAuthority)
|
||||
apiErr, err := resp.Decode(target.Item)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error decoding ReadCA response: %w", err)
|
||||
}
|
||||
if apiErr != nil {
|
||||
return nil, apiErr
|
||||
}
|
||||
target.response = resp
|
||||
return target, nil
|
||||
}
|
||||
@@ -30,6 +30,7 @@ type Worker struct {
|
||||
ActiveConnectionCount uint32 `json:"active_connection_count,omitempty"`
|
||||
Type string `json:"type,omitempty"`
|
||||
ApiTags map[string][]string `json:"api_tags,omitempty"`
|
||||
ReleaseVersion string `json:"release_version,omitempty"`
|
||||
AuthorizedActions []string `json:"authorized_actions,omitempty"`
|
||||
|
||||
response *api.Response
|
||||
|
||||
@@ -85,4 +85,5 @@ const (
|
||||
WorkerProvidedConfigurationField = "worker_provided_configuration"
|
||||
ActiveConnectionCountField = "active_connection_count"
|
||||
ControllerGeneratedActivationToken = "controller_generated_activation_token"
|
||||
ReleaseVersionField = "release_version"
|
||||
)
|
||||
@@ -25,6 +25,14 @@ import (
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
const (
|
||||
ReadResponseType = "read"
|
||||
UpdateResponseType = "update"
|
||||
CreateResponseType = "create"
|
||||
ListResponseType = "list"
|
||||
DeleteResponseType = "delete"
|
||||
)
|
||||
|
||||
type sliceSubtypeInfo struct {
|
||||
SliceType string
|
||||
VarName string
|
||||
@@ -109,7 +117,7 @@ type structInfo struct {
|
||||
fieldOverrides []fieldInfo
|
||||
|
||||
// createResponseTypes controls for which structs response types are created
|
||||
createResponseTypes bool
|
||||
createResponseTypes []string
|
||||
|
||||
// fieldFilter is a set of field names that will not result in generated API
|
||||
// fields
|
||||
@@ -175,7 +183,7 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
},
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
},
|
||||
// User related resources
|
||||
@@ -203,7 +211,7 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
pluralResourceName: "users",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
},
|
||||
// Group related resources
|
||||
@@ -231,7 +239,7 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
pluralResourceName: "groups",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
},
|
||||
// Role related resources
|
||||
@@ -273,7 +281,7 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
pluralResourceName: "roles",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
},
|
||||
// Auth Methods related resources
|
||||
@@ -332,7 +340,7 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
pluralResourceName: "auth-methods",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
},
|
||||
// Accounts
|
||||
@@ -368,7 +376,7 @@ var inputStructs = []*structInfo{
|
||||
pluralResourceName: "accounts",
|
||||
parentTypeName: "auth-method",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
},
|
||||
// Managed Groups
|
||||
{
|
||||
@@ -400,7 +408,7 @@ var inputStructs = []*structInfo{
|
||||
pluralResourceName: "managed-groups",
|
||||
parentTypeName: "auth-method",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
},
|
||||
// Auth Tokens
|
||||
{
|
||||
@@ -413,7 +421,7 @@ var inputStructs = []*structInfo{
|
||||
listTemplate,
|
||||
},
|
||||
pluralResourceName: "auth-tokens",
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
},
|
||||
// Credentials
|
||||
@@ -459,7 +467,7 @@ var inputStructs = []*structInfo{
|
||||
pluralResourceName: "credential-stores",
|
||||
parentTypeName: "scope",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
fieldOverrides: []fieldInfo{
|
||||
{
|
||||
@@ -501,7 +509,7 @@ var inputStructs = []*structInfo{
|
||||
pluralResourceName: "credential-libraries",
|
||||
parentTypeName: "credential-store",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
},
|
||||
{
|
||||
inProto: &credentials.UsernamePasswordAttributes{},
|
||||
@@ -574,7 +582,7 @@ var inputStructs = []*structInfo{
|
||||
pluralResourceName: "credentials",
|
||||
parentTypeName: "credential-store",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
},
|
||||
|
||||
// Host related resources
|
||||
@@ -625,7 +633,7 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
pluralResourceName: "host-catalogs",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
},
|
||||
{
|
||||
@@ -642,7 +650,7 @@ var inputStructs = []*structInfo{
|
||||
pluralResourceName: "hosts",
|
||||
parentTypeName: "host-catalog",
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
},
|
||||
{
|
||||
inProto: &hosts.StaticHostAttributes{},
|
||||
@@ -673,7 +681,7 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
},
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
},
|
||||
{
|
||||
inProto: &targets.HostSet{},
|
||||
@@ -807,7 +815,7 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
},
|
||||
versionEnabled: true,
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
},
|
||||
{
|
||||
@@ -835,10 +843,19 @@ var inputStructs = []*structInfo{
|
||||
},
|
||||
},
|
||||
pluralResourceName: "sessions",
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
fieldFilter: []string{"private_key"},
|
||||
recursiveListing: true,
|
||||
},
|
||||
{
|
||||
inProto: &workers.Certificate{},
|
||||
outFile: "workers/certificate.gen.go",
|
||||
},
|
||||
{
|
||||
inProto: &workers.CertificateAuthority{},
|
||||
outFile: "workers/certificate_authority.gen.go",
|
||||
createResponseTypes: []string{ReadResponseType},
|
||||
},
|
||||
{
|
||||
inProto: &workers.Worker{},
|
||||
outFile: "workers/worker.gen.go",
|
||||
@@ -890,7 +907,7 @@ var inputStructs = []*structInfo{
|
||||
VarName: "apiTags",
|
||||
},
|
||||
},
|
||||
createResponseTypes: true,
|
||||
createResponseTypes: []string{CreateResponseType, ReadResponseType, UpdateResponseType, DeleteResponseType, ListResponseType},
|
||||
recursiveListing: true,
|
||||
versionEnabled: true,
|
||||
},
|
||||
|
||||
@@ -10,6 +10,7 @@ import (
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"github.com/hashicorp/go-secure-stdlib/strutil"
|
||||
"github.com/iancoleman/strcase"
|
||||
)
|
||||
|
||||
@@ -46,7 +47,7 @@ type templateInput struct {
|
||||
SliceSubtypes map[string]sliceSubtypeInfo
|
||||
ExtraFields []fieldInfo
|
||||
VersionEnabled bool
|
||||
CreateResponseTypes bool
|
||||
CreateResponseTypes []string
|
||||
RecursiveListing bool
|
||||
}
|
||||
|
||||
@@ -570,7 +571,15 @@ func (c *Client) {{ $fullName }}(ctx context.Context, id string, version uint32,
|
||||
{{ end }}
|
||||
`))
|
||||
|
||||
var structTemplate = template.Must(template.New("").Parse(
|
||||
func hasResponseType(types []string, typ string) bool {
|
||||
return strutil.StrListContains(types, typ)
|
||||
}
|
||||
|
||||
var structTemplate = template.Must(template.New("").Funcs(
|
||||
template.FuncMap{
|
||||
"hasResponseType": hasResponseType,
|
||||
},
|
||||
).Parse(
|
||||
fmt.Sprint(`// Code generated by "make api"; DO NOT EDIT.
|
||||
package {{ .Package }}
|
||||
|
||||
@@ -587,14 +596,14 @@ import (
|
||||
|
||||
type {{ .Name }} struct { {{ range .Fields }}
|
||||
{{ .Name }} {{ .FieldType }} `, "`json:\"{{ .ProtoName }},omitempty\"`", `{{ end }}
|
||||
{{ if .CreateResponseTypes }}
|
||||
{{ if ( not ( eq ( len ( .CreateResponseTypes ) ) 0 ) )}}
|
||||
response *api.Response
|
||||
{{ else if ( eq .Name "Error" ) }}
|
||||
response *Response
|
||||
{{ end }}
|
||||
}
|
||||
|
||||
{{ if .CreateResponseTypes }}
|
||||
{{ if ( hasResponseType .CreateResponseTypes "read" ) }}
|
||||
type {{ .Name }}ReadResult struct {
|
||||
Item *{{ .Name }}
|
||||
response *api.Response
|
||||
@@ -607,10 +616,11 @@ func (n {{ .Name }}ReadResult) GetItem() *{{ .Name }} {
|
||||
func (n {{ .Name }}ReadResult) GetResponse() *api.Response {
|
||||
return n.response
|
||||
}
|
||||
{{ end }}
|
||||
{{ if ( hasResponseType .CreateResponseTypes "create" ) }} type {{ .Name }}CreateResult = {{ .Name }}ReadResult {{ end }}
|
||||
{{ if ( hasResponseType .CreateResponseTypes "update" ) }} type {{ .Name }}UpdateResult = {{ .Name }}ReadResult {{ end }}
|
||||
|
||||
type {{ .Name }}CreateResult = {{ .Name }}ReadResult
|
||||
type {{ .Name }}UpdateResult = {{ .Name }}ReadResult
|
||||
|
||||
{{ if ( hasResponseType .CreateResponseTypes "delete" ) }}
|
||||
type {{ .Name }}DeleteResult struct {
|
||||
response *api.Response
|
||||
}
|
||||
@@ -623,7 +633,8 @@ func (n {{ .Name }}DeleteResult) GetItem() interface{} {
|
||||
func (n {{ .Name }}DeleteResult) GetResponse() *api.Response {
|
||||
return n.response
|
||||
}
|
||||
|
||||
{{ end }}
|
||||
{{ if ( hasResponseType .CreateResponseTypes "list" ) }}
|
||||
type {{ .Name }}ListResult struct {
|
||||
Items []*{{ .Name }}
|
||||
response *api.Response
|
||||
|
||||
@@ -1162,6 +1162,23 @@ func initCommands(ui, serverCmdUi cli.Ui, runOpts *RunOptions) {
|
||||
Func: "remove-worker-tags",
|
||||
}, nil
|
||||
},
|
||||
"workers certificate-authority": func() (cli.Command, error) {
|
||||
return &workerscmd.WorkerCACommand{
|
||||
Command: base.NewCommand(ui),
|
||||
}, nil
|
||||
},
|
||||
"workers certificate-authority read": func() (cli.Command, error) {
|
||||
return &workerscmd.WorkerCACommand{
|
||||
Command: base.NewCommand(ui),
|
||||
Func: "read",
|
||||
}, nil
|
||||
},
|
||||
"workers certificate-authority reinitialize": func() (cli.Command, error) {
|
||||
return &workerscmd.WorkerCACommand{
|
||||
Command: base.NewCommand(ui),
|
||||
Func: "reinitialize",
|
||||
}, nil
|
||||
},
|
||||
}
|
||||
|
||||
for _, fn := range extraCommandsFuncs {
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
package workerscmd
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/boundary/api"
|
||||
"github.com/hashicorp/boundary/api/workers"
|
||||
"github.com/hashicorp/boundary/internal/cmd/base"
|
||||
"github.com/hashicorp/boundary/internal/cmd/common"
|
||||
"github.com/hashicorp/go-secure-stdlib/strutil"
|
||||
"github.com/mitchellh/cli"
|
||||
"github.com/mitchellh/go-wordwrap"
|
||||
"github.com/posener/complete"
|
||||
)
|
||||
|
||||
var (
|
||||
_ cli.Command = (*WorkerCACommand)(nil)
|
||||
_ cli.CommandAutocomplete = (*WorkerCACommand)(nil)
|
||||
)
|
||||
|
||||
type WorkerCACommand struct {
|
||||
*base.Command
|
||||
|
||||
Func string
|
||||
}
|
||||
|
||||
func (c *WorkerCACommand) Synopsis() string {
|
||||
switch c.Func {
|
||||
case "read":
|
||||
return wordwrap.WrapString("Read the certificate authority used to authorize Boundary workers", base.TermWidth)
|
||||
case "reinitialize":
|
||||
return wordwrap.WrapString("Reinitialize the certificate authority used to authorize Boundary workers", base.TermWidth)
|
||||
}
|
||||
return wordwrap.WrapString("Manage the certificate authority used to authorize Boundary workers", base.TermWidth)
|
||||
}
|
||||
|
||||
var flagsCertificateAuthority = map[string][]string{
|
||||
"reinitialize": {"scope-id"},
|
||||
"read": {"scope-id"},
|
||||
}
|
||||
|
||||
func (c *WorkerCACommand) Help() string {
|
||||
switch c.Func {
|
||||
case "read":
|
||||
return base.WrapForHelpText([]string{
|
||||
"Usage: boundary workers certificate-authority read",
|
||||
"",
|
||||
" Read the certificate authority used to authorize Boundary workers:",
|
||||
"",
|
||||
` $ boundary workers certificate-authority read`,
|
||||
"",
|
||||
"",
|
||||
}) + c.Flags().Help()
|
||||
case "reinitialize":
|
||||
return base.WrapForHelpText([]string{
|
||||
"Usage: boundary workers certificate-authority reinitialize",
|
||||
"",
|
||||
" Reinitialize the certificate authority used to authorize Boundary workers:",
|
||||
"",
|
||||
` $ boundary workers certificate-authority reinitialize`,
|
||||
"",
|
||||
"",
|
||||
}) + c.Flags().Help()
|
||||
}
|
||||
return base.WrapForHelpText([]string{
|
||||
"Usage: boundary workers certificate-authority [options]",
|
||||
"",
|
||||
" This command allows for management of the certificate authority used to authorize Boundary workers. Example:",
|
||||
"",
|
||||
" Read the current certificate authority:",
|
||||
"",
|
||||
` $ boundary workers certificate-authority read`,
|
||||
"",
|
||||
" Please see the certificate-authority subcommand help for detailed usage information.",
|
||||
"",
|
||||
"",
|
||||
})
|
||||
}
|
||||
|
||||
func (c *WorkerCACommand) Flags() *base.FlagSets {
|
||||
set := c.FlagSet(base.FlagSetHTTP | base.FlagSetClient | base.FlagSetOutputFormat)
|
||||
f := set.NewFlagSet("Worker Certificate Authority Options")
|
||||
common.PopulateCommonFlags(c.Command, f, "certificate authority", flagsCertificateAuthority, c.Func)
|
||||
|
||||
return set
|
||||
}
|
||||
|
||||
func (c *WorkerCACommand) AutocompleteArgs() complete.Predictor {
|
||||
initFlags()
|
||||
return complete.PredictAnything
|
||||
}
|
||||
|
||||
func (c *WorkerCACommand) AutocompleteFlags() complete.Flags {
|
||||
initFlags()
|
||||
return c.Flags().Completions()
|
||||
}
|
||||
|
||||
func (c *WorkerCACommand) checkFuncError(err error) int {
|
||||
if err == nil {
|
||||
return 0
|
||||
}
|
||||
if apiErr := api.AsServerError(err); apiErr != nil {
|
||||
c.PrintApiError(apiErr, fmt.Sprintf("Error from controller when performing certificate authority %s", c.Func))
|
||||
return base.CommandApiError
|
||||
}
|
||||
c.PrintCliError(fmt.Errorf("Error trying to %s certificate authority : %s", c.Func, err.Error()))
|
||||
return base.CommandCliError
|
||||
}
|
||||
|
||||
func (c *WorkerCACommand) printListTable(item *workers.CertificateAuthority) string {
|
||||
if item == nil {
|
||||
return "No certificate authority found"
|
||||
}
|
||||
|
||||
var output []string
|
||||
output = []string{
|
||||
"",
|
||||
"Worker certificate authority information:",
|
||||
}
|
||||
|
||||
for k, ca := range item.Certs {
|
||||
if k > 0 {
|
||||
output = append(output, "")
|
||||
}
|
||||
if ca.Id != "" {
|
||||
output = append(output,
|
||||
fmt.Sprintf(" ID: %s", ca.Id),
|
||||
)
|
||||
} else {
|
||||
output = append(output,
|
||||
fmt.Sprintf(" ID: %s", "(not available)"),
|
||||
)
|
||||
}
|
||||
if ca.PublicKeySha256 != "" {
|
||||
output = append(output,
|
||||
fmt.Sprintf(" Public Key Sha256: %s", ca.PublicKeySha256),
|
||||
)
|
||||
}
|
||||
if !ca.NotBeforeTime.IsZero() {
|
||||
output = append(output,
|
||||
fmt.Sprintf(" Not Before Time: %s", ca.NotBeforeTime),
|
||||
)
|
||||
}
|
||||
if !ca.NotAfterTime.IsZero() {
|
||||
output = append(output,
|
||||
fmt.Sprintf(" Not After Time: %s", ca.NotAfterTime),
|
||||
)
|
||||
}
|
||||
}
|
||||
return base.WrapForHelpText(output)
|
||||
}
|
||||
|
||||
func (c *WorkerCACommand) Run(args []string) int {
|
||||
initFlags()
|
||||
f := c.Flags()
|
||||
|
||||
if err := f.Parse(args); err != nil {
|
||||
c.PrintCliError(err)
|
||||
return base.CommandUserError
|
||||
}
|
||||
|
||||
if strutil.StrListContains(flagsMap[c.Func], "scope-id") {
|
||||
switch c.Func {
|
||||
|
||||
case "read":
|
||||
case "reinitialize":
|
||||
if c.FlagScopeId == "" {
|
||||
c.PrintCliError(errors.New("Scope ID must be passed in via -scope-id or BOUNDARY_SCOPE_ID"))
|
||||
return base.CommandUserError
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
client, err := c.Client()
|
||||
if c.WrapperCleanupFunc != nil {
|
||||
defer func() {
|
||||
if err := c.WrapperCleanupFunc(); err != nil {
|
||||
c.PrintCliError(fmt.Errorf("Error cleaning kms wrapper: %w", err))
|
||||
}
|
||||
}()
|
||||
}
|
||||
if err != nil {
|
||||
c.PrintCliError(fmt.Errorf("Error creating API client: %w", err))
|
||||
return base.CommandCliError
|
||||
}
|
||||
workersClient := workers.NewClient(client)
|
||||
|
||||
var resp *api.Response
|
||||
var item *workers.CertificateAuthority
|
||||
|
||||
switch c.Func {
|
||||
case "":
|
||||
return cli.RunResultHelp
|
||||
case "read":
|
||||
readResult, err := workersClient.ReadCA(c.Context, c.FlagScopeId)
|
||||
if exitCode := c.checkFuncError(err); exitCode > 0 {
|
||||
return exitCode
|
||||
}
|
||||
resp = readResult.GetResponse()
|
||||
item = readResult.GetItem()
|
||||
case "reinitialize":
|
||||
reinitializeResult, err := workersClient.ReinitializeCA(c.Context, c.FlagScopeId)
|
||||
if exitCode := c.checkFuncError(err); exitCode > 0 {
|
||||
return exitCode
|
||||
}
|
||||
resp = reinitializeResult.GetResponse()
|
||||
item = reinitializeResult.GetItem()
|
||||
}
|
||||
|
||||
switch base.Format(c.UI) {
|
||||
case "table":
|
||||
c.UI.Output(c.printListTable(item))
|
||||
|
||||
case "json":
|
||||
if ok := c.PrintJsonItem(resp); !ok {
|
||||
return base.CommandCliError
|
||||
}
|
||||
}
|
||||
|
||||
return base.CommandSuccess
|
||||
}
|
||||
@@ -215,6 +215,11 @@ func (c *Command) printListTable(items []*workers.Worker) string {
|
||||
fmt.Sprintf(" Address: %s", item.Address),
|
||||
)
|
||||
}
|
||||
if item.ReleaseVersion != "" {
|
||||
output = append(output,
|
||||
fmt.Sprintf(" ReleaseVersion: %s", item.ReleaseVersion),
|
||||
)
|
||||
}
|
||||
if !item.LastStatusTime.IsZero() {
|
||||
output = append(output,
|
||||
fmt.Sprintf(" Last Status Time: %s", item.LastStatusTime.Format(time.RFC1123)),
|
||||
@@ -258,6 +263,9 @@ func printItemTable(item *workers.Worker, resp *api.Response) string {
|
||||
if item.Address != "" {
|
||||
nonAttributeMap["Address"] = item.Address
|
||||
}
|
||||
if item.ReleaseVersion != "" {
|
||||
nonAttributeMap["Release Version"] = item.ReleaseVersion
|
||||
}
|
||||
if !item.LastStatusTime.IsZero() {
|
||||
nonAttributeMap["Last Status Time"] = item.LastStatusTime
|
||||
}
|
||||
|
||||
@@ -96,7 +96,8 @@ func (ws *workerServiceServer) Status(ctx context.Context, req *pbs.StatusReques
|
||||
server.WithName(wStat.GetName()),
|
||||
server.WithDescription(wStat.GetDescription()),
|
||||
server.WithAddress(wStat.GetAddress()),
|
||||
server.WithWorkerTags(workerTags...))
|
||||
server.WithWorkerTags(workerTags...),
|
||||
server.WithReleaseVersion(wStat.ReleaseVersion))
|
||||
opts := []server.Option{server.WithUpdateTags(req.GetUpdateTags())}
|
||||
if wStat.GetPublicId() != "" {
|
||||
opts = append(opts, server.WithPublicId(wStat.GetPublicId()))
|
||||
|
||||
@@ -352,7 +352,7 @@ func New(ctx context.Context, conf *Config) (*Controller, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to instantiate worker auth repository: %w", err)
|
||||
}
|
||||
err = server.RotateRoots(ctx, serversRepo)
|
||||
_, err = server.RotateRoots(ctx, serversRepo)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unable to ensure worker auth roots exist: %w", err)
|
||||
}
|
||||
|
||||
@@ -226,7 +226,7 @@ func (c *Controller) registerGrpcServices(s *grpc.Server) error {
|
||||
services.RegisterCredentialLibraryServiceServer(s, cl)
|
||||
}
|
||||
if _, ok := currentServices[services.WorkerService_ServiceDesc.ServiceName]; !ok {
|
||||
ws, err := workers.NewService(c.baseContext, c.ServersRepoFn, c.IamRepoFn)
|
||||
ws, err := workers.NewService(c.baseContext, c.ServersRepoFn, c.IamRepoFn, c.WorkerAuthRepoStorageFn)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to create worker handler service: %w", err)
|
||||
}
|
||||
|
||||
@@ -100,6 +100,8 @@ var globalAuthorizedCollectionActions = map[string]*structpb.ListValue{
|
||||
structpb.NewStringValue("create:controller-led"),
|
||||
structpb.NewStringValue("create:worker-led"),
|
||||
structpb.NewStringValue("list"),
|
||||
structpb.NewStringValue("read-certificate-authority"),
|
||||
structpb.NewStringValue("reinitialize-certificate-authority"),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package workers
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/sha256"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
@@ -56,6 +58,8 @@ var (
|
||||
action.CreateControllerLed,
|
||||
action.CreateWorkerLed,
|
||||
action.List,
|
||||
action.ReadCertificateAuthority,
|
||||
action.ReinitializeCertificateAuthority,
|
||||
}
|
||||
)
|
||||
|
||||
@@ -70,14 +74,17 @@ func init() {
|
||||
type Service struct {
|
||||
pbs.UnsafeWorkerServiceServer
|
||||
|
||||
repoFn common.ServersRepoFactory
|
||||
iamRepoFn common.IamRepoFactory
|
||||
repoFn common.ServersRepoFactory
|
||||
workerAuthFn common.WorkerAuthRepoStorageFactory
|
||||
iamRepoFn common.IamRepoFactory
|
||||
}
|
||||
|
||||
var _ pbs.WorkerServiceServer = (*Service)(nil)
|
||||
|
||||
// NewService returns a worker service which handles worker related requests to boundary.
|
||||
func NewService(ctx context.Context, repo common.ServersRepoFactory, iamRepoFn common.IamRepoFactory) (Service, error) {
|
||||
func NewService(ctx context.Context, repo common.ServersRepoFactory, iamRepoFn common.IamRepoFactory,
|
||||
workerAuthFn common.WorkerAuthRepoStorageFactory,
|
||||
) (Service, error) {
|
||||
const op = "workers.NewService"
|
||||
if repo == nil {
|
||||
return Service{}, errors.New(ctx, errors.InvalidParameter, op, "missing server repository")
|
||||
@@ -85,7 +92,10 @@ func NewService(ctx context.Context, repo common.ServersRepoFactory, iamRepoFn c
|
||||
if iamRepoFn == nil {
|
||||
return Service{}, errors.New(ctx, errors.InvalidParameter, op, "missing iam repository")
|
||||
}
|
||||
return Service{repoFn: repo, iamRepoFn: iamRepoFn}, nil
|
||||
if workerAuthFn == nil {
|
||||
return Service{}, errors.New(ctx, errors.InvalidParameter, op, "missing worker auth repository")
|
||||
}
|
||||
return Service{repoFn: repo, iamRepoFn: iamRepoFn, workerAuthFn: workerAuthFn}, nil
|
||||
}
|
||||
|
||||
// ListWorkers implements the interface pbs.WorkerServiceServer.
|
||||
@@ -448,6 +458,54 @@ func (s Service) RemoveWorkerTags(ctx context.Context, req *pbs.RemoveWorkerTags
|
||||
return &pbs.RemoveWorkerTagsResponse{Item: item}, nil
|
||||
}
|
||||
|
||||
// ReadCertificateAuthority will list the next and current certificates for the worker certificate authority
|
||||
func (s Service) ReadCertificateAuthority(ctx context.Context, req *pbs.ReadCertificateAuthorityRequest) (*pbs.ReadCertificateAuthorityResponse, error) {
|
||||
const op = "workers.(Service).ReadCertificateAuthority"
|
||||
if err := validateReadCaRequest(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
authResults := s.authResult(ctx, req.GetScopeId(), action.ReadCertificateAuthority)
|
||||
if authResults.Error != nil {
|
||||
return nil, authResults.Error
|
||||
}
|
||||
|
||||
caProto, err := s.listCertificateAuthorityFromRepo(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ca := certificateAuthorityToProto(caProto)
|
||||
return &pbs.ReadCertificateAuthorityResponse{Item: ca}, nil
|
||||
}
|
||||
|
||||
// ReinitializeCertificateAuthority will delete and regenerate the next and current certificates for the worker certificate authority
|
||||
func (s Service) ReinitializeCertificateAuthority(ctx context.Context, req *pbs.ReinitializeCertificateAuthorityRequest) (*pbs.ReinitializeCertificateAuthorityResponse, error) {
|
||||
const op = "workers.(Service).ReinitializeCertificateAuthority"
|
||||
if err := validateReinitCaRequest(req); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
authResults := s.authResult(ctx, req.GetScopeId(), action.ReinitializeCertificateAuthority)
|
||||
if authResults.Error != nil {
|
||||
return nil, authResults.Error
|
||||
}
|
||||
|
||||
repo, err := s.workerAuthFn()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
rootCerts, err := server.ReinitializeRoots(ctx, repo)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ca := certificateAuthorityToProto(rootCerts)
|
||||
|
||||
return &pbs.ReinitializeCertificateAuthorityResponse{Item: ca}, nil
|
||||
}
|
||||
|
||||
func (s Service) listFromRepo(ctx context.Context, scopeIds []string) ([]*server.Worker, error) {
|
||||
repo, err := s.repoFn()
|
||||
if err != nil {
|
||||
@@ -633,7 +691,7 @@ func (s Service) authResult(ctx context.Context, id string, a action.Type) auth.
|
||||
var parentId string
|
||||
opts := []auth.Option{auth.WithType(resource.Worker), auth.WithAction(a)}
|
||||
switch a {
|
||||
case action.List, action.CreateWorkerLed, action.CreateControllerLed:
|
||||
case action.List, action.CreateWorkerLed, action.CreateControllerLed, action.ReadCertificateAuthority, action.ReinitializeCertificateAuthority:
|
||||
parentId = id
|
||||
default:
|
||||
w, err := repo.LookupWorker(ctx, id)
|
||||
@@ -652,6 +710,47 @@ func (s Service) authResult(ctx context.Context, id string, a action.Type) auth.
|
||||
return auth.Verify(ctx, opts...)
|
||||
}
|
||||
|
||||
func (s Service) listCertificateAuthorityFromRepo(ctx context.Context) (*types.RootCertificates, error) {
|
||||
repo, err := s.workerAuthFn()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
certs := &types.RootCertificates{Id: server.CaId}
|
||||
err = repo.Load(ctx, certs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return certs, nil
|
||||
}
|
||||
|
||||
func certificateAuthorityToProto(in *types.RootCertificates) *pb.CertificateAuthority {
|
||||
certs := make([]*pb.Certificate, 0)
|
||||
|
||||
current := in.GetCurrent()
|
||||
currentSha := sha256.Sum256(current.PublicKeyPkix)
|
||||
currentCert := &pb.Certificate{
|
||||
Id: string(server.CurrentState),
|
||||
PublicKeySha256: hex.EncodeToString(currentSha[:]),
|
||||
NotBeforeTime: current.NotBefore,
|
||||
NotAfterTime: current.NotAfter,
|
||||
}
|
||||
certs = append(certs, currentCert)
|
||||
|
||||
next := in.GetNext()
|
||||
nextSha := sha256.Sum256(next.PublicKeyPkix)
|
||||
nextCert := &pb.Certificate{
|
||||
Id: string(server.NextState),
|
||||
PublicKeySha256: hex.EncodeToString(nextSha[:]),
|
||||
NotBeforeTime: next.NotBefore,
|
||||
NotAfterTime: next.NotAfter,
|
||||
}
|
||||
certs = append(certs, nextCert)
|
||||
|
||||
return &pb.CertificateAuthority{Certs: certs}
|
||||
}
|
||||
|
||||
func toProto(ctx context.Context, in *server.Worker, opt ...handlers.Option) (*pb.Worker, error) {
|
||||
const op = "workers.toProto"
|
||||
opts := handlers.GetOpts(opt...)
|
||||
@@ -679,6 +778,9 @@ func toProto(ctx context.Context, in *server.Worker, opt ...handlers.Option) (*p
|
||||
if outputFields.Has(globals.UpdatedTimeField) {
|
||||
out.UpdatedTime = in.GetUpdateTime().GetTimestamp()
|
||||
}
|
||||
if outputFields.Has(globals.ReleaseVersionField) {
|
||||
out.ReleaseVersion = in.GetReleaseVersion()
|
||||
}
|
||||
if outputFields.Has(globals.VersionField) {
|
||||
out.Version = in.GetVersion()
|
||||
}
|
||||
@@ -990,3 +1092,26 @@ func validateRemoveTagsRequest(req *pbs.RemoveWorkerTagsRequest) error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func validateReadCaRequest(req *pbs.ReadCertificateAuthorityRequest) error {
|
||||
badFields := map[string]string{}
|
||||
if req.GetScopeId() != scope.Global.String() {
|
||||
badFields["scope_id"] = "Must be 'global' when reading."
|
||||
}
|
||||
if len(badFields) > 0 {
|
||||
return handlers.InvalidArgumentErrorf("Error in provided request.", badFields)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func validateReinitCaRequest(req *pbs.ReinitializeCertificateAuthorityRequest) error {
|
||||
badFields := map[string]string{}
|
||||
if req.GetScopeId() != scope.Global.String() {
|
||||
badFields["scope_id"] = "Must be 'global' when reinitializing certs."
|
||||
}
|
||||
if len(badFields) > 0 {
|
||||
return handlers.InvalidArgumentErrorf("Error in provided request.", badFields)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -73,6 +73,7 @@ func equalTags(t *testing.T, expected map[string]*structpb.ListValue, actual map
|
||||
}
|
||||
|
||||
func TestGet(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
wrap := db.TestWrapper(t)
|
||||
iamRepo := iam.TestRepo(t, conn, wrap)
|
||||
@@ -87,6 +88,12 @@ func TestGet(t *testing.T) {
|
||||
return repo, nil
|
||||
}
|
||||
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, kms)
|
||||
require.NoError(t, err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
kmsWorker := server.TestKmsWorker(t, conn, wrap,
|
||||
server.WithName("test kms worker names"),
|
||||
server.WithDescription("test kms worker description"),
|
||||
@@ -109,6 +116,7 @@ func TestGet(t *testing.T) {
|
||||
ActiveConnectionCount: &wrapperspb.UInt32Value{Value: 0},
|
||||
AuthorizedActions: strutil.StrListDelete(kmsAuthzActions, action.Update.String()),
|
||||
LastStatusTime: kmsWorker.GetLastStatusTime().GetTimestamp(),
|
||||
ReleaseVersion: kmsWorker.ReleaseVersion,
|
||||
CanonicalTags: map[string]*structpb.ListValue{
|
||||
"key": structListValue(t, "val"),
|
||||
},
|
||||
@@ -149,6 +157,7 @@ func TestGet(t *testing.T) {
|
||||
AuthorizedActions: testAuthorizedActions,
|
||||
ActiveConnectionCount: &wrapperspb.UInt32Value{Value: 0},
|
||||
LastStatusTime: pkiWorker.GetLastStatusTime().GetTimestamp(),
|
||||
ReleaseVersion: pkiWorker.ReleaseVersion,
|
||||
CanonicalTags: map[string]*structpb.ListValue{
|
||||
"config": structListValue(t, "test"),
|
||||
},
|
||||
@@ -198,7 +207,7 @@ func TestGet(t *testing.T) {
|
||||
}
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn)
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(t, err, "Couldn't create new worker service.")
|
||||
|
||||
got, err := s.GetWorker(auth.DisabledAuthTestContext(iamRepoFn, tc.scopeId), tc.req)
|
||||
@@ -214,6 +223,7 @@ func TestGet(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestList(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
wrap := db.TestWrapper(t)
|
||||
iamRepo := iam.TestRepo(t, conn, wrap)
|
||||
@@ -226,6 +236,12 @@ func TestList(t *testing.T) {
|
||||
return server.NewRepository(rw, rw, kms)
|
||||
}
|
||||
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, kms)
|
||||
require.NoError(t, err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
var wantKmsWorkers []*pb.Worker
|
||||
for i := 0; i < 10; i++ {
|
||||
w := server.TestKmsWorker(t, conn, wrap, server.WithName(fmt.Sprintf("kms-worker%d", i)))
|
||||
@@ -244,6 +260,7 @@ func TestList(t *testing.T) {
|
||||
Address: w.GetAddress(),
|
||||
Type: KmsWorkerType,
|
||||
LastStatusTime: w.GetLastStatusTime().GetTimestamp(),
|
||||
ReleaseVersion: w.ReleaseVersion,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -263,6 +280,7 @@ func TestList(t *testing.T) {
|
||||
Address: w.GetAddress(),
|
||||
Type: PkiWorkerType,
|
||||
LastStatusTime: w.GetLastStatusTime().GetTimestamp(),
|
||||
ReleaseVersion: w.ReleaseVersion,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -312,7 +330,7 @@ func TestList(t *testing.T) {
|
||||
for _, tc := range cases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
assert, require := assert.New(t), require.New(t)
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn)
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(err, "Couldn't create new worker service.")
|
||||
|
||||
// Test with a non-anon user
|
||||
@@ -359,7 +377,13 @@ func TestDelete(t *testing.T) {
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
s, err := NewService(ctx, repoFn, iamRepoFn)
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, kms)
|
||||
require.NoError(t, err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
s, err := NewService(ctx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(t, err, "Error when getting new worker service.")
|
||||
|
||||
w := server.TestKmsWorker(t, conn, wrap)
|
||||
@@ -426,6 +450,12 @@ func TestUpdate(t *testing.T) {
|
||||
return repo, nil
|
||||
}
|
||||
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, kms)
|
||||
require.NoError(t, err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
wkr := server.TestPkiWorker(t, conn, wrapper,
|
||||
server.WithName("default"),
|
||||
server.WithDescription("default"))
|
||||
@@ -443,7 +473,7 @@ func TestUpdate(t *testing.T) {
|
||||
toMerge := &pbs.UpdateWorkerRequest{
|
||||
Id: wkr.GetPublicId(),
|
||||
}
|
||||
workerService, err := NewService(ctx, repoFn, iamRepoFn)
|
||||
workerService, err := NewService(ctx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(t, err)
|
||||
expectedScope := &scopes.ScopeInfo{Id: scope.Global.String(), Type: scope.Global.String(), Name: scope.Global.String(), Description: "Global Scope"}
|
||||
|
||||
@@ -837,6 +867,12 @@ func TestUpdate_KMS(t *testing.T) {
|
||||
return repo, nil
|
||||
}
|
||||
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, kms)
|
||||
require.NoError(t, err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
wkr := server.TestKmsWorker(t, conn, wrapper,
|
||||
server.WithName("default"),
|
||||
server.WithDescription("default"))
|
||||
@@ -844,7 +880,7 @@ func TestUpdate_KMS(t *testing.T) {
|
||||
toMerge := &pbs.UpdateWorkerRequest{
|
||||
Id: wkr.GetPublicId(),
|
||||
}
|
||||
workerService, err := NewService(ctx, repoFn, iamRepoFn)
|
||||
workerService, err := NewService(ctx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(t, err)
|
||||
|
||||
cases := []struct {
|
||||
@@ -901,7 +937,9 @@ func TestUpdate_KMS(t *testing.T) {
|
||||
|
||||
func TestUpdate_BadVersion(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
rw := db.New(conn)
|
||||
wrapper := db.TestWrapper(t)
|
||||
kms := kms.TestKms(t, conn, wrapper)
|
||||
|
||||
@@ -909,18 +947,21 @@ func TestUpdate_BadVersion(t *testing.T) {
|
||||
iamRepoFn := func() (*iam.Repository, error) {
|
||||
return iamRepo, nil
|
||||
}
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, kms)
|
||||
require.NoError(t, err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
_, proj := iam.TestScopes(t, iamRepo)
|
||||
|
||||
rw := db.New(conn)
|
||||
repo, err := server.NewRepository(rw, rw, kms)
|
||||
require.NoError(t, err, "Couldn't create new worker repo.")
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return repo, nil
|
||||
}
|
||||
ctx := context.Background()
|
||||
|
||||
workerService, err := NewService(ctx, repoFn, iamRepoFn)
|
||||
workerService, err := NewService(ctx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(t, err, "Failed to create a new host set service.")
|
||||
|
||||
wkr := server.TestPkiWorker(t, conn, wrapper)
|
||||
@@ -951,9 +992,15 @@ func TestCreateWorkerLed(t *testing.T) {
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return server.NewRepository(rw, rw, testKms)
|
||||
}
|
||||
testCtx := context.Background()
|
||||
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn)
|
||||
testCtx := context.Background()
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(testCtx, rw, rw, testKms)
|
||||
require.NoError(t, err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(t, err, "Error when getting new worker service.")
|
||||
|
||||
// Get an initial set of authorized node credentials
|
||||
@@ -1205,7 +1252,7 @@ func TestCreateWorkerLed(t *testing.T) {
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return server.NewRepository(rw, &db.Db{}, testKms)
|
||||
}
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn)
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(t, err, "Error when getting new worker service.")
|
||||
return testSrv
|
||||
}(),
|
||||
@@ -1238,7 +1285,7 @@ func TestCreateWorkerLed(t *testing.T) {
|
||||
return server.NewRepository(rw, rw, testKms)
|
||||
}
|
||||
}
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn)
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(t, err, "Error when getting new worker service.")
|
||||
return testSrv
|
||||
}(),
|
||||
@@ -1333,12 +1380,16 @@ func TestCreateControllerLed(t *testing.T) {
|
||||
}
|
||||
testCtx := context.Background()
|
||||
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn)
|
||||
rootStorage, err := server.NewRepositoryStorage(testCtx, rw, rw, testKms)
|
||||
require.NoError(t, err)
|
||||
authRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return rootStorage, nil
|
||||
}
|
||||
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn, authRepoFn)
|
||||
require.NoError(t, err, "Error when getting new worker service.")
|
||||
|
||||
// Get an initial set of authorized node credentials
|
||||
rootStorage, err := server.NewRepositoryStorage(testCtx, rw, rw, testKms)
|
||||
require.NoError(t, err)
|
||||
_, err = rotation.RotateRootCertificates(testCtx, rootStorage)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -1549,7 +1600,7 @@ func TestCreateControllerLed(t *testing.T) {
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return server.NewRepository(rw, &db.Db{}, testKms)
|
||||
}
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn)
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn, authRepoFn)
|
||||
require.NoError(t, err, "Error when getting new worker service.")
|
||||
return testSrv
|
||||
}(),
|
||||
@@ -1581,7 +1632,7 @@ func TestCreateControllerLed(t *testing.T) {
|
||||
return server.NewRepository(rw, rw, testKms)
|
||||
}
|
||||
}
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn)
|
||||
testSrv, err := NewService(testCtx, repoFn, iamRepoFn, authRepoFn)
|
||||
require.NoError(t, err, "Error when getting new worker service.")
|
||||
return testSrv
|
||||
}(),
|
||||
@@ -1664,6 +1715,7 @@ func TestCreateControllerLed(t *testing.T) {
|
||||
|
||||
func TestService_AddWorkerTags(t *testing.T) {
|
||||
t.Parallel()
|
||||
ctx := context.Background()
|
||||
assert, require := assert.New(t), require.New(t)
|
||||
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
@@ -1678,7 +1730,12 @@ func TestService_AddWorkerTags(t *testing.T) {
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return server.NewRepository(rw, rw, testKms)
|
||||
}
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn)
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, testKms)
|
||||
require.NoError(err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(err)
|
||||
worker := server.TestKmsWorker(t, conn, wrapper)
|
||||
|
||||
@@ -1809,7 +1866,7 @@ func TestService_AddWorkerTags(t *testing.T) {
|
||||
func TestService_SetWorkerTags(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert, require := assert.New(t), require.New(t)
|
||||
|
||||
ctx := context.Background()
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
wrapper := db.TestWrapper(t)
|
||||
iamRepo := iam.TestRepo(t, conn, wrapper)
|
||||
@@ -1822,7 +1879,12 @@ func TestService_SetWorkerTags(t *testing.T) {
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return server.NewRepository(rw, rw, testKms)
|
||||
}
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn)
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, testKms)
|
||||
require.NoError(err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(err)
|
||||
worker := server.TestKmsWorker(t, conn, wrapper)
|
||||
|
||||
@@ -1956,7 +2018,7 @@ func TestService_SetWorkerTags(t *testing.T) {
|
||||
func TestService_RemoveWorkerTags(t *testing.T) {
|
||||
t.Parallel()
|
||||
assert, require := assert.New(t), require.New(t)
|
||||
|
||||
ctx := context.Background()
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
wrapper := db.TestWrapper(t)
|
||||
iamRepo := iam.TestRepo(t, conn, wrapper)
|
||||
@@ -1969,7 +2031,12 @@ func TestService_RemoveWorkerTags(t *testing.T) {
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return server.NewRepository(rw, rw, testKms)
|
||||
}
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn)
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, testKms)
|
||||
require.NoError(err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
s, err := NewService(context.Background(), repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(err)
|
||||
worker := server.TestKmsWorker(t, conn, wrapper)
|
||||
|
||||
@@ -2140,3 +2207,157 @@ func TestService_RemoveWorkerTags(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestReadCertificateAuthority(t *testing.T) {
|
||||
t.Parallel()
|
||||
require, assert := require.New(t), assert.New(t)
|
||||
ctx := context.Background()
|
||||
wrapper := db.TestWrapper(t)
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
rw := db.New(conn)
|
||||
kmsCache := kms.TestKms(t, conn, wrapper)
|
||||
|
||||
iamRepo := iam.TestRepo(t, conn, wrapper)
|
||||
iamRepoFn := func() (*iam.Repository, error) {
|
||||
return iamRepo, nil
|
||||
}
|
||||
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return server.NewRepository(rw, rw, kmsCache)
|
||||
}
|
||||
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, kmsCache)
|
||||
require.NoError(err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
// Store CA and check that initial version updates
|
||||
_, err = rotation.RotateRootCertificates(ctx, workerAuthRepo)
|
||||
require.NoError(err)
|
||||
|
||||
testSrv, err := NewService(ctx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(err, "Error when getting new worker service.")
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
scopeId string
|
||||
req *pbs.ReadCertificateAuthorityRequest
|
||||
wantErr bool
|
||||
wantErrIs error
|
||||
wantErrContains string
|
||||
}{
|
||||
{
|
||||
name: "invalid-scope",
|
||||
scopeId: scope.Global.String(),
|
||||
req: &pbs.ReadCertificateAuthorityRequest{
|
||||
ScopeId: "invalid-scope",
|
||||
},
|
||||
wantErr: true,
|
||||
wantErrIs: handlers.ApiErrorWithCode(codes.InvalidArgument),
|
||||
wantErrContains: "Must be 'global'",
|
||||
},
|
||||
{
|
||||
name: "success",
|
||||
scopeId: scope.Global.String(),
|
||||
req: &pbs.ReadCertificateAuthorityRequest{
|
||||
ScopeId: "global",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
got, err := testSrv.ReadCertificateAuthority(auth.DisabledAuthTestContext(iamRepoFn, tc.scopeId), tc.req)
|
||||
if tc.wantErr {
|
||||
require.Error(err)
|
||||
assert.Nil(got)
|
||||
if tc.wantErrIs != nil {
|
||||
assert.ErrorIs(err, tc.wantErrIs)
|
||||
}
|
||||
if tc.wantErrContains != "" {
|
||||
assert.Contains(err.Error(), tc.wantErrContains)
|
||||
}
|
||||
return
|
||||
}
|
||||
require.NoError(err)
|
||||
require.NotNil(got)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestReinitializeCertificateAuthority(t *testing.T) {
|
||||
t.Parallel()
|
||||
require, assert := require.New(t), assert.New(t)
|
||||
ctx := context.Background()
|
||||
wrapper := db.TestWrapper(t)
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
rw := db.New(conn)
|
||||
kmsCache := kms.TestKms(t, conn, wrapper)
|
||||
|
||||
iamRepo := iam.TestRepo(t, conn, wrapper)
|
||||
iamRepoFn := func() (*iam.Repository, error) {
|
||||
return iamRepo, nil
|
||||
}
|
||||
|
||||
repoFn := func() (*server.Repository, error) {
|
||||
return server.NewRepository(rw, rw, kmsCache)
|
||||
}
|
||||
|
||||
workerAuthRepo, err := server.NewRepositoryStorage(ctx, rw, rw, kmsCache)
|
||||
require.NoError(err)
|
||||
workerAuthRepoFn := func() (*server.WorkerAuthRepositoryStorage, error) {
|
||||
return workerAuthRepo, nil
|
||||
}
|
||||
|
||||
// Store CA and check that initial version updates
|
||||
_, err = rotation.RotateRootCertificates(ctx, workerAuthRepo)
|
||||
require.NoError(err)
|
||||
|
||||
testSrv, err := NewService(ctx, repoFn, iamRepoFn, workerAuthRepoFn)
|
||||
require.NoError(err, "Error when getting new worker service.")
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
scopeId string
|
||||
req *pbs.ReinitializeCertificateAuthorityRequest
|
||||
wantErr bool
|
||||
wantErrIs error
|
||||
wantErrContains string
|
||||
}{
|
||||
{
|
||||
name: "invalid-id",
|
||||
scopeId: scope.Global.String(),
|
||||
req: &pbs.ReinitializeCertificateAuthorityRequest{
|
||||
ScopeId: "bogus",
|
||||
},
|
||||
wantErr: true,
|
||||
wantErrIs: handlers.ApiErrorWithCode(codes.InvalidArgument),
|
||||
wantErrContains: "Must be 'global'",
|
||||
},
|
||||
{
|
||||
name: "success",
|
||||
scopeId: scope.Global.String(),
|
||||
req: &pbs.ReinitializeCertificateAuthorityRequest{
|
||||
ScopeId: "global",
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
got, err := testSrv.ReinitializeCertificateAuthority(auth.DisabledAuthTestContext(iamRepoFn, tc.scopeId), tc.req)
|
||||
if tc.wantErr {
|
||||
require.Error(err)
|
||||
assert.Nil(got)
|
||||
if tc.wantErrIs != nil {
|
||||
assert.ErrorIs(err, tc.wantErrIs)
|
||||
}
|
||||
if tc.wantErrContains != "" {
|
||||
assert.Contains(err.Error(), tc.wantErrContains)
|
||||
}
|
||||
return
|
||||
}
|
||||
require.NoError(err)
|
||||
require.NotNil(got)
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -7,6 +7,8 @@ import (
|
||||
"math/rand"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/boundary/version"
|
||||
|
||||
"github.com/hashicorp/boundary/internal/daemon/worker/common"
|
||||
"github.com/hashicorp/boundary/internal/daemon/worker/session"
|
||||
pb "github.com/hashicorp/boundary/internal/gen/controller/servers"
|
||||
@@ -159,15 +161,16 @@ func (w *Worker) sendWorkerStatus(cancelCtx context.Context, sessionManager sess
|
||||
event.WriteError(statusCtx, op, errors.New("worker name and keyId are both empty; one is needed to identify a worker"),
|
||||
event.WithInfoMsg("error making status request to controller"))
|
||||
}
|
||||
|
||||
versionInfo := version.Get()
|
||||
result, err := client.Status(statusCtx, &pbs.StatusRequest{
|
||||
Jobs: activeJobs,
|
||||
WorkerStatus: &pb.ServerWorkerStatus{
|
||||
Name: w.conf.RawConfig.Worker.Name,
|
||||
Description: w.conf.RawConfig.Worker.Description,
|
||||
Address: w.conf.RawConfig.Worker.PublicAddr,
|
||||
Tags: tags,
|
||||
KeyId: keyId,
|
||||
Name: w.conf.RawConfig.Worker.Name,
|
||||
Description: w.conf.RawConfig.Worker.Description,
|
||||
Address: w.conf.RawConfig.Worker.PublicAddr,
|
||||
Tags: tags,
|
||||
KeyId: keyId,
|
||||
ReleaseVersion: versionInfo.FullVersionNumber(false),
|
||||
},
|
||||
UpdateTags: w.updateTags.Load(),
|
||||
})
|
||||
|
||||
@@ -2,6 +2,7 @@ begin;
|
||||
|
||||
-- worker_aggregate view allows the worker and configuration to be read at the
|
||||
-- same time.
|
||||
-- Updated in 51/01_server_worker_release_version.up.sql
|
||||
create view server_worker_aggregate as
|
||||
with worker_config_tags(worker_id, source, tags) as (
|
||||
select
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
begin;
|
||||
|
||||
-- release_version can be null, but if provided it must be greater than 8 to account for
|
||||
-- the 'Boundary' suffix
|
||||
alter table server_worker
|
||||
add column release_version text
|
||||
constraint release_version_too_short
|
||||
check (release_version = '' or length(trim(release_version)) >= 8);
|
||||
|
||||
drop view server_worker_aggregate;
|
||||
|
||||
-- Updates view created in 34/04_views.up.sql
|
||||
create view server_worker_aggregate as
|
||||
with worker_config_tags(worker_id, source, tags) as (
|
||||
select
|
||||
ct.worker_id,
|
||||
ct.source,
|
||||
-- keys and tags can be any lowercase printable character so use uppercase characters as delimitors.
|
||||
string_agg(distinct concat_ws('Y', ct.key, ct.value), 'Z') as tags
|
||||
from server_worker_tag ct
|
||||
group by ct.worker_id, ct.source
|
||||
),
|
||||
connection_count (worker_id, count) as (
|
||||
select
|
||||
worker_id,
|
||||
count(1) as count
|
||||
from session_connection
|
||||
where closed_reason is null
|
||||
group by worker_id
|
||||
)
|
||||
select
|
||||
w.public_id,
|
||||
w.scope_id,
|
||||
w.description,
|
||||
w.name,
|
||||
w.address,
|
||||
w.create_time,
|
||||
w.update_time,
|
||||
w.version,
|
||||
w.last_status_time,
|
||||
w.type,
|
||||
w.release_version,
|
||||
cc.count as active_connection_count,
|
||||
-- keys and tags can be any lowercase printable character so use uppercase characters as delimitors.
|
||||
wt.tags as api_tags,
|
||||
ct.tags as worker_config_tags
|
||||
from server_worker w
|
||||
left join worker_config_tags wt on
|
||||
w.public_id = wt.worker_id and wt.source = 'api'
|
||||
left join worker_config_tags ct on
|
||||
w.public_id = ct.worker_id and ct.source = 'configuration'
|
||||
left join connection_count as cc on
|
||||
w.public_id = cc.worker_id;
|
||||
comment on view server_worker_aggregate is
|
||||
'server_worker_aggregate contains the worker resource with its worker provided config values and its configuration and api provided tags.';
|
||||
|
||||
commit;
|
||||
@@ -4014,6 +4014,56 @@
|
||||
"controller.api.services.v1.WorkerService"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/v1/workers:read-certificate-authority": {
|
||||
"get": {
|
||||
"summary": "Retrieves root certificates used for worker authentication.",
|
||||
"operationId": "WorkerService_ReadCertificateAuthority",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.api.resources.workers.v1.CertificateAuthority"
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters": [
|
||||
{
|
||||
"name": "scope_id",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"controller.api.services.v1.WorkerService"
|
||||
]
|
||||
}
|
||||
},
|
||||
"/v1/workers:reinitialize-certificate-authority": {
|
||||
"post": {
|
||||
"summary": "Reinitializes root certificates used for worker authentication.",
|
||||
"operationId": "WorkerService_ReinitializeCertificateAuthority",
|
||||
"responses": {
|
||||
"200": {
|
||||
"description": "",
|
||||
"schema": {
|
||||
"$ref": "#/definitions/controller.api.resources.workers.v1.CertificateAuthority"
|
||||
}
|
||||
}
|
||||
},
|
||||
"parameters": [
|
||||
{
|
||||
"name": "scope_id",
|
||||
"in": "query",
|
||||
"required": false,
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"tags": [
|
||||
"controller.api.services.v1.WorkerService"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"definitions": {
|
||||
@@ -5738,6 +5788,44 @@
|
||||
},
|
||||
"title": "User contains all fields related to a User resource"
|
||||
},
|
||||
"controller.api.resources.workers.v1.Certificate": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"id": {
|
||||
"type": "string",
|
||||
"title": "Output only. The ID of the certificate",
|
||||
"readOnly": true
|
||||
},
|
||||
"public_key_sha256": {
|
||||
"type": "string",
|
||||
"title": "Output only. The public key of the cert authority",
|
||||
"readOnly": true
|
||||
},
|
||||
"not_before_time": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"title": "Output only. The time before which this CA is invalid",
|
||||
"readOnly": true
|
||||
},
|
||||
"not_after_time": {
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
"title": "Output only. The time after which this CA is invalid",
|
||||
"readOnly": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"controller.api.resources.workers.v1.CertificateAuthority": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"certs": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "#/definitions/controller.api.resources.workers.v1.Certificate"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"controller.api.resources.workers.v1.Worker": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@@ -5844,6 +5932,11 @@
|
||||
"description": "Output only. The api tags set for the worker.",
|
||||
"readOnly": true
|
||||
},
|
||||
"release_version": {
|
||||
"type": "string",
|
||||
"description": "Output only. The version of the Boundary binary the worker is running.",
|
||||
"readOnly": true
|
||||
},
|
||||
"authorized_actions": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
@@ -6523,6 +6616,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"controller.api.services.v1.ReadCertificateAuthorityResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"item": {
|
||||
"$ref": "#/definitions/controller.api.resources.workers.v1.CertificateAuthority"
|
||||
}
|
||||
}
|
||||
},
|
||||
"controller.api.services.v1.ReinitializeCertificateAuthorityResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"item": {
|
||||
"$ref": "#/definitions/controller.api.resources.workers.v1.CertificateAuthority"
|
||||
}
|
||||
}
|
||||
},
|
||||
"controller.api.services.v1.RemoveGroupMembersResponse": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
|
||||
@@ -964,6 +964,194 @@ func (x *RemoveWorkerTagsResponse) GetItem() *workers.Worker {
|
||||
return nil
|
||||
}
|
||||
|
||||
type ReadCertificateAuthorityRequest struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
ScopeId string `protobuf:"bytes,1,opt,name=scope_id,json=scopeId,proto3" json:"scope_id,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
func (x *ReadCertificateAuthorityRequest) Reset() {
|
||||
*x = ReadCertificateAuthorityRequest{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_controller_api_services_v1_worker_service_proto_msgTypes[18]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ReadCertificateAuthorityRequest) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ReadCertificateAuthorityRequest) ProtoMessage() {}
|
||||
|
||||
func (x *ReadCertificateAuthorityRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_controller_api_services_v1_worker_service_proto_msgTypes[18]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ReadCertificateAuthorityRequest.ProtoReflect.Descriptor instead.
|
||||
func (*ReadCertificateAuthorityRequest) Descriptor() ([]byte, []int) {
|
||||
return file_controller_api_services_v1_worker_service_proto_rawDescGZIP(), []int{18}
|
||||
}
|
||||
|
||||
func (x *ReadCertificateAuthorityRequest) GetScopeId() string {
|
||||
if x != nil {
|
||||
return x.ScopeId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type ReadCertificateAuthorityResponse struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Item *workers.CertificateAuthority `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ReadCertificateAuthorityResponse) Reset() {
|
||||
*x = ReadCertificateAuthorityResponse{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_controller_api_services_v1_worker_service_proto_msgTypes[19]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ReadCertificateAuthorityResponse) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ReadCertificateAuthorityResponse) ProtoMessage() {}
|
||||
|
||||
func (x *ReadCertificateAuthorityResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_controller_api_services_v1_worker_service_proto_msgTypes[19]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ReadCertificateAuthorityResponse.ProtoReflect.Descriptor instead.
|
||||
func (*ReadCertificateAuthorityResponse) Descriptor() ([]byte, []int) {
|
||||
return file_controller_api_services_v1_worker_service_proto_rawDescGZIP(), []int{19}
|
||||
}
|
||||
|
||||
func (x *ReadCertificateAuthorityResponse) GetItem() *workers.CertificateAuthority {
|
||||
if x != nil {
|
||||
return x.Item
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type ReinitializeCertificateAuthorityRequest struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
ScopeId string `protobuf:"bytes,1,opt,name=scope_id,json=scopeId,proto3" json:"scope_id,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
func (x *ReinitializeCertificateAuthorityRequest) Reset() {
|
||||
*x = ReinitializeCertificateAuthorityRequest{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_controller_api_services_v1_worker_service_proto_msgTypes[20]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ReinitializeCertificateAuthorityRequest) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ReinitializeCertificateAuthorityRequest) ProtoMessage() {}
|
||||
|
||||
func (x *ReinitializeCertificateAuthorityRequest) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_controller_api_services_v1_worker_service_proto_msgTypes[20]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ReinitializeCertificateAuthorityRequest.ProtoReflect.Descriptor instead.
|
||||
func (*ReinitializeCertificateAuthorityRequest) Descriptor() ([]byte, []int) {
|
||||
return file_controller_api_services_v1_worker_service_proto_rawDescGZIP(), []int{20}
|
||||
}
|
||||
|
||||
func (x *ReinitializeCertificateAuthorityRequest) GetScopeId() string {
|
||||
if x != nil {
|
||||
return x.ScopeId
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type ReinitializeCertificateAuthorityResponse struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Item *workers.CertificateAuthority `protobuf:"bytes,1,opt,name=item,proto3" json:"item,omitempty"`
|
||||
}
|
||||
|
||||
func (x *ReinitializeCertificateAuthorityResponse) Reset() {
|
||||
*x = ReinitializeCertificateAuthorityResponse{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_controller_api_services_v1_worker_service_proto_msgTypes[21]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *ReinitializeCertificateAuthorityResponse) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*ReinitializeCertificateAuthorityResponse) ProtoMessage() {}
|
||||
|
||||
func (x *ReinitializeCertificateAuthorityResponse) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_controller_api_services_v1_worker_service_proto_msgTypes[21]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use ReinitializeCertificateAuthorityResponse.ProtoReflect.Descriptor instead.
|
||||
func (*ReinitializeCertificateAuthorityResponse) Descriptor() ([]byte, []int) {
|
||||
return file_controller_api_services_v1_worker_service_proto_rawDescGZIP(), []int{21}
|
||||
}
|
||||
|
||||
func (x *ReinitializeCertificateAuthorityResponse) GetItem() *workers.CertificateAuthority {
|
||||
if x != nil {
|
||||
return x.Item
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_controller_api_services_v1_worker_service_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_controller_api_services_v1_worker_service_proto_rawDesc = []byte{
|
||||
@@ -1112,122 +1300,182 @@ var file_controller_api_services_v1_worker_service_proto_rawDesc = []byte{
|
||||
0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f,
|
||||
0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63,
|
||||
0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x32, 0xda, 0x0d, 0x0a, 0x0d, 0x57,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa2, 0x01, 0x0a,
|
||||
0x09, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x3c, 0x0a, 0x1f, 0x52, 0x65,
|
||||
0x61, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74,
|
||||
0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a,
|
||||
0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x07, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x20, 0x52, 0x65, 0x61, 0x64,
|
||||
0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f,
|
||||
0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a, 0x04,
|
||||
0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31,
|
||||
0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68,
|
||||
0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x22, 0x44, 0x0a, 0x27, 0x52,
|
||||
0x65, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69,
|
||||
0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f,
|
||||
0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x49,
|
||||
0x64, 0x22, 0x79, 0x0a, 0x28, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a,
|
||||
0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68,
|
||||
0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4d, 0x0a,
|
||||
0x04, 0x69, 0x74, 0x65, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73,
|
||||
0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, 0x76,
|
||||
0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74,
|
||||
0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x32, 0x9b, 0x12, 0x0a,
|
||||
0x0d, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0xa2,
|
||||
0x01, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2c, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65,
|
||||
0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
|
||||
0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, 0x41, 0x17, 0x12, 0x15, 0x47, 0x65,
|
||||
0x74, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x57, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x10, 0x2f, 0x76, 0x31, 0x2f, 0x77,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x62, 0x04, 0x69, 0x74, 0x65,
|
||||
0x6d, 0x12, 0x9a, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72,
|
||||
0x73, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c,
|
||||
0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4c,
|
||||
0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
|
||||
0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x14, 0x12, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x73, 0x20, 0x61,
|
||||
0x6c, 0x6c, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02,
|
||||
0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x12, 0xca,
|
||||
0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c,
|
||||
0x65, 0x64, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e,
|
||||
0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x65, 0x64, 0x52,
|
||||
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
|
||||
0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
|
||||
0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72,
|
||||
0x4c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92, 0x41, 0x1a,
|
||||
0x12, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67,
|
||||
0x6c, 0x65, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b,
|
||||
0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x3a, 0x63, 0x72,
|
||||
0x65, 0x61, 0x74, 0x65, 0x3a, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6c, 0x65, 0x64, 0x3a,
|
||||
0x04, 0x69, 0x74, 0x65, 0x6d, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0xda, 0x01, 0x0a, 0x13,
|
||||
0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x4c, 0x65, 0x64, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x92, 0x41, 0x17, 0x12, 0x15,
|
||||
0x47, 0x65, 0x74, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x10, 0x2f, 0x76, 0x31,
|
||||
0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x62, 0x04, 0x69,
|
||||
0x74, 0x65, 0x6d, 0x12, 0x9a, 0x01, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x73, 0x12, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31,
|
||||
0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
|
||||
0x72, 0x4c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x63, 0x6f,
|
||||
0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31,
|
||||
0x2e, 0x4c, 0x69, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x92, 0x41, 0x14, 0x12, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x73,
|
||||
0x20, 0x61, 0x6c, 0x6c, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, 0x82, 0xd3, 0xe4,
|
||||
0x93, 0x02, 0x0d, 0x12, 0x0b, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73,
|
||||
0x12, 0xca, 0x01, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65,
|
||||
0x72, 0x4c, 0x65, 0x64, 0x12, 0x32, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
|
||||
0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76,
|
||||
0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x65,
|
||||
0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
|
||||
0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x4c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x92,
|
||||
0x41, 0x1a, 0x12, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69,
|
||||
0x6e, 0x67, 0x6c, 0x65, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93,
|
||||
0x02, 0x2b, 0x22, 0x1d, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x3a,
|
||||
0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x6c, 0x65,
|
||||
0x64, 0x3a, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0xda, 0x01,
|
||||
0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c,
|
||||
0x65, 0x72, 0x4c, 0x65, 0x64, 0x12, 0x36, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c,
|
||||
0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e,
|
||||
0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
|
||||
0x6c, 0x65, 0x72, 0x4c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73,
|
||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4c, 0x65, 0x64, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x92, 0x41, 0x1a, 0x12, 0x18, 0x43, 0x72, 0x65,
|
||||
0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x21, 0x2f, 0x76, 0x31,
|
||||
0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a,
|
||||
0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2d, 0x6c, 0x65, 0x64, 0x3a, 0x04,
|
||||
0x69, 0x74, 0x65, 0x6d, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0xad, 0x01, 0x0a, 0x0c, 0x55,
|
||||
0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43,
|
||||
0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x4c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70,
|
||||
0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x92, 0x41, 0x1a, 0x12, 0x18, 0x43, 0x72, 0x65, 0x61, 0x74,
|
||||
0x65, 0x73, 0x20, 0x61, 0x20, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x57, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2f, 0x22, 0x21, 0x2f, 0x76, 0x31, 0x2f, 0x77,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x3a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x63, 0x6f,
|
||||
0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2d, 0x6c, 0x65, 0x64, 0x3a, 0x04, 0x69, 0x74,
|
||||
0x65, 0x6d, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0xad, 0x01, 0x0a, 0x0c, 0x55, 0x70, 0x64,
|
||||
0x61, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
|
||||
0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a, 0x92, 0x41,
|
||||
0x13, 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x57, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x32, 0x10, 0x2f, 0x76, 0x31, 0x2f,
|
||||
0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04, 0x69, 0x74,
|
||||
0x65, 0x6d, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0xa1, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x6c,
|
||||
0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x63, 0x6f, 0x6e, 0x74,
|
||||
0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69,
|
||||
0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e, 0x92, 0x41,
|
||||
0x13, 0x12, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x57, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, 0x76, 0x31, 0x2f,
|
||||
0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xd0, 0x01, 0x0a,
|
||||
0x0d, 0x41, 0x64, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x12, 0x30,
|
||||
0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e,
|
||||
0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x64, 0x57,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
|
||||
0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70,
|
||||
0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x57,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65,
|
||||
0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3a,
|
||||
0x92, 0x41, 0x13, 0x12, 0x11, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x57,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x32, 0x10, 0x2f, 0x76,
|
||||
0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x04,
|
||||
0x69, 0x74, 0x65, 0x6d, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0xa1, 0x01, 0x0a, 0x0c, 0x44,
|
||||
0x65, 0x6c, 0x65, 0x74, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2f, 0x2e, 0x63, 0x6f,
|
||||
0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x57,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
|
||||
0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2e,
|
||||
0x92, 0x41, 0x13, 0x12, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x73, 0x20, 0x61, 0x20, 0x57,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x12, 0x2a, 0x10, 0x2f, 0x76,
|
||||
0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0xd0,
|
||||
0x01, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73,
|
||||
0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70,
|
||||
0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64,
|
||||
0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x22, 0x5a, 0x92, 0x41, 0x26, 0x12, 0x24, 0x41, 0x64, 0x64, 0x73, 0x20, 0x61,
|
||||
0x70, 0x69, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78,
|
||||
0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3,
|
||||
0xe4, 0x93, 0x02, 0x2b, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
|
||||
0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x61, 0x64, 0x64, 0x2d, 0x77, 0x6f, 0x72, 0x6b, 0x65,
|
||||
0x72, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12,
|
||||
0xd1, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67,
|
||||
0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x53,
|
||||
0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
|
||||
0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e,
|
||||
0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e,
|
||||
0x41, 0x64, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x92, 0x41, 0x26, 0x12, 0x24, 0x41, 0x64, 0x64, 0x73,
|
||||
0x20, 0x61, 0x70, 0x69, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x61, 0x6e, 0x20,
|
||||
0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2e,
|
||||
0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x61, 0x64, 0x64, 0x2d, 0x77, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x62, 0x04, 0x69, 0x74, 0x65,
|
||||
0x6d, 0x12, 0xd1, 0x01, 0x0a, 0x0d, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54,
|
||||
0x61, 0x67, 0x73, 0x12, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31,
|
||||
0x2e, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65,
|
||||
0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x27, 0x12, 0x25, 0x53, 0x65, 0x74,
|
||||
0x73, 0x20, 0x61, 0x70, 0x69, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61,
|
||||
0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x57, 0x6f, 0x72, 0x6b, 0x65,
|
||||
0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x73, 0x65, 0x74, 0x2d, 0x77,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x62, 0x04, 0x69,
|
||||
0x74, 0x65, 0x6d, 0x12, 0xe1, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72,
|
||||
0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63,
|
||||
0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e,
|
||||
0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73,
|
||||
0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76,
|
||||
0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f,
|
||||
0x6e, 0x73, 0x65, 0x22, 0x62, 0x92, 0x41, 0x2b, 0x12, 0x29, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
|
||||
0x73, 0x20, 0x61, 0x70, 0x69, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20,
|
||||
0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x57, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x23, 0x2f, 0x76, 0x31, 0x2f, 0x77,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x72, 0x65, 0x6d, 0x6f,
|
||||
0x76, 0x65, 0x2d, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x3a, 0x01,
|
||||
0x2a, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75,
|
||||
0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f,
|
||||
0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
|
||||
0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3b, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c,
|
||||
0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e,
|
||||
0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73,
|
||||
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5b, 0x92, 0x41, 0x27, 0x12, 0x25, 0x53,
|
||||
0x65, 0x74, 0x73, 0x20, 0x61, 0x70, 0x69, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x66, 0x6f, 0x72,
|
||||
0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x57, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x20, 0x2f, 0x76, 0x31, 0x2f,
|
||||
0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x73, 0x65, 0x74,
|
||||
0x2d, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x74, 0x61, 0x67, 0x73, 0x3a, 0x01, 0x2a, 0x62,
|
||||
0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0xe1, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65,
|
||||
0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x12, 0x33, 0x2e, 0x63, 0x6f, 0x6e,
|
||||
0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76,
|
||||
0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
|
||||
0x34, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69,
|
||||
0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6d,
|
||||
0x6f, 0x76, 0x65, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73,
|
||||
0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x62, 0x92, 0x41, 0x2b, 0x12, 0x29, 0x52, 0x65, 0x6d, 0x6f,
|
||||
0x76, 0x65, 0x73, 0x20, 0x61, 0x70, 0x69, 0x20, 0x74, 0x61, 0x67, 0x73, 0x20, 0x66, 0x72, 0x6f,
|
||||
0x6d, 0x20, 0x61, 0x6e, 0x20, 0x65, 0x78, 0x69, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x57, 0x6f,
|
||||
0x72, 0x6b, 0x65, 0x72, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x22, 0x23, 0x2f, 0x76, 0x31,
|
||||
0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x3a, 0x72, 0x65,
|
||||
0x6d, 0x6f, 0x76, 0x65, 0x2d, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2d, 0x74, 0x61, 0x67, 0x73,
|
||||
0x3a, 0x01, 0x2a, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0x8b, 0x02, 0x0a, 0x18, 0x52, 0x65,
|
||||
0x61, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74,
|
||||
0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x3b, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
|
||||
0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
|
||||
0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
|
||||
0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75,
|
||||
0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31,
|
||||
0x2e, 0x52, 0x65, 0x61, 0x64, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65,
|
||||
0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
|
||||
0x65, 0x22, 0x74, 0x92, 0x41, 0x3d, 0x12, 0x3b, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x76, 0x65,
|
||||
0x73, 0x20, 0x72, 0x6f, 0x6f, 0x74, 0x20, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
|
||||
0x74, 0x65, 0x73, 0x20, 0x75, 0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x20, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69,
|
||||
0x6f, 0x6e, 0x2e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2e, 0x12, 0x26, 0x2f, 0x76, 0x31, 0x2f, 0x77,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x3a, 0x72, 0x65, 0x61, 0x64, 0x2d, 0x63, 0x65, 0x72, 0x74,
|
||||
0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
|
||||
0x79, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x12, 0xb0, 0x02, 0x0a, 0x20, 0x52, 0x65, 0x69, 0x6e,
|
||||
0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63,
|
||||
0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x43, 0x2e, 0x63,
|
||||
0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x73, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x69, 0x6e, 0x69, 0x74,
|
||||
0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74,
|
||||
0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
|
||||
0x74, 0x1a, 0x44, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61,
|
||||
0x70, 0x69, 0x2e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x52,
|
||||
0x65, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x43, 0x65, 0x72, 0x74, 0x69,
|
||||
0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52,
|
||||
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x80, 0x01, 0x92, 0x41, 0x41, 0x12, 0x3f, 0x52,
|
||||
0x65, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x73, 0x20, 0x72, 0x6f, 0x6f,
|
||||
0x74, 0x20, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x20, 0x75,
|
||||
0x73, 0x65, 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x20, 0x61,
|
||||
0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x82, 0xd3,
|
||||
0xe4, 0x93, 0x02, 0x36, 0x22, 0x2e, 0x2f, 0x76, 0x31, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
|
||||
0x73, 0x3a, 0x72, 0x65, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x2d, 0x63,
|
||||
0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x2d, 0x61, 0x75, 0x74, 0x68, 0x6f,
|
||||
0x72, 0x69, 0x74, 0x79, 0x62, 0x04, 0x69, 0x74, 0x65, 0x6d, 0x42, 0x4d, 0x5a, 0x4b, 0x67, 0x69,
|
||||
0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f,
|
||||
0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x65,
|
||||
0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c,
|
||||
0x6c, 0x65, 0x72, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73,
|
||||
0x3b, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -1242,75 +1490,86 @@ func file_controller_api_services_v1_worker_service_proto_rawDescGZIP() []byte {
|
||||
return file_controller_api_services_v1_worker_service_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_controller_api_services_v1_worker_service_proto_msgTypes = make([]protoimpl.MessageInfo, 21)
|
||||
var file_controller_api_services_v1_worker_service_proto_msgTypes = make([]protoimpl.MessageInfo, 25)
|
||||
var file_controller_api_services_v1_worker_service_proto_goTypes = []interface{}{
|
||||
(*GetWorkerRequest)(nil), // 0: controller.api.services.v1.GetWorkerRequest
|
||||
(*GetWorkerResponse)(nil), // 1: controller.api.services.v1.GetWorkerResponse
|
||||
(*ListWorkersRequest)(nil), // 2: controller.api.services.v1.ListWorkersRequest
|
||||
(*ListWorkersResponse)(nil), // 3: controller.api.services.v1.ListWorkersResponse
|
||||
(*CreateWorkerLedRequest)(nil), // 4: controller.api.services.v1.CreateWorkerLedRequest
|
||||
(*CreateWorkerLedResponse)(nil), // 5: controller.api.services.v1.CreateWorkerLedResponse
|
||||
(*CreateControllerLedRequest)(nil), // 6: controller.api.services.v1.CreateControllerLedRequest
|
||||
(*CreateControllerLedResponse)(nil), // 7: controller.api.services.v1.CreateControllerLedResponse
|
||||
(*UpdateWorkerRequest)(nil), // 8: controller.api.services.v1.UpdateWorkerRequest
|
||||
(*UpdateWorkerResponse)(nil), // 9: controller.api.services.v1.UpdateWorkerResponse
|
||||
(*DeleteWorkerRequest)(nil), // 10: controller.api.services.v1.DeleteWorkerRequest
|
||||
(*DeleteWorkerResponse)(nil), // 11: controller.api.services.v1.DeleteWorkerResponse
|
||||
(*AddWorkerTagsRequest)(nil), // 12: controller.api.services.v1.AddWorkerTagsRequest
|
||||
(*AddWorkerTagsResponse)(nil), // 13: controller.api.services.v1.AddWorkerTagsResponse
|
||||
(*SetWorkerTagsRequest)(nil), // 14: controller.api.services.v1.SetWorkerTagsRequest
|
||||
(*SetWorkerTagsResponse)(nil), // 15: controller.api.services.v1.SetWorkerTagsResponse
|
||||
(*RemoveWorkerTagsRequest)(nil), // 16: controller.api.services.v1.RemoveWorkerTagsRequest
|
||||
(*RemoveWorkerTagsResponse)(nil), // 17: controller.api.services.v1.RemoveWorkerTagsResponse
|
||||
nil, // 18: controller.api.services.v1.AddWorkerTagsRequest.ApiTagsEntry
|
||||
nil, // 19: controller.api.services.v1.SetWorkerTagsRequest.ApiTagsEntry
|
||||
nil, // 20: controller.api.services.v1.RemoveWorkerTagsRequest.ApiTagsEntry
|
||||
(*workers.Worker)(nil), // 21: controller.api.resources.workers.v1.Worker
|
||||
(*fieldmaskpb.FieldMask)(nil), // 22: google.protobuf.FieldMask
|
||||
(*structpb.ListValue)(nil), // 23: google.protobuf.ListValue
|
||||
(*GetWorkerRequest)(nil), // 0: controller.api.services.v1.GetWorkerRequest
|
||||
(*GetWorkerResponse)(nil), // 1: controller.api.services.v1.GetWorkerResponse
|
||||
(*ListWorkersRequest)(nil), // 2: controller.api.services.v1.ListWorkersRequest
|
||||
(*ListWorkersResponse)(nil), // 3: controller.api.services.v1.ListWorkersResponse
|
||||
(*CreateWorkerLedRequest)(nil), // 4: controller.api.services.v1.CreateWorkerLedRequest
|
||||
(*CreateWorkerLedResponse)(nil), // 5: controller.api.services.v1.CreateWorkerLedResponse
|
||||
(*CreateControllerLedRequest)(nil), // 6: controller.api.services.v1.CreateControllerLedRequest
|
||||
(*CreateControllerLedResponse)(nil), // 7: controller.api.services.v1.CreateControllerLedResponse
|
||||
(*UpdateWorkerRequest)(nil), // 8: controller.api.services.v1.UpdateWorkerRequest
|
||||
(*UpdateWorkerResponse)(nil), // 9: controller.api.services.v1.UpdateWorkerResponse
|
||||
(*DeleteWorkerRequest)(nil), // 10: controller.api.services.v1.DeleteWorkerRequest
|
||||
(*DeleteWorkerResponse)(nil), // 11: controller.api.services.v1.DeleteWorkerResponse
|
||||
(*AddWorkerTagsRequest)(nil), // 12: controller.api.services.v1.AddWorkerTagsRequest
|
||||
(*AddWorkerTagsResponse)(nil), // 13: controller.api.services.v1.AddWorkerTagsResponse
|
||||
(*SetWorkerTagsRequest)(nil), // 14: controller.api.services.v1.SetWorkerTagsRequest
|
||||
(*SetWorkerTagsResponse)(nil), // 15: controller.api.services.v1.SetWorkerTagsResponse
|
||||
(*RemoveWorkerTagsRequest)(nil), // 16: controller.api.services.v1.RemoveWorkerTagsRequest
|
||||
(*RemoveWorkerTagsResponse)(nil), // 17: controller.api.services.v1.RemoveWorkerTagsResponse
|
||||
(*ReadCertificateAuthorityRequest)(nil), // 18: controller.api.services.v1.ReadCertificateAuthorityRequest
|
||||
(*ReadCertificateAuthorityResponse)(nil), // 19: controller.api.services.v1.ReadCertificateAuthorityResponse
|
||||
(*ReinitializeCertificateAuthorityRequest)(nil), // 20: controller.api.services.v1.ReinitializeCertificateAuthorityRequest
|
||||
(*ReinitializeCertificateAuthorityResponse)(nil), // 21: controller.api.services.v1.ReinitializeCertificateAuthorityResponse
|
||||
nil, // 22: controller.api.services.v1.AddWorkerTagsRequest.ApiTagsEntry
|
||||
nil, // 23: controller.api.services.v1.SetWorkerTagsRequest.ApiTagsEntry
|
||||
nil, // 24: controller.api.services.v1.RemoveWorkerTagsRequest.ApiTagsEntry
|
||||
(*workers.Worker)(nil), // 25: controller.api.resources.workers.v1.Worker
|
||||
(*fieldmaskpb.FieldMask)(nil), // 26: google.protobuf.FieldMask
|
||||
(*workers.CertificateAuthority)(nil), // 27: controller.api.resources.workers.v1.CertificateAuthority
|
||||
(*structpb.ListValue)(nil), // 28: google.protobuf.ListValue
|
||||
}
|
||||
var file_controller_api_services_v1_worker_service_proto_depIdxs = []int32{
|
||||
21, // 0: controller.api.services.v1.GetWorkerResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
21, // 1: controller.api.services.v1.ListWorkersResponse.items:type_name -> controller.api.resources.workers.v1.Worker
|
||||
21, // 2: controller.api.services.v1.CreateWorkerLedRequest.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
21, // 3: controller.api.services.v1.CreateWorkerLedResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
21, // 4: controller.api.services.v1.CreateControllerLedRequest.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
21, // 5: controller.api.services.v1.CreateControllerLedResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
21, // 6: controller.api.services.v1.UpdateWorkerRequest.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
22, // 7: controller.api.services.v1.UpdateWorkerRequest.update_mask:type_name -> google.protobuf.FieldMask
|
||||
21, // 8: controller.api.services.v1.UpdateWorkerResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
18, // 9: controller.api.services.v1.AddWorkerTagsRequest.api_tags:type_name -> controller.api.services.v1.AddWorkerTagsRequest.ApiTagsEntry
|
||||
21, // 10: controller.api.services.v1.AddWorkerTagsResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
19, // 11: controller.api.services.v1.SetWorkerTagsRequest.api_tags:type_name -> controller.api.services.v1.SetWorkerTagsRequest.ApiTagsEntry
|
||||
21, // 12: controller.api.services.v1.SetWorkerTagsResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
20, // 13: controller.api.services.v1.RemoveWorkerTagsRequest.api_tags:type_name -> controller.api.services.v1.RemoveWorkerTagsRequest.ApiTagsEntry
|
||||
21, // 14: controller.api.services.v1.RemoveWorkerTagsResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
23, // 15: controller.api.services.v1.AddWorkerTagsRequest.ApiTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
23, // 16: controller.api.services.v1.SetWorkerTagsRequest.ApiTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
23, // 17: controller.api.services.v1.RemoveWorkerTagsRequest.ApiTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
0, // 18: controller.api.services.v1.WorkerService.GetWorker:input_type -> controller.api.services.v1.GetWorkerRequest
|
||||
2, // 19: controller.api.services.v1.WorkerService.ListWorkers:input_type -> controller.api.services.v1.ListWorkersRequest
|
||||
4, // 20: controller.api.services.v1.WorkerService.CreateWorkerLed:input_type -> controller.api.services.v1.CreateWorkerLedRequest
|
||||
6, // 21: controller.api.services.v1.WorkerService.CreateControllerLed:input_type -> controller.api.services.v1.CreateControllerLedRequest
|
||||
8, // 22: controller.api.services.v1.WorkerService.UpdateWorker:input_type -> controller.api.services.v1.UpdateWorkerRequest
|
||||
10, // 23: controller.api.services.v1.WorkerService.DeleteWorker:input_type -> controller.api.services.v1.DeleteWorkerRequest
|
||||
12, // 24: controller.api.services.v1.WorkerService.AddWorkerTags:input_type -> controller.api.services.v1.AddWorkerTagsRequest
|
||||
14, // 25: controller.api.services.v1.WorkerService.SetWorkerTags:input_type -> controller.api.services.v1.SetWorkerTagsRequest
|
||||
16, // 26: controller.api.services.v1.WorkerService.RemoveWorkerTags:input_type -> controller.api.services.v1.RemoveWorkerTagsRequest
|
||||
1, // 27: controller.api.services.v1.WorkerService.GetWorker:output_type -> controller.api.services.v1.GetWorkerResponse
|
||||
3, // 28: controller.api.services.v1.WorkerService.ListWorkers:output_type -> controller.api.services.v1.ListWorkersResponse
|
||||
5, // 29: controller.api.services.v1.WorkerService.CreateWorkerLed:output_type -> controller.api.services.v1.CreateWorkerLedResponse
|
||||
7, // 30: controller.api.services.v1.WorkerService.CreateControllerLed:output_type -> controller.api.services.v1.CreateControllerLedResponse
|
||||
9, // 31: controller.api.services.v1.WorkerService.UpdateWorker:output_type -> controller.api.services.v1.UpdateWorkerResponse
|
||||
11, // 32: controller.api.services.v1.WorkerService.DeleteWorker:output_type -> controller.api.services.v1.DeleteWorkerResponse
|
||||
13, // 33: controller.api.services.v1.WorkerService.AddWorkerTags:output_type -> controller.api.services.v1.AddWorkerTagsResponse
|
||||
15, // 34: controller.api.services.v1.WorkerService.SetWorkerTags:output_type -> controller.api.services.v1.SetWorkerTagsResponse
|
||||
17, // 35: controller.api.services.v1.WorkerService.RemoveWorkerTags:output_type -> controller.api.services.v1.RemoveWorkerTagsResponse
|
||||
27, // [27:36] is the sub-list for method output_type
|
||||
18, // [18:27] is the sub-list for method input_type
|
||||
18, // [18:18] is the sub-list for extension type_name
|
||||
18, // [18:18] is the sub-list for extension extendee
|
||||
0, // [0:18] is the sub-list for field type_name
|
||||
25, // 0: controller.api.services.v1.GetWorkerResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
25, // 1: controller.api.services.v1.ListWorkersResponse.items:type_name -> controller.api.resources.workers.v1.Worker
|
||||
25, // 2: controller.api.services.v1.CreateWorkerLedRequest.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
25, // 3: controller.api.services.v1.CreateWorkerLedResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
25, // 4: controller.api.services.v1.CreateControllerLedRequest.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
25, // 5: controller.api.services.v1.CreateControllerLedResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
25, // 6: controller.api.services.v1.UpdateWorkerRequest.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
26, // 7: controller.api.services.v1.UpdateWorkerRequest.update_mask:type_name -> google.protobuf.FieldMask
|
||||
25, // 8: controller.api.services.v1.UpdateWorkerResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
22, // 9: controller.api.services.v1.AddWorkerTagsRequest.api_tags:type_name -> controller.api.services.v1.AddWorkerTagsRequest.ApiTagsEntry
|
||||
25, // 10: controller.api.services.v1.AddWorkerTagsResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
23, // 11: controller.api.services.v1.SetWorkerTagsRequest.api_tags:type_name -> controller.api.services.v1.SetWorkerTagsRequest.ApiTagsEntry
|
||||
25, // 12: controller.api.services.v1.SetWorkerTagsResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
24, // 13: controller.api.services.v1.RemoveWorkerTagsRequest.api_tags:type_name -> controller.api.services.v1.RemoveWorkerTagsRequest.ApiTagsEntry
|
||||
25, // 14: controller.api.services.v1.RemoveWorkerTagsResponse.item:type_name -> controller.api.resources.workers.v1.Worker
|
||||
27, // 15: controller.api.services.v1.ReadCertificateAuthorityResponse.item:type_name -> controller.api.resources.workers.v1.CertificateAuthority
|
||||
27, // 16: controller.api.services.v1.ReinitializeCertificateAuthorityResponse.item:type_name -> controller.api.resources.workers.v1.CertificateAuthority
|
||||
28, // 17: controller.api.services.v1.AddWorkerTagsRequest.ApiTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
28, // 18: controller.api.services.v1.SetWorkerTagsRequest.ApiTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
28, // 19: controller.api.services.v1.RemoveWorkerTagsRequest.ApiTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
0, // 20: controller.api.services.v1.WorkerService.GetWorker:input_type -> controller.api.services.v1.GetWorkerRequest
|
||||
2, // 21: controller.api.services.v1.WorkerService.ListWorkers:input_type -> controller.api.services.v1.ListWorkersRequest
|
||||
4, // 22: controller.api.services.v1.WorkerService.CreateWorkerLed:input_type -> controller.api.services.v1.CreateWorkerLedRequest
|
||||
6, // 23: controller.api.services.v1.WorkerService.CreateControllerLed:input_type -> controller.api.services.v1.CreateControllerLedRequest
|
||||
8, // 24: controller.api.services.v1.WorkerService.UpdateWorker:input_type -> controller.api.services.v1.UpdateWorkerRequest
|
||||
10, // 25: controller.api.services.v1.WorkerService.DeleteWorker:input_type -> controller.api.services.v1.DeleteWorkerRequest
|
||||
12, // 26: controller.api.services.v1.WorkerService.AddWorkerTags:input_type -> controller.api.services.v1.AddWorkerTagsRequest
|
||||
14, // 27: controller.api.services.v1.WorkerService.SetWorkerTags:input_type -> controller.api.services.v1.SetWorkerTagsRequest
|
||||
16, // 28: controller.api.services.v1.WorkerService.RemoveWorkerTags:input_type -> controller.api.services.v1.RemoveWorkerTagsRequest
|
||||
18, // 29: controller.api.services.v1.WorkerService.ReadCertificateAuthority:input_type -> controller.api.services.v1.ReadCertificateAuthorityRequest
|
||||
20, // 30: controller.api.services.v1.WorkerService.ReinitializeCertificateAuthority:input_type -> controller.api.services.v1.ReinitializeCertificateAuthorityRequest
|
||||
1, // 31: controller.api.services.v1.WorkerService.GetWorker:output_type -> controller.api.services.v1.GetWorkerResponse
|
||||
3, // 32: controller.api.services.v1.WorkerService.ListWorkers:output_type -> controller.api.services.v1.ListWorkersResponse
|
||||
5, // 33: controller.api.services.v1.WorkerService.CreateWorkerLed:output_type -> controller.api.services.v1.CreateWorkerLedResponse
|
||||
7, // 34: controller.api.services.v1.WorkerService.CreateControllerLed:output_type -> controller.api.services.v1.CreateControllerLedResponse
|
||||
9, // 35: controller.api.services.v1.WorkerService.UpdateWorker:output_type -> controller.api.services.v1.UpdateWorkerResponse
|
||||
11, // 36: controller.api.services.v1.WorkerService.DeleteWorker:output_type -> controller.api.services.v1.DeleteWorkerResponse
|
||||
13, // 37: controller.api.services.v1.WorkerService.AddWorkerTags:output_type -> controller.api.services.v1.AddWorkerTagsResponse
|
||||
15, // 38: controller.api.services.v1.WorkerService.SetWorkerTags:output_type -> controller.api.services.v1.SetWorkerTagsResponse
|
||||
17, // 39: controller.api.services.v1.WorkerService.RemoveWorkerTags:output_type -> controller.api.services.v1.RemoveWorkerTagsResponse
|
||||
19, // 40: controller.api.services.v1.WorkerService.ReadCertificateAuthority:output_type -> controller.api.services.v1.ReadCertificateAuthorityResponse
|
||||
21, // 41: controller.api.services.v1.WorkerService.ReinitializeCertificateAuthority:output_type -> controller.api.services.v1.ReinitializeCertificateAuthorityResponse
|
||||
31, // [31:42] is the sub-list for method output_type
|
||||
20, // [20:31] is the sub-list for method input_type
|
||||
20, // [20:20] is the sub-list for extension type_name
|
||||
20, // [20:20] is the sub-list for extension extendee
|
||||
0, // [0:20] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_controller_api_services_v1_worker_service_proto_init() }
|
||||
@@ -1535,6 +1794,54 @@ func file_controller_api_services_v1_worker_service_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_controller_api_services_v1_worker_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ReadCertificateAuthorityRequest); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_controller_api_services_v1_worker_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ReadCertificateAuthorityResponse); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_controller_api_services_v1_worker_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ReinitializeCertificateAuthorityRequest); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_controller_api_services_v1_worker_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*ReinitializeCertificateAuthorityResponse); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
@@ -1542,7 +1849,7 @@ func file_controller_api_services_v1_worker_service_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_controller_api_services_v1_worker_service_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 21,
|
||||
NumMessages: 25,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
|
||||
@@ -543,6 +543,78 @@ func local_request_WorkerService_RemoveWorkerTags_0(ctx context.Context, marshal
|
||||
|
||||
}
|
||||
|
||||
var (
|
||||
filter_WorkerService_ReadCertificateAuthority_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
|
||||
)
|
||||
|
||||
func request_WorkerService_ReadCertificateAuthority_0(ctx context.Context, marshaler runtime.Marshaler, client WorkerServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq ReadCertificateAuthorityRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
|
||||
if err := req.ParseForm(); err != nil {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WorkerService_ReadCertificateAuthority_0); err != nil {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
|
||||
msg, err := client.ReadCertificateAuthority(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
||||
return msg, metadata, err
|
||||
|
||||
}
|
||||
|
||||
func local_request_WorkerService_ReadCertificateAuthority_0(ctx context.Context, marshaler runtime.Marshaler, server WorkerServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq ReadCertificateAuthorityRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
|
||||
if err := req.ParseForm(); err != nil {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WorkerService_ReadCertificateAuthority_0); err != nil {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
|
||||
msg, err := server.ReadCertificateAuthority(ctx, &protoReq)
|
||||
return msg, metadata, err
|
||||
|
||||
}
|
||||
|
||||
var (
|
||||
filter_WorkerService_ReinitializeCertificateAuthority_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)}
|
||||
)
|
||||
|
||||
func request_WorkerService_ReinitializeCertificateAuthority_0(ctx context.Context, marshaler runtime.Marshaler, client WorkerServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq ReinitializeCertificateAuthorityRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
|
||||
if err := req.ParseForm(); err != nil {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WorkerService_ReinitializeCertificateAuthority_0); err != nil {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
|
||||
msg, err := client.ReinitializeCertificateAuthority(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD))
|
||||
return msg, metadata, err
|
||||
|
||||
}
|
||||
|
||||
func local_request_WorkerService_ReinitializeCertificateAuthority_0(ctx context.Context, marshaler runtime.Marshaler, server WorkerServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) {
|
||||
var protoReq ReinitializeCertificateAuthorityRequest
|
||||
var metadata runtime.ServerMetadata
|
||||
|
||||
if err := req.ParseForm(); err != nil {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_WorkerService_ReinitializeCertificateAuthority_0); err != nil {
|
||||
return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err)
|
||||
}
|
||||
|
||||
msg, err := server.ReinitializeCertificateAuthority(ctx, &protoReq)
|
||||
return msg, metadata, err
|
||||
|
||||
}
|
||||
|
||||
// RegisterWorkerServiceHandlerServer registers the http handlers for service WorkerService to "mux".
|
||||
// UnaryRPC :call WorkerServiceServer directly.
|
||||
// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906.
|
||||
@@ -774,6 +846,56 @@ func RegisterWorkerServiceHandlerServer(ctx context.Context, mux *runtime.ServeM
|
||||
|
||||
})
|
||||
|
||||
mux.Handle("GET", pattern_WorkerService_ReadCertificateAuthority_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
var stream runtime.ServerTransportStream
|
||||
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
|
||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||
var err error
|
||||
var annotatedContext context.Context
|
||||
annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/controller.api.services.v1.WorkerService/ReadCertificateAuthority", runtime.WithHTTPPathPattern("/v1/workers:read-certificate-authority"))
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
resp, md, err := local_request_WorkerService_ReadCertificateAuthority_0(annotatedContext, inboundMarshaler, server, req, pathParams)
|
||||
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
||||
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
|
||||
if err != nil {
|
||||
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
|
||||
forward_WorkerService_ReadCertificateAuthority_0(annotatedContext, mux, outboundMarshaler, w, req, response_WorkerService_ReadCertificateAuthority_0{resp}, mux.GetForwardResponseOptions()...)
|
||||
|
||||
})
|
||||
|
||||
mux.Handle("POST", pattern_WorkerService_ReinitializeCertificateAuthority_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
var stream runtime.ServerTransportStream
|
||||
ctx = grpc.NewContextWithServerTransportStream(ctx, &stream)
|
||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||
var err error
|
||||
var annotatedContext context.Context
|
||||
annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/controller.api.services.v1.WorkerService/ReinitializeCertificateAuthority", runtime.WithHTTPPathPattern("/v1/workers:reinitialize-certificate-authority"))
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
resp, md, err := local_request_WorkerService_ReinitializeCertificateAuthority_0(annotatedContext, inboundMarshaler, server, req, pathParams)
|
||||
md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer())
|
||||
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
|
||||
if err != nil {
|
||||
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
|
||||
forward_WorkerService_ReinitializeCertificateAuthority_0(annotatedContext, mux, outboundMarshaler, w, req, response_WorkerService_ReinitializeCertificateAuthority_0{resp}, mux.GetForwardResponseOptions()...)
|
||||
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1013,6 +1135,50 @@ func RegisterWorkerServiceHandlerClient(ctx context.Context, mux *runtime.ServeM
|
||||
|
||||
})
|
||||
|
||||
mux.Handle("GET", pattern_WorkerService_ReadCertificateAuthority_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||
var err error
|
||||
var annotatedContext context.Context
|
||||
annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/controller.api.services.v1.WorkerService/ReadCertificateAuthority", runtime.WithHTTPPathPattern("/v1/workers:read-certificate-authority"))
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
resp, md, err := request_WorkerService_ReadCertificateAuthority_0(annotatedContext, inboundMarshaler, client, req, pathParams)
|
||||
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
|
||||
if err != nil {
|
||||
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
|
||||
forward_WorkerService_ReadCertificateAuthority_0(annotatedContext, mux, outboundMarshaler, w, req, response_WorkerService_ReadCertificateAuthority_0{resp}, mux.GetForwardResponseOptions()...)
|
||||
|
||||
})
|
||||
|
||||
mux.Handle("POST", pattern_WorkerService_ReinitializeCertificateAuthority_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) {
|
||||
ctx, cancel := context.WithCancel(req.Context())
|
||||
defer cancel()
|
||||
inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req)
|
||||
var err error
|
||||
var annotatedContext context.Context
|
||||
annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/controller.api.services.v1.WorkerService/ReinitializeCertificateAuthority", runtime.WithHTTPPathPattern("/v1/workers:reinitialize-certificate-authority"))
|
||||
if err != nil {
|
||||
runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
resp, md, err := request_WorkerService_ReinitializeCertificateAuthority_0(annotatedContext, inboundMarshaler, client, req, pathParams)
|
||||
annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md)
|
||||
if err != nil {
|
||||
runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err)
|
||||
return
|
||||
}
|
||||
|
||||
forward_WorkerService_ReinitializeCertificateAuthority_0(annotatedContext, mux, outboundMarshaler, w, req, response_WorkerService_ReinitializeCertificateAuthority_0{resp}, mux.GetForwardResponseOptions()...)
|
||||
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1079,6 +1245,24 @@ func (m response_WorkerService_RemoveWorkerTags_0) XXX_ResponseBody() interface{
|
||||
return response.Item
|
||||
}
|
||||
|
||||
type response_WorkerService_ReadCertificateAuthority_0 struct {
|
||||
proto.Message
|
||||
}
|
||||
|
||||
func (m response_WorkerService_ReadCertificateAuthority_0) XXX_ResponseBody() interface{} {
|
||||
response := m.Message.(*ReadCertificateAuthorityResponse)
|
||||
return response.Item
|
||||
}
|
||||
|
||||
type response_WorkerService_ReinitializeCertificateAuthority_0 struct {
|
||||
proto.Message
|
||||
}
|
||||
|
||||
func (m response_WorkerService_ReinitializeCertificateAuthority_0) XXX_ResponseBody() interface{} {
|
||||
response := m.Message.(*ReinitializeCertificateAuthorityResponse)
|
||||
return response.Item
|
||||
}
|
||||
|
||||
var (
|
||||
pattern_WorkerService_GetWorker_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "workers", "id"}, ""))
|
||||
|
||||
@@ -1097,6 +1281,10 @@ var (
|
||||
pattern_WorkerService_SetWorkerTags_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "workers", "id"}, "set-worker-tags"))
|
||||
|
||||
pattern_WorkerService_RemoveWorkerTags_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "workers", "id"}, "remove-worker-tags"))
|
||||
|
||||
pattern_WorkerService_ReadCertificateAuthority_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "workers"}, "read-certificate-authority"))
|
||||
|
||||
pattern_WorkerService_ReinitializeCertificateAuthority_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1}, []string{"v1", "workers"}, "reinitialize-certificate-authority"))
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -1117,4 +1305,8 @@ var (
|
||||
forward_WorkerService_SetWorkerTags_0 = runtime.ForwardResponseMessage
|
||||
|
||||
forward_WorkerService_RemoveWorkerTags_0 = runtime.ForwardResponseMessage
|
||||
|
||||
forward_WorkerService_ReadCertificateAuthority_0 = runtime.ForwardResponseMessage
|
||||
|
||||
forward_WorkerService_ReinitializeCertificateAuthority_0 = runtime.ForwardResponseMessage
|
||||
)
|
||||
@@ -64,6 +64,10 @@ type WorkerServiceClient interface {
|
||||
// RemoveWorkerTags removes api tags from an existing Worker. If missing, malformed,
|
||||
// or referencing a non-existing resource, an error is returned.
|
||||
RemoveWorkerTags(ctx context.Context, in *RemoveWorkerTagsRequest, opts ...grpc.CallOption) (*RemoveWorkerTagsResponse, error)
|
||||
// ReadCertificateAuthority returns the current and next set of root certificates
|
||||
ReadCertificateAuthority(ctx context.Context, in *ReadCertificateAuthorityRequest, opts ...grpc.CallOption) (*ReadCertificateAuthorityResponse, error)
|
||||
// ReinitializeCas removes both current and next root certs and replaces them with a new set
|
||||
ReinitializeCertificateAuthority(ctx context.Context, in *ReinitializeCertificateAuthorityRequest, opts ...grpc.CallOption) (*ReinitializeCertificateAuthorityResponse, error)
|
||||
}
|
||||
|
||||
type workerServiceClient struct {
|
||||
@@ -155,6 +159,24 @@ func (c *workerServiceClient) RemoveWorkerTags(ctx context.Context, in *RemoveWo
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *workerServiceClient) ReadCertificateAuthority(ctx context.Context, in *ReadCertificateAuthorityRequest, opts ...grpc.CallOption) (*ReadCertificateAuthorityResponse, error) {
|
||||
out := new(ReadCertificateAuthorityResponse)
|
||||
err := c.cc.Invoke(ctx, "/controller.api.services.v1.WorkerService/ReadCertificateAuthority", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (c *workerServiceClient) ReinitializeCertificateAuthority(ctx context.Context, in *ReinitializeCertificateAuthorityRequest, opts ...grpc.CallOption) (*ReinitializeCertificateAuthorityResponse, error) {
|
||||
out := new(ReinitializeCertificateAuthorityResponse)
|
||||
err := c.cc.Invoke(ctx, "/controller.api.services.v1.WorkerService/ReinitializeCertificateAuthority", in, out, opts...)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// WorkerServiceServer is the server API for WorkerService service.
|
||||
// All implementations must embed UnimplementedWorkerServiceServer
|
||||
// for forward compatibility
|
||||
@@ -205,6 +227,10 @@ type WorkerServiceServer interface {
|
||||
// RemoveWorkerTags removes api tags from an existing Worker. If missing, malformed,
|
||||
// or referencing a non-existing resource, an error is returned.
|
||||
RemoveWorkerTags(context.Context, *RemoveWorkerTagsRequest) (*RemoveWorkerTagsResponse, error)
|
||||
// ReadCertificateAuthority returns the current and next set of root certificates
|
||||
ReadCertificateAuthority(context.Context, *ReadCertificateAuthorityRequest) (*ReadCertificateAuthorityResponse, error)
|
||||
// ReinitializeCas removes both current and next root certs and replaces them with a new set
|
||||
ReinitializeCertificateAuthority(context.Context, *ReinitializeCertificateAuthorityRequest) (*ReinitializeCertificateAuthorityResponse, error)
|
||||
mustEmbedUnimplementedWorkerServiceServer()
|
||||
}
|
||||
|
||||
@@ -239,6 +265,12 @@ func (UnimplementedWorkerServiceServer) SetWorkerTags(context.Context, *SetWorke
|
||||
func (UnimplementedWorkerServiceServer) RemoveWorkerTags(context.Context, *RemoveWorkerTagsRequest) (*RemoveWorkerTagsResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method RemoveWorkerTags not implemented")
|
||||
}
|
||||
func (UnimplementedWorkerServiceServer) ReadCertificateAuthority(context.Context, *ReadCertificateAuthorityRequest) (*ReadCertificateAuthorityResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method ReadCertificateAuthority not implemented")
|
||||
}
|
||||
func (UnimplementedWorkerServiceServer) ReinitializeCertificateAuthority(context.Context, *ReinitializeCertificateAuthorityRequest) (*ReinitializeCertificateAuthorityResponse, error) {
|
||||
return nil, status.Errorf(codes.Unimplemented, "method ReinitializeCertificateAuthority not implemented")
|
||||
}
|
||||
func (UnimplementedWorkerServiceServer) mustEmbedUnimplementedWorkerServiceServer() {}
|
||||
|
||||
// UnsafeWorkerServiceServer may be embedded to opt out of forward compatibility for this service.
|
||||
@@ -414,6 +446,42 @@ func _WorkerService_RemoveWorkerTags_Handler(srv interface{}, ctx context.Contex
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _WorkerService_ReadCertificateAuthority_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(ReadCertificateAuthorityRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(WorkerServiceServer).ReadCertificateAuthority(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/controller.api.services.v1.WorkerService/ReadCertificateAuthority",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(WorkerServiceServer).ReadCertificateAuthority(ctx, req.(*ReadCertificateAuthorityRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
func _WorkerService_ReinitializeCertificateAuthority_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||
in := new(ReinitializeCertificateAuthorityRequest)
|
||||
if err := dec(in); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if interceptor == nil {
|
||||
return srv.(WorkerServiceServer).ReinitializeCertificateAuthority(ctx, in)
|
||||
}
|
||||
info := &grpc.UnaryServerInfo{
|
||||
Server: srv,
|
||||
FullMethod: "/controller.api.services.v1.WorkerService/ReinitializeCertificateAuthority",
|
||||
}
|
||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||
return srv.(WorkerServiceServer).ReinitializeCertificateAuthority(ctx, req.(*ReinitializeCertificateAuthorityRequest))
|
||||
}
|
||||
return interceptor(ctx, in, info, handler)
|
||||
}
|
||||
|
||||
// WorkerService_ServiceDesc is the grpc.ServiceDesc for WorkerService service.
|
||||
// It's only intended for direct use with grpc.RegisterService,
|
||||
// and not to be introspected or modified (even as a copy)
|
||||
@@ -457,6 +525,14 @@ var WorkerService_ServiceDesc = grpc.ServiceDesc{
|
||||
MethodName: "RemoveWorkerTags",
|
||||
Handler: _WorkerService_RemoveWorkerTags_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "ReadCertificateAuthority",
|
||||
Handler: _WorkerService_ReadCertificateAuthority_Handler,
|
||||
},
|
||||
{
|
||||
MethodName: "ReinitializeCertificateAuthority",
|
||||
Handler: _WorkerService_ReinitializeCertificateAuthority_Handler,
|
||||
},
|
||||
},
|
||||
Streams: []grpc.StreamDesc{},
|
||||
Metadata: "controller/api/services/v1/worker_service.proto",
|
||||
|
||||
@@ -94,6 +94,8 @@ type ServerWorkerStatus struct {
|
||||
Tags []*TagPair `protobuf:"bytes,40,rep,name=tags,proto3" json:"tags,omitempty"`
|
||||
// The key id for this worker, if applicable (optional)
|
||||
KeyId string `protobuf:"bytes,50,opt,name=key_id,json=keyId,proto3" json:"key_id,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
// The version of Boundary the worker binary is running
|
||||
ReleaseVersion string `protobuf:"bytes,60,opt,name=release_version,proto3" json:"release_version,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
func (x *ServerWorkerStatus) Reset() {
|
||||
@@ -170,6 +172,13 @@ func (x *ServerWorkerStatus) GetKeyId() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *ServerWorkerStatus) GetReleaseVersion() string {
|
||||
if x != nil {
|
||||
return x.ReleaseVersion
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
var File_controller_servers_v1_servers_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_controller_servers_v1_servers_proto_rawDesc = []byte{
|
||||
@@ -180,7 +189,7 @@ var file_controller_servers_v1_servers_proto_rawDesc = []byte{
|
||||
0x54, 0x61, 0x67, 0x50, 0x61, 0x69, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22,
|
||||
0xcc, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72,
|
||||
0xf6, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72,
|
||||
0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63,
|
||||
0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x75, 0x62, 0x6c, 0x69,
|
||||
0x63, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28,
|
||||
@@ -192,12 +201,15 @@ var file_controller_servers_v1_servers_proto_rawDesc = []byte{
|
||||
0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x73,
|
||||
0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x67, 0x50, 0x61, 0x69,
|
||||
0x72, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x6b, 0x65, 0x79, 0x5f, 0x69,
|
||||
0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x42, 0x47,
|
||||
0x5a, 0x45, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73,
|
||||
0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f,
|
||||
0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x6f, 0x6e,
|
||||
0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x3b,
|
||||
0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x64, 0x18, 0x32, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x28,
|
||||
0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f,
|
||||
0x6e, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65,
|
||||
0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x47, 0x5a, 0x45, 0x67, 0x69, 0x74, 0x68,
|
||||
0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70,
|
||||
0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e,
|
||||
0x61, 0x6c, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65,
|
||||
0x72, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x73, 0x3b, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72,
|
||||
0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@@ -791,11 +791,11 @@ func Test_AnonRestrictions(t *testing.T) {
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
require, assert := require.New(t), assert.New(t)
|
||||
for i := resource.Type(1); i <= resource.CredentialLibrary; i++ {
|
||||
for i := resource.Type(1); i <= resource.Credential; i++ {
|
||||
if i == resource.Controller || i == resource.Worker {
|
||||
continue
|
||||
}
|
||||
for j := action.Type(1); j <= action.CreateControllerLed; j++ {
|
||||
for j := action.Type(1); j <= action.ReadCertificateAuthority; j++ {
|
||||
res := Resource{
|
||||
ScopeId: scope.Global.String(),
|
||||
Id: "foobar",
|
||||
|
||||
@@ -86,6 +86,27 @@ message Worker {
|
||||
// Output only. The api tags set for the worker.
|
||||
map<string, google.protobuf.ListValue> api_tags = 180 [json_name = "api_tags"]; // @gotags: `class:"public"`
|
||||
|
||||
// Output only. The version of the Boundary binary the worker is running.
|
||||
string release_version = 190 [json_name = "release_version"]; // @gotags: `class:"public"`
|
||||
|
||||
// Output only. The available actions on this resource for the requester.
|
||||
repeated string authorized_actions = 300 [json_name = "authorized_actions"]; // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
message Certificate {
|
||||
// Output only. The ID of the certificate
|
||||
string id = 10; // @gotags: `class:"public"`
|
||||
|
||||
// Output only. The public key of the cert authority
|
||||
string public_key_sha256 = 20; // @gotags: `class:"public"`
|
||||
|
||||
// Output only. The time before which this CA is invalid
|
||||
google.protobuf.Timestamp not_before_time = 30; // @gotags: `class:"public"`
|
||||
|
||||
// Output only. The time after which this CA is invalid
|
||||
google.protobuf.Timestamp not_after_time = 40; // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
message CertificateAuthority {
|
||||
repeated Certificate certs = 10; // @gotags: `class:"public"`
|
||||
}
|
||||
@@ -141,6 +141,28 @@ service WorkerService {
|
||||
summary: "Removes api tags from an existing Worker."
|
||||
};
|
||||
}
|
||||
|
||||
// ReadCertificateAuthority returns the current and next set of root certificates
|
||||
rpc ReadCertificateAuthority(ReadCertificateAuthorityRequest) returns (ReadCertificateAuthorityResponse) {
|
||||
option (google.api.http) = {
|
||||
get: "/v1/workers:read-certificate-authority"
|
||||
response_body: "item"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
summary: "Retrieves root certificates used for worker authentication."
|
||||
};
|
||||
}
|
||||
|
||||
// ReinitializeCas removes both current and next root certs and replaces them with a new set
|
||||
rpc ReinitializeCertificateAuthority(ReinitializeCertificateAuthorityRequest) returns (ReinitializeCertificateAuthorityResponse) {
|
||||
option (google.api.http) = {
|
||||
post: "/v1/workers:reinitialize-certificate-authority"
|
||||
response_body: "item"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
summary: "Reinitializes root certificates used for worker authentication."
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
message GetWorkerRequest {
|
||||
@@ -230,3 +252,19 @@ message RemoveWorkerTagsRequest {
|
||||
message RemoveWorkerTagsResponse {
|
||||
resources.workers.v1.Worker item = 1;
|
||||
}
|
||||
|
||||
message ReadCertificateAuthorityRequest {
|
||||
string scope_id = 1; // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
message ReadCertificateAuthorityResponse {
|
||||
resources.workers.v1.CertificateAuthority item = 1;
|
||||
}
|
||||
|
||||
message ReinitializeCertificateAuthorityRequest {
|
||||
string scope_id = 1; // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
message ReinitializeCertificateAuthorityResponse {
|
||||
resources.workers.v1.CertificateAuthority item = 1;
|
||||
}
|
||||
@@ -29,4 +29,7 @@ message ServerWorkerStatus {
|
||||
|
||||
// The key id for this worker, if applicable (optional)
|
||||
string key_id = 50; // @gotags: `class:"public"`
|
||||
|
||||
// The version of Boundary the worker binary is running
|
||||
string release_version = 60 [json_name = "release_version"]; // @gotags: `class:"public"`
|
||||
}
|
||||
@@ -54,6 +54,10 @@ message Worker {
|
||||
// The type of the worker, denoted by how it authenticates: pki or kms.
|
||||
// @inject_tag: `gorm:"not_null"`
|
||||
string type = 130;
|
||||
|
||||
// The version of Boundary the worker binary is running
|
||||
// @inject_tag: `gorm:"default:null"`
|
||||
string release_version = 140;
|
||||
}
|
||||
|
||||
// WorkerTag is a tag for a worker. The primary key is comprised of the
|
||||
|
||||
@@ -71,7 +71,7 @@ func (r *rotateRootsJob) Status() scheduler.JobStatus {
|
||||
func (r *rotateRootsJob) Run(ctx context.Context) error {
|
||||
const op = "server.(rotateRootsJob).Run"
|
||||
|
||||
err := server.RotateRoots(ctx, r.workerAuthRepo)
|
||||
_, err := server.RotateRoots(ctx, r.workerAuthRepo)
|
||||
if err != nil {
|
||||
return errors.Wrap(ctx, err, op)
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ type options struct {
|
||||
withRoot string
|
||||
withStopAfter uint
|
||||
WithCreateControllerLedActivationToken bool
|
||||
withReleaseVersion string
|
||||
}
|
||||
|
||||
func getDefaultOptions() options {
|
||||
@@ -196,3 +197,10 @@ func WithCreateControllerLedActivationToken(with bool) Option {
|
||||
o.WithCreateControllerLedActivationToken = with
|
||||
}
|
||||
}
|
||||
|
||||
// WithRelease version provides an optional release version
|
||||
func WithReleaseVersion(version string) Option {
|
||||
return func(o *options) {
|
||||
o.withReleaseVersion = version
|
||||
}
|
||||
}
|
||||
@@ -182,4 +182,10 @@ func Test_GetOpts(t *testing.T) {
|
||||
opts = GetOpts(WithCreateControllerLedActivationToken(true))
|
||||
assert.True(t, opts.WithCreateControllerLedActivationToken)
|
||||
})
|
||||
t.Run("WithReleaseVersion", func(t *testing.T) {
|
||||
opts := getDefaultOptions()
|
||||
assert.Empty(t, opts.withReleaseVersion)
|
||||
opts = GetOpts(WithReleaseVersion("version"))
|
||||
assert.Equal(t, "version", opts.withReleaseVersion)
|
||||
})
|
||||
}
|
||||
@@ -294,7 +294,7 @@ func (r *Repository) UpsertWorkerStatus(ctx context.Context, worker *Worker, opt
|
||||
// "description" since we want description changes for PKI-based
|
||||
// workers to come via API only. We can't really guard on this
|
||||
// in the DB so we need to be sure to not include it here.
|
||||
n, err := w.Update(ctx, workerClone, []string{"address"}, nil)
|
||||
n, err := w.Update(ctx, workerClone, []string{"address", "ReleaseVersion"}, nil)
|
||||
if err != nil {
|
||||
return errors.Wrap(ctx, err, op, errors.WithMsg("unable to update status of pki worker"))
|
||||
}
|
||||
@@ -311,7 +311,7 @@ func (r *Repository) UpsertWorkerStatus(ctx context.Context, worker *Worker, opt
|
||||
workerClone.Type = KmsWorkerType.String()
|
||||
workerCreateConflict := &db.OnConflict{
|
||||
Target: db.Columns{"public_id"},
|
||||
Action: append(db.SetColumns([]string{"address"}),
|
||||
Action: append(db.SetColumns([]string{"address", "release_version"}),
|
||||
db.SetColumnValues(map[string]interface{}{"last_status_time": "now()"})...),
|
||||
}
|
||||
var withRowsAffected int64
|
||||
|
||||
@@ -263,7 +263,8 @@ func TestUpsertWorkerStatus(t *testing.T) {
|
||||
t.Run("create an initial kms worker and update status", func(t *testing.T) {
|
||||
wStatus1 := server.NewWorker(scope.Global.String(),
|
||||
server.WithAddress("address"), server.WithName("config_name1"),
|
||||
server.WithDescription("kms_description1"))
|
||||
server.WithDescription("kms_description1"),
|
||||
)
|
||||
worker, err := repo.UpsertWorkerStatus(ctx, wStatus1)
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -274,16 +275,18 @@ func TestUpsertWorkerStatus(t *testing.T) {
|
||||
assert.Equal(t, worker.GetLastStatusTime().AsTime(), worker.GetUpdateTime().AsTime())
|
||||
assert.Equal(t, uint32(1), worker.Version)
|
||||
assert.Equal(t, "address", worker.GetAddress())
|
||||
assert.NotNil(t, worker.ReleaseVersion)
|
||||
|
||||
// update again and see updated last status time
|
||||
wStatus2 := server.NewWorker(scope.Global.String(),
|
||||
server.WithAddress("new_address"), server.WithName("config_name1"))
|
||||
server.WithAddress("new_address"), server.WithName("config_name1"), server.WithReleaseVersion("test-version"))
|
||||
worker, err = repo.UpsertWorkerStatus(ctx, wStatus2)
|
||||
require.NoError(t, err)
|
||||
assert.Greater(t, worker.GetLastStatusTime().AsTime(), worker.GetCreateTime().AsTime())
|
||||
assert.Equal(t, "config_name1", worker.Name)
|
||||
// Version does not change for status updates
|
||||
assert.Equal(t, uint32(1), worker.Version)
|
||||
assert.Equal(t, "test-version", wStatus2.ReleaseVersion)
|
||||
assert.Equal(t, "new_address", worker.GetAddress())
|
||||
})
|
||||
|
||||
@@ -293,8 +296,9 @@ func TestUpsertWorkerStatus(t *testing.T) {
|
||||
|
||||
t.Run("update status for pki worker", func(t *testing.T) {
|
||||
wStatus1 := server.NewWorker(scope.Global.String(),
|
||||
server.WithAddress("pki_address"), server.WithDescription("pki_description2"))
|
||||
worker, err := repo.UpsertWorkerStatus(ctx, wStatus1, server.WithKeyId(pkiWorkerKeyId))
|
||||
server.WithAddress("pki_address"), server.WithDescription("pki_description2"),
|
||||
server.WithReleaseVersion("test-version"))
|
||||
worker, err := repo.UpsertWorkerStatus(ctx, wStatus1, server.WithKeyId(pkiWorkerKeyId), server.WithReleaseVersion("test-version"))
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.True(t, strings.HasPrefix(worker.GetPublicId(), "w_"))
|
||||
@@ -305,6 +309,7 @@ func TestUpsertWorkerStatus(t *testing.T) {
|
||||
assert.Equal(t, worker.GetLastStatusTime().AsTime(), worker.GetUpdateTime().AsTime())
|
||||
assert.Equal(t, uint32(1), worker.Version)
|
||||
assert.Equal(t, "pki_address", worker.GetAddress())
|
||||
assert.Equal(t, "test-version", worker.ReleaseVersion)
|
||||
})
|
||||
|
||||
failureCases := []struct {
|
||||
|
||||
@@ -229,7 +229,7 @@ func (r *WorkerAuthRepositoryStorage) convertRootCertificate(ctx context.Context
|
||||
rootCert.NotValidBefore = timestamp.New(cert.NotBefore.AsTime())
|
||||
rootCert.PublicKey = cert.PublicKeyPkix
|
||||
rootCert.State = cert.Id
|
||||
rootCert.IssuingCa = ca_id
|
||||
rootCert.IssuingCa = CaId
|
||||
|
||||
// Encrypt the private key
|
||||
databaseWrapper, err := r.kms.GetWrapper(ctx, scope.Global.String(), kms.KeyPurposeDatabase)
|
||||
@@ -280,7 +280,7 @@ func (r *WorkerAuthRepositoryStorage) storeRootCertificates(ctx context.Context,
|
||||
}
|
||||
certAuthority := &CertificateAuthority{
|
||||
CertificateAuthority: &store.CertificateAuthority{
|
||||
PrivateId: ca_id,
|
||||
PrivateId: CaId,
|
||||
Version: version + 1,
|
||||
},
|
||||
}
|
||||
@@ -698,7 +698,7 @@ func (r *WorkerAuthRepositoryStorage) removeCertificateAuthority(ctx context.Con
|
||||
}
|
||||
certAuthority := &CertificateAuthority{
|
||||
CertificateAuthority: &store.CertificateAuthority{
|
||||
PrivateId: ca_id,
|
||||
PrivateId: CaId,
|
||||
Version: version + 1,
|
||||
},
|
||||
}
|
||||
@@ -730,6 +730,7 @@ func (r *WorkerAuthRepositoryStorage) removeCertificateAuthority(ctx context.Con
|
||||
if err != nil {
|
||||
return errors.Wrap(ctx, err, op)
|
||||
}
|
||||
cert.State.Fields["version"] = structpb.NewNumberValue(float64(version + 1))
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ func TestStoreRootCertificates(t *testing.T) {
|
||||
require.NoError(err)
|
||||
|
||||
// Fail to find root certificates prior to rotation/ creation
|
||||
noCertAuth := &types.RootCertificates{Id: ca_id}
|
||||
noCertAuth := &types.RootCertificates{Id: CaId}
|
||||
err = workerAuthRepo.Load(ctx, noCertAuth)
|
||||
require.Error(err)
|
||||
rootIds, err := workerAuthRepo.List(ctx, (*types.RootCertificate)(nil))
|
||||
@@ -64,7 +64,7 @@ func TestStoreRootCertificates(t *testing.T) {
|
||||
assert.Len(rootIds, 2)
|
||||
|
||||
// Load stored roots
|
||||
certAuthority := &types.RootCertificates{Id: ca_id}
|
||||
certAuthority := &types.RootCertificates{Id: CaId}
|
||||
err = workerAuthRepo.Load(ctx, certAuthority)
|
||||
require.NoError(err)
|
||||
require.NotNil(certAuthority.GetNext())
|
||||
@@ -103,7 +103,7 @@ func TestStoreCertAuthorityVersioning(t *testing.T) {
|
||||
roots, err := rotation.RotateRootCertificates(ctx, workerAuthRepo)
|
||||
require.NoError(err)
|
||||
|
||||
cAuth2 := &types.RootCertificates{Id: ca_id}
|
||||
cAuth2 := &types.RootCertificates{Id: CaId}
|
||||
err = workerAuthRepo.Load(ctx, cAuth2)
|
||||
require.NoError(err)
|
||||
var result2 rootCertificatesVersion
|
||||
@@ -118,7 +118,7 @@ func TestStoreCertAuthorityVersioning(t *testing.T) {
|
||||
badState, err := structpb.NewStruct(s.Map())
|
||||
require.NoError(err)
|
||||
newRoots2 := &types.RootCertificates{
|
||||
Id: ca_id,
|
||||
Id: CaId,
|
||||
Next: roots.Next,
|
||||
Current: roots.Current,
|
||||
}
|
||||
@@ -127,7 +127,7 @@ func TestStoreCertAuthorityVersioning(t *testing.T) {
|
||||
require.Error(err)
|
||||
|
||||
// Remove CA, expect updated version
|
||||
cAuthRemove := &types.RootCertificates{Id: ca_id}
|
||||
cAuthRemove := &types.RootCertificates{Id: CaId}
|
||||
removeVersion := &rootCertificatesVersion{Version: uint32(2)}
|
||||
s = structs.New(removeVersion)
|
||||
s.TagName = "mapstructure"
|
||||
|
||||
@@ -12,8 +12,8 @@ import (
|
||||
)
|
||||
|
||||
// The CertificateAuthority id will always be set to "roots".
|
||||
// The const ca_id contains this value
|
||||
const ca_id = "roots"
|
||||
// The const CaId contains this value
|
||||
const CaId = "roots"
|
||||
|
||||
// CertificateAuthority is a versioned entity used to lock the database when rotation RootCertificates
|
||||
type CertificateAuthority struct {
|
||||
@@ -24,7 +24,7 @@ type CertificateAuthority struct {
|
||||
func newCertificateAuthority() *CertificateAuthority {
|
||||
ca := &CertificateAuthority{
|
||||
CertificateAuthority: &store.CertificateAuthority{
|
||||
PrivateId: ca_id,
|
||||
PrivateId: CaId,
|
||||
},
|
||||
}
|
||||
return ca
|
||||
@@ -96,7 +96,7 @@ func newRootCertificate(ctx context.Context, serialNumber uint64, certificate []
|
||||
PrivateKey: rootCertificateKeys.privateKey,
|
||||
KeyId: keyId,
|
||||
State: string(state),
|
||||
IssuingCa: ca_id,
|
||||
IssuingCa: CaId,
|
||||
},
|
||||
}
|
||||
return l, nil
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/hashicorp/boundary/internal/errors"
|
||||
"github.com/hashicorp/nodeenrollment"
|
||||
"github.com/hashicorp/nodeenrollment/types"
|
||||
)
|
||||
|
||||
// ReinitializeRoots is a domain service function that removes both root certificates and then
|
||||
// calls RotateRoots to generate new root certificates.
|
||||
// Accepts the nodeenrollment option, WithCertificateLifetime(time.Duration) to specify the lifetime
|
||||
// of the generated cert(s)
|
||||
func ReinitializeRoots(ctx context.Context, workerAuthRepo *WorkerAuthRepositoryStorage, opt ...nodeenrollment.Option) (*types.RootCertificates, error) {
|
||||
const op = "server.ReinitializeRoots"
|
||||
if workerAuthRepo == nil {
|
||||
return nil, errors.New(ctx, errors.InvalidParameter, op, "missing workerAuthRepo")
|
||||
}
|
||||
|
||||
// Use WithReinitializeRoots to ensure existing roots are removed before rotation
|
||||
opt = append(opt, nodeenrollment.WithReinitializeRoots(true))
|
||||
roots, err := RotateRoots(ctx, workerAuthRepo, opt...)
|
||||
if err != nil {
|
||||
return nil, errors.Wrap(ctx, err, op)
|
||||
}
|
||||
|
||||
return roots, nil
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
"context"
|
||||
"crypto/rand"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/boundary/internal/db"
|
||||
"github.com/hashicorp/boundary/internal/kms"
|
||||
"github.com/hashicorp/boundary/internal/types/scope"
|
||||
"github.com/hashicorp/nodeenrollment"
|
||||
"github.com/hashicorp/nodeenrollment/types"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestReinitializeRoots(t *testing.T) {
|
||||
require, assert := require.New(t), assert.New(t)
|
||||
ctx := context.Background()
|
||||
wrapper := db.TestWrapper(t)
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
kmsCache := kms.TestKms(t, conn, wrapper)
|
||||
err := kmsCache.CreateKeys(context.Background(), scope.Global.String(), kms.WithRandomReader(rand.Reader))
|
||||
require.NoError(err)
|
||||
|
||||
rw := db.New(conn)
|
||||
workerAuthRepo, err := NewRepositoryStorage(ctx, rw, rw, kmsCache)
|
||||
require.NoError(err)
|
||||
|
||||
// Check that we have no roots first
|
||||
rootIds, err := workerAuthRepo.List(ctx, (*types.RootCertificate)(nil))
|
||||
require.NoError(err)
|
||||
assert.Len(rootIds, 0)
|
||||
|
||||
// Generate roots
|
||||
_, err = RotateRoots(ctx, workerAuthRepo, nodeenrollment.WithCertificateLifetime(time.Second*5))
|
||||
require.NoError(err)
|
||||
|
||||
// Check that we have roots now
|
||||
rootIds, err = workerAuthRepo.List(ctx, (*types.RootCertificate)(nil))
|
||||
require.NoError(err)
|
||||
assert.Len(rootIds, 2)
|
||||
certAuthority := &types.RootCertificates{Id: CaId}
|
||||
err = workerAuthRepo.Load(ctx, certAuthority)
|
||||
require.NoError(err)
|
||||
require.NotNil(certAuthority.GetNext())
|
||||
require.NotNil(certAuthority.GetCurrent())
|
||||
|
||||
initialNext := certAuthority.GetNext()
|
||||
initialCurrent := certAuthority.GetCurrent()
|
||||
|
||||
// Reinitialize roots and assert that they're entirely new
|
||||
newCerts, err := ReinitializeRoots(ctx, workerAuthRepo, nodeenrollment.WithCertificateLifetime(time.Second*5))
|
||||
require.NoError(err)
|
||||
|
||||
require.NotNil(newCerts.GetNext())
|
||||
require.NotNil(newCerts.GetCurrent())
|
||||
reinitNext := newCerts.GetNext()
|
||||
reinitCurrent := newCerts.GetCurrent()
|
||||
|
||||
// Next and current should have changed
|
||||
assert.NotEqual(initialNext.PublicKeyPkix, reinitNext.PublicKeyPkix)
|
||||
assert.NotEqual(initialCurrent.PublicKeyPkix, reinitCurrent.PublicKeyPkix)
|
||||
assert.NotEqual(initialNext.PublicKeyPkix, reinitCurrent.PublicKeyPkix)
|
||||
assert.NotEqual(initialCurrent.PublicKeyPkix, reinitNext.PublicKeyPkix)
|
||||
}
|
||||
|
||||
func TestReinitializeFailure(t *testing.T) {
|
||||
require := require.New(t)
|
||||
ctx := context.Background()
|
||||
wrapper := db.TestWrapper(t)
|
||||
conn, _ := db.TestSetup(t, "postgres")
|
||||
|
||||
kmsCache := kms.TestKms(t, conn, wrapper)
|
||||
err := kmsCache.CreateKeys(context.Background(), scope.Global.String(), kms.WithRandomReader(rand.Reader))
|
||||
require.NoError(err)
|
||||
|
||||
workerAuthRepo, err := NewRepositoryStorage(ctx, &db.Db{}, &db.Db{}, kmsCache)
|
||||
require.NoError(err)
|
||||
|
||||
_, err = ReinitializeRoots(ctx, workerAuthRepo)
|
||||
require.Error(err)
|
||||
}
|
||||
@@ -6,22 +6,31 @@ import (
|
||||
"github.com/hashicorp/boundary/internal/errors"
|
||||
"github.com/hashicorp/nodeenrollment"
|
||||
"github.com/hashicorp/nodeenrollment/rotation"
|
||||
"github.com/hashicorp/nodeenrollment/types"
|
||||
)
|
||||
|
||||
// RotateRoots is a domain service function that initiates a rotation of root certificates
|
||||
// via a call to the nodenenrollment RotateRootCertificates function
|
||||
// Accepts the nodeenrollment option, WithCertificateLifetime(time.Duration) to specify the lifetime
|
||||
// of the generated cert(s)
|
||||
func RotateRoots(ctx context.Context, workerAuthRepo *WorkerAuthRepositoryStorage, opt ...nodeenrollment.Option) error {
|
||||
func RotateRoots(ctx context.Context, workerAuthRepo *WorkerAuthRepositoryStorage, opt ...nodeenrollment.Option) (*types.RootCertificates, error) {
|
||||
const op = "server.RotateRoots"
|
||||
if workerAuthRepo == nil {
|
||||
return errors.New(ctx, errors.InvalidParameter, op, "missing workerAuthRepo")
|
||||
return nil, errors.New(ctx, errors.InvalidParameter, op, "missing workerAuthRepo")
|
||||
}
|
||||
|
||||
_, err := rotation.RotateRootCertificates(ctx, workerAuthRepo, opt...)
|
||||
// Get current root certs so we can pass along the version
|
||||
rootCerts := &types.RootCertificates{Id: CaId}
|
||||
err := workerAuthRepo.Load(ctx, rootCerts)
|
||||
if err != nil && err != nodeenrollment.ErrNotFound {
|
||||
return nil, errors.Wrap(ctx, err, op)
|
||||
}
|
||||
opt = append(opt, nodeenrollment.WithState(rootCerts.GetState()))
|
||||
|
||||
roots, err := rotation.RotateRootCertificates(ctx, workerAuthRepo, opt...)
|
||||
if err != nil {
|
||||
return errors.Wrap(ctx, err, op)
|
||||
return nil, errors.Wrap(ctx, err, op)
|
||||
}
|
||||
|
||||
return nil
|
||||
return roots, nil
|
||||
}
|
||||
@@ -34,40 +34,37 @@ func TestRotateRoots(t *testing.T) {
|
||||
assert.Len(rootIds, 0)
|
||||
|
||||
// Generate roots
|
||||
err = RotateRoots(ctx, workerAuthRepo, nodeenrollment.WithCertificateLifetime(time.Second*5))
|
||||
roots, err := RotateRoots(ctx, workerAuthRepo, nodeenrollment.WithCertificateLifetime(time.Second*5))
|
||||
require.NoError(err)
|
||||
|
||||
// Check that we have roots now
|
||||
rootIds, err = workerAuthRepo.List(ctx, (*types.RootCertificate)(nil))
|
||||
require.NoError(err)
|
||||
assert.Len(rootIds, 2)
|
||||
certAuthority := &types.RootCertificates{Id: ca_id}
|
||||
certAuthority := &types.RootCertificates{Id: CaId}
|
||||
err = workerAuthRepo.Load(ctx, certAuthority)
|
||||
require.NoError(err)
|
||||
require.NotNil(certAuthority.GetNext())
|
||||
require.NotNil(certAuthority.GetCurrent())
|
||||
|
||||
initialNext := certAuthority.GetNext()
|
||||
initialCurrent := certAuthority.GetCurrent()
|
||||
initialNext := roots.GetNext()
|
||||
initialCurrent := roots.GetCurrent()
|
||||
|
||||
// Rotate roots and assert that they've rotated
|
||||
err = RotateRoots(ctx, workerAuthRepo, nodeenrollment.WithCertificateLifetime(time.Second*5))
|
||||
newRoots, err := RotateRoots(ctx, workerAuthRepo, nodeenrollment.WithCertificateLifetime(time.Second*5))
|
||||
require.NoError(err)
|
||||
|
||||
certAuthority2 := &types.RootCertificates{Id: ca_id}
|
||||
err = workerAuthRepo.Load(ctx, certAuthority2)
|
||||
require.NoError(err)
|
||||
require.NotNil(certAuthority2.GetNext())
|
||||
require.NotNil(certAuthority2.GetCurrent())
|
||||
rotatedNext := certAuthority2.GetNext()
|
||||
rotatedCurrent := certAuthority2.GetCurrent()
|
||||
require.NotNil(newRoots.GetNext())
|
||||
require.NotNil(newRoots.GetCurrent())
|
||||
rotatedNext := newRoots.GetNext()
|
||||
rotatedCurrent := newRoots.GetCurrent()
|
||||
|
||||
// Next and current should have changed
|
||||
assert.NotEqual(initialNext, rotatedNext)
|
||||
assert.NotEqual(initialCurrent, rotatedCurrent)
|
||||
assert.NotEqual(initialNext.PublicKeyPkix, rotatedNext.PublicKeyPkix)
|
||||
assert.NotEqual(initialCurrent.PublicKeyPkix, rotatedCurrent.PublicKeyPkix)
|
||||
|
||||
// And the old next root should now be current
|
||||
assert.Equal(initialNext, rotatedCurrent)
|
||||
assert.Equal(initialNext.PublicKeyPkix, rotatedCurrent.PublicKeyPkix)
|
||||
}
|
||||
|
||||
func TestRotateRootsFailure(t *testing.T) {
|
||||
@@ -83,6 +80,6 @@ func TestRotateRootsFailure(t *testing.T) {
|
||||
workerAuthRepo, err := NewRepositoryStorage(ctx, &db.Db{}, &db.Db{}, kmsCache)
|
||||
require.NoError(err)
|
||||
|
||||
err = RotateRoots(ctx, workerAuthRepo)
|
||||
_, err = RotateRoots(ctx, workerAuthRepo)
|
||||
require.Error(err)
|
||||
}
|
||||
@@ -58,6 +58,9 @@ type Worker struct {
|
||||
// The type of the worker, denoted by how it authenticates: pki or kms.
|
||||
// @inject_tag: `gorm:"not_null"`
|
||||
Type string `protobuf:"bytes,130,opt,name=type,proto3" json:"type,omitempty" gorm:"not_null"`
|
||||
// The version of Boundary the worker binary is running
|
||||
// @inject_tag: `gorm:"default:null"`
|
||||
ReleaseVersion string `protobuf:"bytes,140,opt,name=release_version,json=releaseVersion,proto3" json:"release_version,omitempty" gorm:"default:null"`
|
||||
}
|
||||
|
||||
func (x *Worker) Reset() {
|
||||
@@ -162,6 +165,13 @@ func (x *Worker) GetType() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Worker) GetReleaseVersion() string {
|
||||
if x != nil {
|
||||
return x.ReleaseVersion
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
// WorkerTag is a tag for a worker. The primary key is comprised of the
|
||||
// worker_id, key, value, and source.
|
||||
type WorkerTag struct {
|
||||
@@ -257,7 +267,7 @@ var file_controller_storage_servers_store_v1_worker_proto_rawDesc = []byte{
|
||||
0x6f, 0x74, 0x6f, 0x1a, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f,
|
||||
0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
|
||||
0x70, 0x2f, 0x76, 0x31, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe1, 0x03, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8b, 0x04, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12,
|
||||
0x1b, 0x0a, 0x09, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x08, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x04,
|
||||
0x6e, 0x61, 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x42, 0x10, 0xc2, 0xdd, 0x29, 0x0c,
|
||||
@@ -287,18 +297,21 @@ var file_controller_storage_servers_store_v1_worker_proto_rawDesc = []byte{
|
||||
0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74,
|
||||
0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54,
|
||||
0x69, 0x6d, 0x65, 0x12, 0x13, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x82, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x68, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x54, 0x61, 0x67, 0x12, 0x1b, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f,
|
||||
0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72,
|
||||
0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f,
|
||||
0x75, 0x72, 0x63, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72,
|
||||
0x63, 0x65, 0x42, 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
|
||||
0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64,
|
||||
0x61, 0x72, 0x79, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x73, 0x65, 0x72,
|
||||
0x76, 0x65, 0x72, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x3b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62,
|
||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x0f, 0x72, 0x65, 0x6c, 0x65,
|
||||
0x61, 0x73, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x8c, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69,
|
||||
0x6f, 0x6e, 0x22, 0x68, 0x0a, 0x09, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x54, 0x61, 0x67, 0x12,
|
||||
0x1b, 0x0a, 0x09, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x08, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03,
|
||||
0x6b, 0x65, 0x79, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
|
||||
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x28,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x42, 0x3b, 0x5a, 0x39,
|
||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x69, 0x6e,
|
||||
0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x2f, 0x73, 0x74,
|
||||
0x6f, 0x72, 0x65, 0x3b, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
"github.com/hashicorp/boundary/internal/kms"
|
||||
"github.com/hashicorp/boundary/internal/server/store"
|
||||
"github.com/hashicorp/boundary/internal/types/scope"
|
||||
"github.com/hashicorp/boundary/version"
|
||||
wrapping "github.com/hashicorp/go-kms-wrapping/v2"
|
||||
"github.com/hashicorp/nodeenrollment"
|
||||
"github.com/hashicorp/nodeenrollment/registration"
|
||||
@@ -111,10 +112,13 @@ func TestKmsWorker(t *testing.T, conn *db.DB, wrapper wrapping.Wrapper, opt ...O
|
||||
if opts.withAddress != "" {
|
||||
address = opts.withAddress
|
||||
}
|
||||
versionInfo := version.Get()
|
||||
relVer := versionInfo.FullVersionNumber(false)
|
||||
wrk := NewWorker(scope.Global.String(),
|
||||
WithName(name),
|
||||
WithAddress(address),
|
||||
WithDescription(opts.withDescription))
|
||||
WithDescription(opts.withDescription),
|
||||
WithReleaseVersion(relVer))
|
||||
wrk, err = serversRepo.UpsertWorkerStatus(ctx, wrk)
|
||||
require.NoError(t, err)
|
||||
require.NotNil(t, wrk)
|
||||
|
||||
@@ -79,10 +79,11 @@ func NewWorker(scopeId string, opt ...Option) *Worker {
|
||||
opts := GetOpts(opt...)
|
||||
return &Worker{
|
||||
Worker: &store.Worker{
|
||||
ScopeId: scopeId,
|
||||
Name: opts.withName,
|
||||
Description: opts.withDescription,
|
||||
Address: opts.withAddress,
|
||||
ScopeId: scopeId,
|
||||
Name: opts.withName,
|
||||
Description: opts.withDescription,
|
||||
Address: opts.withAddress,
|
||||
ReleaseVersion: opts.withReleaseVersion,
|
||||
},
|
||||
inputTags: opts.withWorkerTags,
|
||||
}
|
||||
@@ -192,6 +193,7 @@ type workerAggregate struct {
|
||||
Address string
|
||||
Version uint32
|
||||
Type string
|
||||
ReleaseVersion string
|
||||
ApiTags string
|
||||
ActiveConnectionCount uint32
|
||||
// Config Fields
|
||||
@@ -213,6 +215,7 @@ func (a *workerAggregate) toWorker(ctx context.Context) (*Worker, error) {
|
||||
Version: a.Version,
|
||||
LastStatusTime: a.LastStatusTime,
|
||||
Type: a.Type,
|
||||
ReleaseVersion: a.ReleaseVersion,
|
||||
},
|
||||
activeConnectionCount: a.ActiveConnectionCount,
|
||||
}
|
||||
|
||||
@@ -72,6 +72,7 @@ func TestWorkerAggregate(t *testing.T) {
|
||||
assert.Equal(t, "address", got.GetAddress())
|
||||
assert.Equal(t, uint32(1), got.GetVersion())
|
||||
assert.NotNil(t, got.GetLastStatusTime())
|
||||
assert.NotNil(t, got.GetReleaseVersion())
|
||||
assert.Empty(t, got.CanonicalTags())
|
||||
})
|
||||
|
||||
@@ -90,6 +91,7 @@ func TestWorkerAggregate(t *testing.T) {
|
||||
assert.Equal(t, id, got.GetPublicId())
|
||||
assert.Equal(t, uint32(1), got.GetVersion())
|
||||
assert.NotNil(t, got.GetLastStatusTime())
|
||||
assert.NotNil(t, got.GetReleaseVersion())
|
||||
assert.Equal(t, strings.ToLower(id), got.GetName())
|
||||
assert.Equal(t, "address", got.GetAddress())
|
||||
})
|
||||
@@ -115,6 +117,7 @@ func TestWorkerAggregate(t *testing.T) {
|
||||
assert.Equal(t, id, got.GetPublicId())
|
||||
assert.Equal(t, uint32(1), got.GetVersion())
|
||||
assert.NotNil(t, got.GetLastStatusTime())
|
||||
assert.NotNil(t, got.GetReleaseVersion())
|
||||
assert.Empty(t, got.apiTags)
|
||||
assert.Equal(t, got.configTags, []*Tag{{Key: "key", Value: "val"}})
|
||||
})
|
||||
|
||||
@@ -75,7 +75,7 @@ func TestRootCertStore(t *testing.T) {
|
||||
NotValidAfter: afterTimestamp,
|
||||
KeyId: testKey,
|
||||
State: "next",
|
||||
IssuingCa: ca_id,
|
||||
IssuingCa: CaId,
|
||||
},
|
||||
wantErr: false,
|
||||
},
|
||||
@@ -99,7 +99,7 @@ func TestRootCertStore(t *testing.T) {
|
||||
NotValidAfter: afterTimestamp,
|
||||
KeyId: testKey,
|
||||
State: "current",
|
||||
IssuingCa: ca_id,
|
||||
IssuingCa: CaId,
|
||||
},
|
||||
wantErr: false,
|
||||
},
|
||||
|
||||
+107
-100
@@ -8,112 +8,117 @@ import (
|
||||
type Type uint
|
||||
|
||||
const (
|
||||
Unknown Type = 0
|
||||
List Type = 1
|
||||
Create Type = 2
|
||||
Update Type = 3
|
||||
Read Type = 4
|
||||
Delete Type = 5
|
||||
Authenticate Type = 6
|
||||
All Type = 7
|
||||
AuthorizeSession Type = 8
|
||||
AddGrants Type = 9
|
||||
RemoveGrants Type = 10
|
||||
SetGrants Type = 11
|
||||
AddPrincipals Type = 12
|
||||
SetPrincipals Type = 13
|
||||
RemovePrincipals Type = 14
|
||||
Deauthenticate Type = 15
|
||||
AddMembers Type = 16
|
||||
SetMembers Type = 17
|
||||
RemoveMembers Type = 18
|
||||
SetPassword Type = 19
|
||||
ChangePassword Type = 20
|
||||
AddHosts Type = 21
|
||||
SetHosts Type = 22
|
||||
RemoveHosts Type = 23
|
||||
AddHostSets Type = 24 // DEPRECATED
|
||||
SetHostSets Type = 25 // DEPRECATED
|
||||
RemoveHostSets Type = 26 // DEPRECATED
|
||||
Cancel Type = 27
|
||||
AddAccounts Type = 28
|
||||
SetAccounts Type = 29
|
||||
RemoveAccounts Type = 30
|
||||
ReadSelf Type = 31
|
||||
CancelSelf Type = 32
|
||||
ChangeState Type = 33
|
||||
DeleteSelf Type = 34
|
||||
NoOp Type = 35
|
||||
AddCredentialLibraries Type = 36 // DEPRECATED
|
||||
SetCredentialLibraries Type = 37 // DEPRECATED
|
||||
RemoveCredentialLibraries Type = 38 // DEPRECATED
|
||||
AddCredentialSources Type = 39
|
||||
SetCredentialSources Type = 40
|
||||
RemoveCredentialSources Type = 41
|
||||
AddHostSources Type = 42
|
||||
SetHostSources Type = 43
|
||||
RemoveHostSources Type = 44
|
||||
CreateWorkerLed Type = 45
|
||||
AddWorkerTags Type = 46
|
||||
SetWorkerTags Type = 47
|
||||
RemoveWorkerTags Type = 48
|
||||
CreateControllerLed Type = 49
|
||||
Unknown Type = 0
|
||||
List Type = 1
|
||||
Create Type = 2
|
||||
Update Type = 3
|
||||
Read Type = 4
|
||||
Delete Type = 5
|
||||
Authenticate Type = 6
|
||||
All Type = 7
|
||||
AuthorizeSession Type = 8
|
||||
AddGrants Type = 9
|
||||
RemoveGrants Type = 10
|
||||
SetGrants Type = 11
|
||||
AddPrincipals Type = 12
|
||||
SetPrincipals Type = 13
|
||||
RemovePrincipals Type = 14
|
||||
Deauthenticate Type = 15
|
||||
AddMembers Type = 16
|
||||
SetMembers Type = 17
|
||||
RemoveMembers Type = 18
|
||||
SetPassword Type = 19
|
||||
ChangePassword Type = 20
|
||||
AddHosts Type = 21
|
||||
SetHosts Type = 22
|
||||
RemoveHosts Type = 23
|
||||
AddHostSets Type = 24 // DEPRECATED
|
||||
SetHostSets Type = 25 // DEPRECATED
|
||||
RemoveHostSets Type = 26 // DEPRECATED
|
||||
Cancel Type = 27
|
||||
AddAccounts Type = 28
|
||||
SetAccounts Type = 29
|
||||
RemoveAccounts Type = 30
|
||||
ReadSelf Type = 31
|
||||
CancelSelf Type = 32
|
||||
ChangeState Type = 33
|
||||
DeleteSelf Type = 34
|
||||
NoOp Type = 35
|
||||
AddCredentialLibraries Type = 36 // DEPRECATED
|
||||
SetCredentialLibraries Type = 37 // DEPRECATED
|
||||
RemoveCredentialLibraries Type = 38 // DEPRECATED
|
||||
AddCredentialSources Type = 39
|
||||
SetCredentialSources Type = 40
|
||||
RemoveCredentialSources Type = 41
|
||||
AddHostSources Type = 42
|
||||
SetHostSources Type = 43
|
||||
RemoveHostSources Type = 44
|
||||
CreateWorkerLed Type = 45
|
||||
AddWorkerTags Type = 46
|
||||
SetWorkerTags Type = 47
|
||||
RemoveWorkerTags Type = 48
|
||||
CreateControllerLed Type = 49
|
||||
ReinitializeCertificateAuthority Type = 50
|
||||
ReadCertificateAuthority Type = 51
|
||||
|
||||
// When adding new actions, be sure to update:
|
||||
//
|
||||
// * The Test_AnonRestrictions test
|
||||
// * The Test_AnonRestrictions test: update the following line to include the last action:
|
||||
// for j := action.Type(1); j <= action.<action>; j++ {
|
||||
)
|
||||
|
||||
var Map = map[string]Type{
|
||||
Create.String(): Create,
|
||||
List.String(): List,
|
||||
Update.String(): Update,
|
||||
Read.String(): Read,
|
||||
Delete.String(): Delete,
|
||||
Authenticate.String(): Authenticate,
|
||||
All.String(): All,
|
||||
AuthorizeSession.String(): AuthorizeSession,
|
||||
AddGrants.String(): AddGrants,
|
||||
RemoveGrants.String(): RemoveGrants,
|
||||
SetGrants.String(): SetGrants,
|
||||
AddPrincipals.String(): AddPrincipals,
|
||||
SetPrincipals.String(): SetPrincipals,
|
||||
RemovePrincipals.String(): RemovePrincipals,
|
||||
Deauthenticate.String(): Deauthenticate,
|
||||
AddMembers.String(): AddMembers,
|
||||
SetMembers.String(): SetMembers,
|
||||
RemoveMembers.String(): RemoveMembers,
|
||||
SetPassword.String(): SetPassword,
|
||||
ChangePassword.String(): ChangePassword,
|
||||
AddHosts.String(): AddHosts,
|
||||
SetHosts.String(): SetHosts,
|
||||
RemoveHosts.String(): RemoveHosts,
|
||||
AddHostSets.String(): AddHostSets,
|
||||
SetHostSets.String(): SetHostSets,
|
||||
RemoveHostSets.String(): RemoveHostSets,
|
||||
Cancel.String(): Cancel,
|
||||
AddAccounts.String(): AddAccounts,
|
||||
SetAccounts.String(): SetAccounts,
|
||||
RemoveAccounts.String(): RemoveAccounts,
|
||||
ReadSelf.String(): ReadSelf,
|
||||
CancelSelf.String(): CancelSelf,
|
||||
ChangeState.String(): ChangeState,
|
||||
DeleteSelf.String(): DeleteSelf,
|
||||
NoOp.String(): NoOp,
|
||||
AddCredentialLibraries.String(): AddCredentialLibraries,
|
||||
SetCredentialLibraries.String(): SetCredentialLibraries,
|
||||
RemoveCredentialLibraries.String(): RemoveCredentialLibraries,
|
||||
AddCredentialSources.String(): AddCredentialSources,
|
||||
SetCredentialSources.String(): SetCredentialSources,
|
||||
RemoveCredentialSources.String(): RemoveCredentialSources,
|
||||
AddHostSources.String(): AddHostSources,
|
||||
SetHostSources.String(): SetHostSources,
|
||||
RemoveHostSources.String(): RemoveHostSources,
|
||||
CreateWorkerLed.String(): CreateWorkerLed,
|
||||
AddWorkerTags.String(): AddWorkerTags,
|
||||
SetWorkerTags.String(): SetWorkerTags,
|
||||
RemoveWorkerTags.String(): RemoveWorkerTags,
|
||||
CreateControllerLed.String(): CreateControllerLed,
|
||||
Create.String(): Create,
|
||||
List.String(): List,
|
||||
Update.String(): Update,
|
||||
Read.String(): Read,
|
||||
Delete.String(): Delete,
|
||||
Authenticate.String(): Authenticate,
|
||||
All.String(): All,
|
||||
AuthorizeSession.String(): AuthorizeSession,
|
||||
AddGrants.String(): AddGrants,
|
||||
RemoveGrants.String(): RemoveGrants,
|
||||
SetGrants.String(): SetGrants,
|
||||
AddPrincipals.String(): AddPrincipals,
|
||||
SetPrincipals.String(): SetPrincipals,
|
||||
RemovePrincipals.String(): RemovePrincipals,
|
||||
Deauthenticate.String(): Deauthenticate,
|
||||
AddMembers.String(): AddMembers,
|
||||
SetMembers.String(): SetMembers,
|
||||
RemoveMembers.String(): RemoveMembers,
|
||||
SetPassword.String(): SetPassword,
|
||||
ChangePassword.String(): ChangePassword,
|
||||
AddHosts.String(): AddHosts,
|
||||
SetHosts.String(): SetHosts,
|
||||
RemoveHosts.String(): RemoveHosts,
|
||||
AddHostSets.String(): AddHostSets,
|
||||
SetHostSets.String(): SetHostSets,
|
||||
RemoveHostSets.String(): RemoveHostSets,
|
||||
Cancel.String(): Cancel,
|
||||
AddAccounts.String(): AddAccounts,
|
||||
SetAccounts.String(): SetAccounts,
|
||||
RemoveAccounts.String(): RemoveAccounts,
|
||||
ReadSelf.String(): ReadSelf,
|
||||
CancelSelf.String(): CancelSelf,
|
||||
ChangeState.String(): ChangeState,
|
||||
DeleteSelf.String(): DeleteSelf,
|
||||
NoOp.String(): NoOp,
|
||||
AddCredentialLibraries.String(): AddCredentialLibraries,
|
||||
SetCredentialLibraries.String(): SetCredentialLibraries,
|
||||
RemoveCredentialLibraries.String(): RemoveCredentialLibraries,
|
||||
AddCredentialSources.String(): AddCredentialSources,
|
||||
SetCredentialSources.String(): SetCredentialSources,
|
||||
RemoveCredentialSources.String(): RemoveCredentialSources,
|
||||
AddHostSources.String(): AddHostSources,
|
||||
SetHostSources.String(): SetHostSources,
|
||||
RemoveHostSources.String(): RemoveHostSources,
|
||||
CreateWorkerLed.String(): CreateWorkerLed,
|
||||
AddWorkerTags.String(): AddWorkerTags,
|
||||
SetWorkerTags.String(): SetWorkerTags,
|
||||
RemoveWorkerTags.String(): RemoveWorkerTags,
|
||||
CreateControllerLed.String(): CreateControllerLed,
|
||||
ReinitializeCertificateAuthority.String(): ReinitializeCertificateAuthority,
|
||||
ReadCertificateAuthority.String(): ReadCertificateAuthority,
|
||||
}
|
||||
|
||||
func (a Type) String() string {
|
||||
@@ -168,6 +173,8 @@ func (a Type) String() string {
|
||||
"set-worker-tags",
|
||||
"remove-worker-tags",
|
||||
"create:controller-led",
|
||||
"reinitialize-certificate-authority",
|
||||
"read-certificate-authority",
|
||||
}[a]
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,8 @@ const (
|
||||
// * The Grant.validateType function and test
|
||||
// * The perms.topLevelType function
|
||||
// * The scopes service collection actions for appropriate scopes
|
||||
// * The Test_AnonRestrictions test
|
||||
// * The Test_AnonRestrictions test: update the following line to include the last resource:
|
||||
// for i := resource.Type(1); i <= resource.<Resource>; i++ {
|
||||
)
|
||||
|
||||
func (r Type) MarshalJSON() ([]byte, error) {
|
||||
|
||||
@@ -76,6 +76,8 @@ type Worker struct {
|
||||
Type string `protobuf:"bytes,170,opt,name=type,proto3" json:"type,omitempty"`
|
||||
// Output only. The api tags set for the worker.
|
||||
ApiTags map[string]*structpb.ListValue `protobuf:"bytes,180,rep,name=api_tags,proto3" json:"api_tags,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3" class:"public"` // @gotags: `class:"public"`
|
||||
// Output only. The version of the Boundary binary the worker is running.
|
||||
ReleaseVersion string `protobuf:"bytes,190,opt,name=release_version,proto3" json:"release_version,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
// Output only. The available actions on this resource for the requester.
|
||||
AuthorizedActions []string `protobuf:"bytes,300,rep,name=authorized_actions,proto3" json:"authorized_actions,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
}
|
||||
@@ -231,6 +233,13 @@ func (x *Worker) GetApiTags() map[string]*structpb.ListValue {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *Worker) GetReleaseVersion() string {
|
||||
if x != nil {
|
||||
return x.ReleaseVersion
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Worker) GetAuthorizedActions() []string {
|
||||
if x != nil {
|
||||
return x.AuthorizedActions
|
||||
@@ -238,6 +247,128 @@ func (x *Worker) GetAuthorizedActions() []string {
|
||||
return nil
|
||||
}
|
||||
|
||||
type Certificate struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
// Output only. The ID of the certificate
|
||||
Id string `protobuf:"bytes,10,opt,name=id,proto3" json:"id,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
// Output only. The public key of the cert authority
|
||||
PublicKeySha256 string `protobuf:"bytes,20,opt,name=public_key_sha256,json=publicKeySha256,proto3" json:"public_key_sha256,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
// Output only. The time before which this CA is invalid
|
||||
NotBeforeTime *timestamppb.Timestamp `protobuf:"bytes,30,opt,name=not_before_time,json=notBeforeTime,proto3" json:"not_before_time,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
// Output only. The time after which this CA is invalid
|
||||
NotAfterTime *timestamppb.Timestamp `protobuf:"bytes,40,opt,name=not_after_time,json=notAfterTime,proto3" json:"not_after_time,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
func (x *Certificate) Reset() {
|
||||
*x = Certificate{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_controller_api_resources_workers_v1_worker_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *Certificate) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*Certificate) ProtoMessage() {}
|
||||
|
||||
func (x *Certificate) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_controller_api_resources_workers_v1_worker_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use Certificate.ProtoReflect.Descriptor instead.
|
||||
func (*Certificate) Descriptor() ([]byte, []int) {
|
||||
return file_controller_api_resources_workers_v1_worker_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *Certificate) GetId() string {
|
||||
if x != nil {
|
||||
return x.Id
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Certificate) GetPublicKeySha256() string {
|
||||
if x != nil {
|
||||
return x.PublicKeySha256
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *Certificate) GetNotBeforeTime() *timestamppb.Timestamp {
|
||||
if x != nil {
|
||||
return x.NotBeforeTime
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (x *Certificate) GetNotAfterTime() *timestamppb.Timestamp {
|
||||
if x != nil {
|
||||
return x.NotAfterTime
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type CertificateAuthority struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Certs []*Certificate `protobuf:"bytes,10,rep,name=certs,proto3" json:"certs,omitempty" class:"public"` // @gotags: `class:"public"`
|
||||
}
|
||||
|
||||
func (x *CertificateAuthority) Reset() {
|
||||
*x = CertificateAuthority{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_controller_api_resources_workers_v1_worker_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *CertificateAuthority) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*CertificateAuthority) ProtoMessage() {}
|
||||
|
||||
func (x *CertificateAuthority) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_controller_api_resources_workers_v1_worker_proto_msgTypes[2]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use CertificateAuthority.ProtoReflect.Descriptor instead.
|
||||
func (*CertificateAuthority) Descriptor() ([]byte, []int) {
|
||||
return file_controller_api_resources_workers_v1_worker_proto_rawDescGZIP(), []int{2}
|
||||
}
|
||||
|
||||
func (x *CertificateAuthority) GetCerts() []*Certificate {
|
||||
if x != nil {
|
||||
return x.Certs
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_controller_api_resources_workers_v1_worker_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_controller_api_resources_workers_v1_worker_proto_rawDesc = []byte{
|
||||
@@ -258,7 +389,7 @@ var file_controller_api_resources_workers_v1_worker_proto_rawDesc = []byte{
|
||||
0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x22, 0xc7, 0x0b, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x0e, 0x0a,
|
||||
0x74, 0x6f, 0x22, 0xf2, 0x0b, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x0e, 0x0a,
|
||||
0x02, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a,
|
||||
0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52,
|
||||
0x08, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x5f, 0x69, 0x64, 0x12, 0x43, 0x0a, 0x05, 0x73, 0x63, 0x6f,
|
||||
@@ -330,33 +461,55 @@ var file_controller_api_resources_workers_v1_worker_proto_rawDesc = []byte{
|
||||
0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65,
|
||||
0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x6f, 0x72,
|
||||
0x6b, 0x65, 0x72, 0x2e, 0x41, 0x70, 0x69, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
|
||||
0x52, 0x08, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x2f, 0x0a, 0x12, 0x61, 0x75,
|
||||
0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73,
|
||||
0x18, 0xac, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
|
||||
0x7a, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5c, 0x0a, 0x12, 0x43,
|
||||
0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, 0x61, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72,
|
||||
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
|
||||
0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05,
|
||||
0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0f, 0x43, 0x6f, 0x6e,
|
||||
0x66, 0x69, 0x67, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
|
||||
0x52, 0x08, 0x61, 0x70, 0x69, 0x5f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x29, 0x0a, 0x0f, 0x72, 0x65,
|
||||
0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0xbe, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x76, 0x65,
|
||||
0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x2f, 0x0a, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69,
|
||||
0x7a, 0x65, 0x64, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0xac, 0x02, 0x20, 0x03,
|
||||
0x28, 0x09, 0x52, 0x12, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x61,
|
||||
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x5c, 0x0a, 0x12, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69,
|
||||
0x63, 0x61, 0x6c, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
|
||||
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30,
|
||||
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
|
||||
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
|
||||
0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
|
||||
0x3a, 0x02, 0x38, 0x01, 0x1a, 0x56, 0x0a, 0x0c, 0x41, 0x70, 0x69, 0x54, 0x61, 0x67, 0x73, 0x45,
|
||||
0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70,
|
||||
0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75,
|
||||
0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x50, 0x5a, 0x4e,
|
||||
0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69,
|
||||
0x63, 0x6f, 0x72, 0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x64,
|
||||
0x6b, 0x2f, 0x70, 0x62, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
|
||||
0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x77,
|
||||
0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x3b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x62, 0x06,
|
||||
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x61,
|
||||
0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c,
|
||||
0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
|
||||
0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56,
|
||||
0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
|
||||
0x56, 0x0a, 0x0c, 0x41, 0x70, 0x69, 0x54, 0x61, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12,
|
||||
0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65,
|
||||
0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b,
|
||||
0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
|
||||
0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61,
|
||||
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xcf, 0x01, 0x0a, 0x0b, 0x43, 0x65, 0x72, 0x74,
|
||||
0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x0a, 0x20,
|
||||
0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2a, 0x0a, 0x11, 0x70, 0x75, 0x62, 0x6c, 0x69,
|
||||
0x63, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x73, 0x68, 0x61, 0x32, 0x35, 0x36, 0x18, 0x14, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x0f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x53, 0x68, 0x61,
|
||||
0x32, 0x35, 0x36, 0x12, 0x42, 0x0a, 0x0f, 0x6e, 0x6f, 0x74, 0x5f, 0x62, 0x65, 0x66, 0x6f, 0x72,
|
||||
0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67,
|
||||
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54,
|
||||
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x42, 0x65, 0x66,
|
||||
0x6f, 0x72, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0e, 0x6e, 0x6f, 0x74, 0x5f, 0x61,
|
||||
0x66, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32,
|
||||
0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75,
|
||||
0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0c, 0x6e, 0x6f, 0x74,
|
||||
0x41, 0x66, 0x74, 0x65, 0x72, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x5e, 0x0a, 0x14, 0x43, 0x65, 0x72,
|
||||
0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74,
|
||||
0x79, 0x12, 0x46, 0x0a, 0x05, 0x63, 0x65, 0x72, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b,
|
||||
0x32, 0x30, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2e, 0x61, 0x70,
|
||||
0x69, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2e, 0x77, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61,
|
||||
0x74, 0x65, 0x52, 0x05, 0x63, 0x65, 0x72, 0x74, 0x73, 0x42, 0x50, 0x5a, 0x4e, 0x67, 0x69, 0x74,
|
||||
0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72,
|
||||
0x70, 0x2f, 0x62, 0x6f, 0x75, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x70,
|
||||
0x62, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x61, 0x70,
|
||||
0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x2f, 0x77, 0x6f, 0x72, 0x6b,
|
||||
0x65, 0x72, 0x73, 0x3b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f,
|
||||
0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
@@ -371,39 +524,44 @@ func file_controller_api_resources_workers_v1_worker_proto_rawDescGZIP() []byte
|
||||
return file_controller_api_resources_workers_v1_worker_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_controller_api_resources_workers_v1_worker_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
|
||||
var file_controller_api_resources_workers_v1_worker_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
|
||||
var file_controller_api_resources_workers_v1_worker_proto_goTypes = []interface{}{
|
||||
(*Worker)(nil), // 0: controller.api.resources.workers.v1.Worker
|
||||
nil, // 1: controller.api.resources.workers.v1.Worker.CanonicalTagsEntry
|
||||
nil, // 2: controller.api.resources.workers.v1.Worker.ConfigTagsEntry
|
||||
nil, // 3: controller.api.resources.workers.v1.Worker.ApiTagsEntry
|
||||
(*scopes.ScopeInfo)(nil), // 4: controller.api.resources.scopes.v1.ScopeInfo
|
||||
(*wrapperspb.StringValue)(nil), // 5: google.protobuf.StringValue
|
||||
(*timestamppb.Timestamp)(nil), // 6: google.protobuf.Timestamp
|
||||
(*wrapperspb.UInt32Value)(nil), // 7: google.protobuf.UInt32Value
|
||||
(*structpb.ListValue)(nil), // 8: google.protobuf.ListValue
|
||||
(*Certificate)(nil), // 1: controller.api.resources.workers.v1.Certificate
|
||||
(*CertificateAuthority)(nil), // 2: controller.api.resources.workers.v1.CertificateAuthority
|
||||
nil, // 3: controller.api.resources.workers.v1.Worker.CanonicalTagsEntry
|
||||
nil, // 4: controller.api.resources.workers.v1.Worker.ConfigTagsEntry
|
||||
nil, // 5: controller.api.resources.workers.v1.Worker.ApiTagsEntry
|
||||
(*scopes.ScopeInfo)(nil), // 6: controller.api.resources.scopes.v1.ScopeInfo
|
||||
(*wrapperspb.StringValue)(nil), // 7: google.protobuf.StringValue
|
||||
(*timestamppb.Timestamp)(nil), // 8: google.protobuf.Timestamp
|
||||
(*wrapperspb.UInt32Value)(nil), // 9: google.protobuf.UInt32Value
|
||||
(*structpb.ListValue)(nil), // 10: google.protobuf.ListValue
|
||||
}
|
||||
var file_controller_api_resources_workers_v1_worker_proto_depIdxs = []int32{
|
||||
4, // 0: controller.api.resources.workers.v1.Worker.scope:type_name -> controller.api.resources.scopes.v1.ScopeInfo
|
||||
5, // 1: controller.api.resources.workers.v1.Worker.name:type_name -> google.protobuf.StringValue
|
||||
5, // 2: controller.api.resources.workers.v1.Worker.description:type_name -> google.protobuf.StringValue
|
||||
6, // 3: controller.api.resources.workers.v1.Worker.created_time:type_name -> google.protobuf.Timestamp
|
||||
6, // 4: controller.api.resources.workers.v1.Worker.updated_time:type_name -> google.protobuf.Timestamp
|
||||
1, // 5: controller.api.resources.workers.v1.Worker.canonical_tags:type_name -> controller.api.resources.workers.v1.Worker.CanonicalTagsEntry
|
||||
2, // 6: controller.api.resources.workers.v1.Worker.config_tags:type_name -> controller.api.resources.workers.v1.Worker.ConfigTagsEntry
|
||||
6, // 7: controller.api.resources.workers.v1.Worker.last_status_time:type_name -> google.protobuf.Timestamp
|
||||
5, // 8: controller.api.resources.workers.v1.Worker.worker_generated_auth_token:type_name -> google.protobuf.StringValue
|
||||
5, // 9: controller.api.resources.workers.v1.Worker.controller_generated_activation_token:type_name -> google.protobuf.StringValue
|
||||
7, // 10: controller.api.resources.workers.v1.Worker.active_connection_count:type_name -> google.protobuf.UInt32Value
|
||||
3, // 11: controller.api.resources.workers.v1.Worker.api_tags:type_name -> controller.api.resources.workers.v1.Worker.ApiTagsEntry
|
||||
8, // 12: controller.api.resources.workers.v1.Worker.CanonicalTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
8, // 13: controller.api.resources.workers.v1.Worker.ConfigTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
8, // 14: controller.api.resources.workers.v1.Worker.ApiTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
15, // [15:15] is the sub-list for method output_type
|
||||
15, // [15:15] is the sub-list for method input_type
|
||||
15, // [15:15] is the sub-list for extension type_name
|
||||
15, // [15:15] is the sub-list for extension extendee
|
||||
0, // [0:15] is the sub-list for field type_name
|
||||
6, // 0: controller.api.resources.workers.v1.Worker.scope:type_name -> controller.api.resources.scopes.v1.ScopeInfo
|
||||
7, // 1: controller.api.resources.workers.v1.Worker.name:type_name -> google.protobuf.StringValue
|
||||
7, // 2: controller.api.resources.workers.v1.Worker.description:type_name -> google.protobuf.StringValue
|
||||
8, // 3: controller.api.resources.workers.v1.Worker.created_time:type_name -> google.protobuf.Timestamp
|
||||
8, // 4: controller.api.resources.workers.v1.Worker.updated_time:type_name -> google.protobuf.Timestamp
|
||||
3, // 5: controller.api.resources.workers.v1.Worker.canonical_tags:type_name -> controller.api.resources.workers.v1.Worker.CanonicalTagsEntry
|
||||
4, // 6: controller.api.resources.workers.v1.Worker.config_tags:type_name -> controller.api.resources.workers.v1.Worker.ConfigTagsEntry
|
||||
8, // 7: controller.api.resources.workers.v1.Worker.last_status_time:type_name -> google.protobuf.Timestamp
|
||||
7, // 8: controller.api.resources.workers.v1.Worker.worker_generated_auth_token:type_name -> google.protobuf.StringValue
|
||||
7, // 9: controller.api.resources.workers.v1.Worker.controller_generated_activation_token:type_name -> google.protobuf.StringValue
|
||||
9, // 10: controller.api.resources.workers.v1.Worker.active_connection_count:type_name -> google.protobuf.UInt32Value
|
||||
5, // 11: controller.api.resources.workers.v1.Worker.api_tags:type_name -> controller.api.resources.workers.v1.Worker.ApiTagsEntry
|
||||
8, // 12: controller.api.resources.workers.v1.Certificate.not_before_time:type_name -> google.protobuf.Timestamp
|
||||
8, // 13: controller.api.resources.workers.v1.Certificate.not_after_time:type_name -> google.protobuf.Timestamp
|
||||
1, // 14: controller.api.resources.workers.v1.CertificateAuthority.certs:type_name -> controller.api.resources.workers.v1.Certificate
|
||||
10, // 15: controller.api.resources.workers.v1.Worker.CanonicalTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
10, // 16: controller.api.resources.workers.v1.Worker.ConfigTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
10, // 17: controller.api.resources.workers.v1.Worker.ApiTagsEntry.value:type_name -> google.protobuf.ListValue
|
||||
18, // [18:18] is the sub-list for method output_type
|
||||
18, // [18:18] is the sub-list for method input_type
|
||||
18, // [18:18] is the sub-list for extension type_name
|
||||
18, // [18:18] is the sub-list for extension extendee
|
||||
0, // [0:18] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_controller_api_resources_workers_v1_worker_proto_init() }
|
||||
@@ -424,6 +582,30 @@ func file_controller_api_resources_workers_v1_worker_proto_init() {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_controller_api_resources_workers_v1_worker_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*Certificate); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_controller_api_resources_workers_v1_worker_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*CertificateAuthority); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
@@ -431,7 +613,7 @@ func file_controller_api_resources_workers_v1_worker_proto_init() {
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_controller_api_resources_workers_v1_worker_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 4,
|
||||
NumMessages: 6,
|
||||
NumExtensions: 0,
|
||||
NumServices: 0,
|
||||
},
|
||||
|
||||
Reference in new issue
Block a user