Fix gRPC -> Teleport types message conversion (#56124)

This commit is contained in:
Marek Smoliński
2025-06-30 08:46:27 +00:00
committed by GitHub
parent 059fb3740a
commit 8bc9901834
8 changed files with 76 additions and 73 deletions
+7 -7
View File
@@ -37,13 +37,13 @@ func FromMemberProto(msg *accesslistv1.Member, opts ...MemberOption) (*accesslis
return nil, trace.BadParameter("spec is missing")
}
member, err := accesslist.NewAccessListMember(headerv1.FromMetadataProto(msg.Header.Metadata), accesslist.AccessListMemberSpec{
AccessList: msg.Spec.AccessList,
Name: msg.Spec.Name,
Joined: msg.Spec.Joined.AsTime(),
Expires: msg.Spec.Expires.AsTime(),
Reason: msg.Spec.Reason,
AddedBy: msg.Spec.AddedBy,
member, err := accesslist.NewAccessListMember(headerv1.FromMetadataProto(msg.GetHeader().GetMetadata()), accesslist.AccessListMemberSpec{
AccessList: msg.GetSpec().GetAccessList(),
Name: msg.GetSpec().GetName(),
Joined: msg.GetSpec().GetJoined().AsTime(),
Expires: msg.GetSpec().GetExpires().AsTime(),
Reason: msg.GetSpec().GetReason(),
AddedBy: msg.GetSpec().GetAddedBy(),
// Set it to empty as default.
// Must provide as options to set it with the provided value.
IneligibleStatus: "",
+14 -14
View File
@@ -34,35 +34,35 @@ func FromReviewProto(msg *accesslistv1.Review) (*accesslist.Review, error) {
return nil, trace.BadParameter("access list review message is nil")
}
if msg.Spec == nil {
if msg.GetSpec() == nil {
return nil, trace.BadParameter("spec is missing")
}
// Manually check for the presence of the time so that we can be sure that the review date is
// zero if the proto message's review date is nil.
var reviewDate time.Time
if msg.Spec.ReviewDate != nil {
reviewDate = msg.Spec.ReviewDate.AsTime()
if msg.GetSpec().GetReviewDate() != nil {
reviewDate = msg.GetSpec().GetReviewDate().AsTime()
}
var reviewChanges accesslist.ReviewChanges
if msg.Spec.Changes != nil {
if msg.Spec.Changes.MembershipRequirementsChanged != nil {
if msg.GetSpec().GetChanges() != nil {
if msg.GetSpec().GetChanges().GetMembershipRequirementsChanged() != nil {
reviewChanges.MembershipRequirementsChanged = &accesslist.Requires{
Roles: msg.Spec.Changes.MembershipRequirementsChanged.Roles,
Traits: traitv1.FromProto(msg.Spec.Changes.MembershipRequirementsChanged.Traits),
Roles: msg.GetSpec().GetChanges().GetMembershipRequirementsChanged().GetRoles(),
Traits: traitv1.FromProto(msg.GetSpec().GetChanges().GetMembershipRequirementsChanged().GetTraits()),
}
}
reviewChanges.RemovedMembers = msg.Spec.Changes.RemovedMembers
reviewChanges.ReviewFrequencyChanged = accesslist.ReviewFrequency(msg.Spec.Changes.ReviewFrequencyChanged)
reviewChanges.ReviewDayOfMonthChanged = accesslist.ReviewDayOfMonth(msg.Spec.Changes.ReviewDayOfMonthChanged)
reviewChanges.RemovedMembers = msg.GetSpec().GetChanges().GetRemovedMembers()
reviewChanges.ReviewFrequencyChanged = accesslist.ReviewFrequency(msg.GetSpec().GetChanges().GetReviewFrequencyChanged())
reviewChanges.ReviewDayOfMonthChanged = accesslist.ReviewDayOfMonth(msg.GetSpec().GetChanges().GetReviewDayOfMonthChanged())
}
member, err := accesslist.NewReview(headerv1.FromMetadataProto(msg.Header.Metadata), accesslist.ReviewSpec{
AccessList: msg.Spec.AccessList,
Reviewers: msg.Spec.Reviewers,
member, err := accesslist.NewReview(headerv1.FromMetadataProto(msg.GetHeader().GetMetadata()), accesslist.ReviewSpec{
AccessList: msg.GetSpec().GetAccessList(),
Reviewers: msg.GetSpec().GetReviewers(),
ReviewDate: reviewDate,
Notes: msg.Spec.Notes,
Notes: msg.GetSpec().GetNotes(),
Changes: reviewChanges,
})
if err != nil {
@@ -34,48 +34,48 @@ func FromProto(msg *discoveryconfigv1.DiscoveryConfig) (*discoveryconfig.Discove
return nil, trace.BadParameter("discovery config message is nil")
}
if msg.Spec == nil {
if msg.GetSpec() == nil {
return nil, trace.BadParameter("spec is missing")
}
if msg.Spec.DiscoveryGroup == "" {
if msg.GetSpec().GetDiscoveryGroup() == "" {
return nil, trace.BadParameter("discovery group is missing")
}
awsMatchers := make([]types.AWSMatcher, 0, len(msg.Spec.Aws))
for _, m := range msg.Spec.Aws {
awsMatchers := make([]types.AWSMatcher, 0, len(msg.GetSpec().GetAws()))
for _, m := range msg.GetSpec().GetAws() {
awsMatchers = append(awsMatchers, *m)
}
azureMatchers := make([]types.AzureMatcher, 0, len(msg.Spec.Azure))
for _, m := range msg.Spec.Azure {
azureMatchers := make([]types.AzureMatcher, 0, len(msg.GetSpec().GetAzure()))
for _, m := range msg.GetSpec().GetAzure() {
azureMatchers = append(azureMatchers, *m)
}
gcpMatchers := make([]types.GCPMatcher, 0, len(msg.Spec.Gcp))
for _, m := range msg.Spec.Gcp {
gcpMatchers := make([]types.GCPMatcher, 0, len(msg.GetSpec().GetGcp()))
for _, m := range msg.GetSpec().GetGcp() {
gcpMatchers = append(gcpMatchers, *m)
}
kubeMatchers := make([]types.KubernetesMatcher, 0, len(msg.Spec.Kube))
for _, m := range msg.Spec.Kube {
kubeMatchers := make([]types.KubernetesMatcher, 0, len(msg.GetSpec().GetKube()))
for _, m := range msg.GetSpec().GetKube() {
kubeMatchers = append(kubeMatchers, *m)
}
discoveryConfig, err := discoveryconfig.NewDiscoveryConfig(
headerv1.FromMetadataProto(msg.Header.Metadata),
headerv1.FromMetadataProto(msg.GetHeader().GetMetadata()),
discoveryconfig.Spec{
DiscoveryGroup: msg.Spec.DiscoveryGroup,
DiscoveryGroup: msg.GetSpec().GetDiscoveryGroup(),
AWS: awsMatchers,
Azure: azureMatchers,
GCP: gcpMatchers,
Kube: kubeMatchers,
AccessGraph: msg.Spec.AccessGraph,
AccessGraph: msg.GetSpec().GetAccessGraph(),
},
)
if err != nil {
return nil, trace.Wrap(err)
}
discoveryConfig.Status = StatusFromProto(msg.Status)
discoveryConfig.Status = StatusFromProto(msg.GetStatus())
return discoveryConfig, nil
}
@@ -31,20 +31,20 @@ func FromProtoDraft(in *externalauditstoragev1.ExternalAuditStorage) (*externala
return nil, trace.BadParameter("External Audit Storage message is nil")
}
if in.Spec == nil {
if in.GetSpec() == nil {
return nil, trace.BadParameter("spec is missing")
}
externalAuditStorage, err := externalauditstorage.NewDraftExternalAuditStorage(headerv1.FromMetadataProto(in.Header.Metadata), externalauditstorage.ExternalAuditStorageSpec{
IntegrationName: in.Spec.IntegrationName,
PolicyName: in.Spec.PolicyName,
Region: in.Spec.Region,
SessionRecordingsURI: in.Spec.SessionRecordingsUri,
AthenaWorkgroup: in.Spec.AthenaWorkgroup,
GlueDatabase: in.Spec.GlueDatabase,
GlueTable: in.Spec.GlueTable,
AuditEventsLongTermURI: in.Spec.AuditEventsLongTermUri,
AthenaResultsURI: in.Spec.AthenaResultsUri,
externalAuditStorage, err := externalauditstorage.NewDraftExternalAuditStorage(headerv1.FromMetadataProto(in.GetHeader().GetMetadata()), externalauditstorage.ExternalAuditStorageSpec{
IntegrationName: in.GetSpec().GetIntegrationName(),
PolicyName: in.GetSpec().GetPolicyName(),
Region: in.GetSpec().GetRegion(),
SessionRecordingsURI: in.GetSpec().GetSessionRecordingsUri(),
AthenaWorkgroup: in.GetSpec().GetAthenaWorkgroup(),
GlueDatabase: in.GetSpec().GetGlueDatabase(),
GlueTable: in.GetSpec().GetGlueTable(),
AuditEventsLongTermURI: in.GetSpec().GetAuditEventsLongTermUri(),
AthenaResultsURI: in.GetSpec().GetAthenaResultsUri(),
})
if err != nil {
return nil, trace.Wrap(err)
@@ -59,20 +59,20 @@ func FromProtoCluster(in *externalauditstoragev1.ExternalAuditStorage) (*externa
return nil, trace.BadParameter("External Audit Storage message is nil")
}
if in.Spec == nil {
if in.GetSpec() == nil {
return nil, trace.BadParameter("spec is missing")
}
externalAuditStorage, err := externalauditstorage.NewClusterExternalAuditStorage(headerv1.FromMetadataProto(in.Header.Metadata), externalauditstorage.ExternalAuditStorageSpec{
IntegrationName: in.Spec.IntegrationName,
PolicyName: in.Spec.PolicyName,
Region: in.Spec.Region,
SessionRecordingsURI: in.Spec.SessionRecordingsUri,
AthenaWorkgroup: in.Spec.AthenaWorkgroup,
GlueDatabase: in.Spec.GlueDatabase,
GlueTable: in.Spec.GlueTable,
AuditEventsLongTermURI: in.Spec.AuditEventsLongTermUri,
AthenaResultsURI: in.Spec.AthenaResultsUri,
externalAuditStorage, err := externalauditstorage.NewClusterExternalAuditStorage(headerv1.FromMetadataProto(in.GetHeader().GetMetadata()), externalauditstorage.ExternalAuditStorageSpec{
IntegrationName: in.GetSpec().GetIntegrationName(),
PolicyName: in.GetSpec().GetPolicyName(),
Region: in.GetSpec().GetRegion(),
SessionRecordingsURI: in.GetSpec().GetSessionRecordingsUri(),
AthenaWorkgroup: in.GetSpec().GetAthenaWorkgroup(),
GlueDatabase: in.GetSpec().GetGlueDatabase(),
GlueTable: in.GetSpec().GetGlueTable(),
AuditEventsLongTermURI: in.GetSpec().GetAuditEventsLongTermUri(),
AthenaResultsURI: in.GetSpec().GetAthenaResultsUri(),
})
if err != nil {
return nil, trace.Wrap(err)
+9 -6
View File
@@ -48,18 +48,21 @@ func ToResourceHeaderProto(resourceHeader header.ResourceHeader) *headerv1.Resou
// FromMetadataProto converts v1 metadata into an internal metadata object.
func FromMetadataProto(msg *headerv1.Metadata) header.Metadata {
if msg == nil {
return header.Metadata{}
}
// We map the zero protobuf time (nil) to the zero go time.
var expires time.Time
if msg.Expires != nil {
expires = msg.Expires.AsTime()
if msg.GetExpires() != nil {
expires = msg.GetExpires().AsTime()
}
return header.Metadata{
Name: msg.Name,
Description: msg.Description,
Labels: msg.Labels,
Name: msg.GetName(),
Description: msg.GetDescription(),
Labels: msg.GetLabels(),
Expires: expires,
Revision: msg.Revision,
Revision: msg.GetRevision(),
}
}
+2 -2
View File
@@ -34,7 +34,7 @@ func FromProtoAuditQuery(in *secreportsv1.AuditQuery) (*secreports.AuditQuery, e
Query: in.GetSpec().GetQuery(),
Description: in.GetSpec().GetDescription(),
}
out, err := secreports.NewAuditQuery(headerv1.FromMetadataProto(in.Header.Metadata), spec)
out, err := secreports.NewAuditQuery(headerv1.FromMetadataProto(in.GetHeader().GetMetadata()), spec)
if err != nil {
return nil, trace.Wrap(err)
}
@@ -76,7 +76,7 @@ func FromProtoReport(in *secreportsv1.Report) (*secreports.Report, error) {
Title: in.GetSpec().GetTitle(),
Version: in.GetSpec().GetVersion(),
}
out, err := secreports.NewReport(headerv1.FromMetadataProto(in.Header.Metadata), spec)
out, err := secreports.NewReport(headerv1.FromMetadataProto(in.GetHeader().GetMetadata()), spec)
if err != nil {
return nil, trace.Wrap(err)
}
@@ -32,13 +32,13 @@ func FromProto(msg *userloginstatev1.UserLoginState) (*userloginstate.UserLoginS
return nil, trace.BadParameter("spec is missing")
}
uls, err := userloginstate.New(headerv1.FromMetadataProto(msg.Header.Metadata), userloginstate.Spec{
OriginalRoles: msg.Spec.GetOriginalRoles(),
OriginalTraits: traitv1.FromProto(msg.Spec.OriginalTraits),
Roles: msg.Spec.Roles,
Traits: traitv1.FromProto(msg.Spec.Traits),
UserType: types.UserType(msg.Spec.UserType),
GitHubIdentity: externalIdentityFromProto(msg.Spec.GitHubIdentity),
uls, err := userloginstate.New(headerv1.FromMetadataProto(msg.GetHeader().GetMetadata()), userloginstate.Spec{
OriginalRoles: msg.GetSpec().GetOriginalRoles(),
OriginalTraits: traitv1.FromProto(msg.GetSpec().GetOriginalTraits()),
Roles: msg.GetSpec().GetRoles(),
Traits: traitv1.FromProto(msg.GetSpec().GetTraits()),
UserType: types.UserType(msg.GetSpec().GetUserType()),
GitHubIdentity: externalIdentityFromProto(msg.GetSpec().GetGitHubIdentity()),
})
return uls, trace.Wrap(err)
@@ -100,7 +100,7 @@ func ProtoToResource(set *clusterconfigpb.AccessGraphSettings) (*AccessGraphSett
ResourceHeader: types.ResourceHeader{
Kind: set.Kind,
Version: set.Version,
Metadata: legacy.FromHeaderMetadata(headerv1.FromMetadataProto(set.Metadata)),
Metadata: legacy.FromHeaderMetadata(headerv1.FromMetadataProto(set.GetMetadata())),
},
Spec: accessGraphSettingsSpec{
SecretsScanConfig: conf,