diff --git a/pam/gdm/gdm.pb.go b/pam/gdm/gdm.pb.go new file mode 100644 index 0000000000..7297707678 --- /dev/null +++ b/pam/gdm/gdm.pb.go @@ -0,0 +1,2167 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.31.0 +// protoc v3.12.4 +// source: gdm.proto + +package gdm + +import ( + authd "github.com/ubuntu/authd" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type DataType int32 + +const ( + // DataType_unknownType is an unknown DataType. + DataType_unknownType DataType = 0 + // DataType_hello is an hello DataType. + DataType_hello DataType = 1 + // DataType_event is an event DataType. + DataType_event DataType = 2 + // DataType_eventAck is an event DataType. + DataType_eventAck DataType = 3 + // DataType_request is a request DataType. + DataType_request DataType = 4 + // DataType_response is a response DataType. + DataType_response DataType = 5 + // DataType_poll is a poll DataType. + DataType_poll DataType = 6 + // DataType_pollResponse is a poll response DataType. + DataType_pollResponse DataType = 7 +) + +// Enum value maps for DataType. +var ( + DataType_name = map[int32]string{ + 0: "unknownType", + 1: "hello", + 2: "event", + 3: "eventAck", + 4: "request", + 5: "response", + 6: "poll", + 7: "pollResponse", + } + DataType_value = map[string]int32{ + "unknownType": 0, + "hello": 1, + "event": 2, + "eventAck": 3, + "request": 4, + "response": 5, + "poll": 6, + "pollResponse": 7, + } +) + +func (x DataType) Enum() *DataType { + p := new(DataType) + *p = x + return p +} + +func (x DataType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DataType) Descriptor() protoreflect.EnumDescriptor { + return file_gdm_proto_enumTypes[0].Descriptor() +} + +func (DataType) Type() protoreflect.EnumType { + return &file_gdm_proto_enumTypes[0] +} + +func (x DataType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DataType.Descriptor instead. +func (DataType) EnumDescriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{0} +} + +type RequestType int32 + +const ( + // RequestType_unknownRequest is an unknown request RequestType. + RequestType_unknownRequest RequestType = 0 + // RequestType_updateBrokersList is an update brokers list RequestType. + RequestType_updateBrokersList RequestType = 1 + // RequestType_composeAuthenticationView is an compose authentication view RequestType. + RequestType_composeAuthenticationView RequestType = 2 + // RequestType_uiLayoutCapabilities is an ui layout capabilities RequestType. + RequestType_uiLayoutCapabilities RequestType = 3 + // RequestType_changeStage is a change stage RequestType. + RequestType_changeStage RequestType = 4 +) + +// Enum value maps for RequestType. +var ( + RequestType_name = map[int32]string{ + 0: "unknownRequest", + 1: "updateBrokersList", + 2: "composeAuthenticationView", + 3: "uiLayoutCapabilities", + 4: "changeStage", + } + RequestType_value = map[string]int32{ + "unknownRequest": 0, + "updateBrokersList": 1, + "composeAuthenticationView": 2, + "uiLayoutCapabilities": 3, + "changeStage": 4, + } +) + +func (x RequestType) Enum() *RequestType { + p := new(RequestType) + *p = x + return p +} + +func (x RequestType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RequestType) Descriptor() protoreflect.EnumDescriptor { + return file_gdm_proto_enumTypes[1].Descriptor() +} + +func (RequestType) Type() protoreflect.EnumType { + return &file_gdm_proto_enumTypes[1] +} + +func (x RequestType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RequestType.Descriptor instead. +func (RequestType) EnumDescriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{1} +} + +type EventType int32 + +const ( + // unknownEvent is an unnown EventType. + EventType_unknownEvent EventType = 0 + // EventType_userSelected is an user selected EventType. + EventType_userSelected EventType = 1 + // EventType_brokersReceived is a broker received EventType. + EventType_brokersReceived EventType = 2 + // EventType_brokerSelected is a broker selected EventType. + EventType_brokerSelected EventType = 3 + // EventType_authModesReceived is an auth modes received EventType. + EventType_authModesReceived EventType = 4 + // EventType_authModeSelected is an auth mode selected EventType. + EventType_authModeSelected EventType = 5 + // EventType_reselectAuthMode is an reselect auth mode selected EventType. + EventType_reselectAuthMode EventType = 6 + // EventType_authEvent is an auth event EventType. + EventType_authEvent EventType = 7 + // EventType_uiLayoutReceived is an UI Layout Received EventType. + EventType_uiLayoutReceived EventType = 8 + // EventType_startAuthentication is a start authentication EventType. + EventType_startAuthentication EventType = 9 + // EventType_isAuthenticatedRequested is an authentication request EventType. + EventType_isAuthenticatedRequested EventType = 10 + // EventType_stageChanged is stage changed EventType. + EventType_stageChanged EventType = 11 +) + +// Enum value maps for EventType. +var ( + EventType_name = map[int32]string{ + 0: "unknownEvent", + 1: "userSelected", + 2: "brokersReceived", + 3: "brokerSelected", + 4: "authModesReceived", + 5: "authModeSelected", + 6: "reselectAuthMode", + 7: "authEvent", + 8: "uiLayoutReceived", + 9: "startAuthentication", + 10: "isAuthenticatedRequested", + 11: "stageChanged", + } + EventType_value = map[string]int32{ + "unknownEvent": 0, + "userSelected": 1, + "brokersReceived": 2, + "brokerSelected": 3, + "authModesReceived": 4, + "authModeSelected": 5, + "reselectAuthMode": 6, + "authEvent": 7, + "uiLayoutReceived": 8, + "startAuthentication": 9, + "isAuthenticatedRequested": 10, + "stageChanged": 11, + } +) + +func (x EventType) Enum() *EventType { + p := new(EventType) + *p = x + return p +} + +func (x EventType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (EventType) Descriptor() protoreflect.EnumDescriptor { + return file_gdm_proto_enumTypes[2].Descriptor() +} + +func (EventType) Type() protoreflect.EnumType { + return &file_gdm_proto_enumTypes[2] +} + +func (x EventType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use EventType.Descriptor instead. +func (EventType) EnumDescriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{2} +} + +type Data struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type DataType `protobuf:"varint,1,opt,name=type,proto3,enum=gdm.DataType" json:"type,omitempty"` + Hello *HelloData `protobuf:"bytes,2,opt,name=hello,proto3,oneof" json:"hello,omitempty"` + Request *RequestData `protobuf:"bytes,3,opt,name=request,proto3,oneof" json:"request,omitempty"` + Response *ResponseData `protobuf:"bytes,4,opt,name=response,proto3,oneof" json:"response,omitempty"` + Event *EventData `protobuf:"bytes,5,opt,name=event,proto3,oneof" json:"event,omitempty"` + PollResponse []*EventData `protobuf:"bytes,6,rep,name=pollResponse,proto3" json:"pollResponse,omitempty"` +} + +func (x *Data) Reset() { + *x = Data{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Data) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Data) ProtoMessage() {} + +func (x *Data) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[0] + 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 Data.ProtoReflect.Descriptor instead. +func (*Data) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{0} +} + +func (x *Data) GetType() DataType { + if x != nil { + return x.Type + } + return DataType_unknownType +} + +func (x *Data) GetHello() *HelloData { + if x != nil { + return x.Hello + } + return nil +} + +func (x *Data) GetRequest() *RequestData { + if x != nil { + return x.Request + } + return nil +} + +func (x *Data) GetResponse() *ResponseData { + if x != nil { + return x.Response + } + return nil +} + +func (x *Data) GetEvent() *EventData { + if x != nil { + return x.Event + } + return nil +} + +func (x *Data) GetPollResponse() []*EventData { + if x != nil { + return x.PollResponse + } + return nil +} + +type HelloData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Version uint32 `protobuf:"varint,1,opt,name=version,proto3" json:"version,omitempty"` +} + +func (x *HelloData) Reset() { + *x = HelloData{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HelloData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HelloData) ProtoMessage() {} + +func (x *HelloData) ProtoReflect() protoreflect.Message { + mi := &file_gdm_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 HelloData.ProtoReflect.Descriptor instead. +func (*HelloData) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{1} +} + +func (x *HelloData) GetVersion() uint32 { + if x != nil { + return x.Version + } + return 0 +} + +type Requests struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Requests) Reset() { + *x = Requests{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Requests) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Requests) ProtoMessage() {} + +func (x *Requests) ProtoReflect() protoreflect.Message { + mi := &file_gdm_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 Requests.ProtoReflect.Descriptor instead. +func (*Requests) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{2} +} + +type RequestData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type RequestType `protobuf:"varint,1,opt,name=type,proto3,enum=gdm.RequestType" json:"type,omitempty"` + // Types that are assignable to Data: + // + // *RequestData_UiLayoutCapabilities + // *RequestData_ChangeStage + Data isRequestData_Data `protobuf_oneof:"data"` +} + +func (x *RequestData) Reset() { + *x = RequestData{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RequestData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RequestData) ProtoMessage() {} + +func (x *RequestData) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[3] + 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 RequestData.ProtoReflect.Descriptor instead. +func (*RequestData) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{3} +} + +func (x *RequestData) GetType() RequestType { + if x != nil { + return x.Type + } + return RequestType_unknownRequest +} + +func (m *RequestData) GetData() isRequestData_Data { + if m != nil { + return m.Data + } + return nil +} + +func (x *RequestData) GetUiLayoutCapabilities() *Requests_UiLayoutCapabilities { + if x, ok := x.GetData().(*RequestData_UiLayoutCapabilities); ok { + return x.UiLayoutCapabilities + } + return nil +} + +func (x *RequestData) GetChangeStage() *Requests_ChangeStage { + if x, ok := x.GetData().(*RequestData_ChangeStage); ok { + return x.ChangeStage + } + return nil +} + +type isRequestData_Data interface { + isRequestData_Data() +} + +type RequestData_UiLayoutCapabilities struct { + UiLayoutCapabilities *Requests_UiLayoutCapabilities `protobuf:"bytes,10,opt,name=uiLayoutCapabilities,proto3,oneof"` +} + +type RequestData_ChangeStage struct { + ChangeStage *Requests_ChangeStage `protobuf:"bytes,11,opt,name=changeStage,proto3,oneof"` +} + +func (*RequestData_UiLayoutCapabilities) isRequestData_Data() {} + +func (*RequestData_ChangeStage) isRequestData_Data() {} + +type Responses struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Responses) Reset() { + *x = Responses{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Responses) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Responses) ProtoMessage() {} + +func (x *Responses) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[4] + 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 Responses.ProtoReflect.Descriptor instead. +func (*Responses) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{4} +} + +type ResponseData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type RequestType `protobuf:"varint,1,opt,name=type,proto3,enum=gdm.RequestType" json:"type,omitempty"` + // Types that are assignable to Data: + // + // *ResponseData_Ack + // *ResponseData_UiLayoutCapabilities + Data isResponseData_Data `protobuf_oneof:"data"` +} + +func (x *ResponseData) Reset() { + *x = ResponseData{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ResponseData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ResponseData) ProtoMessage() {} + +func (x *ResponseData) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[5] + 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 ResponseData.ProtoReflect.Descriptor instead. +func (*ResponseData) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{5} +} + +func (x *ResponseData) GetType() RequestType { + if x != nil { + return x.Type + } + return RequestType_unknownRequest +} + +func (m *ResponseData) GetData() isResponseData_Data { + if m != nil { + return m.Data + } + return nil +} + +func (x *ResponseData) GetAck() *Responses_Ack { + if x, ok := x.GetData().(*ResponseData_Ack); ok { + return x.Ack + } + return nil +} + +func (x *ResponseData) GetUiLayoutCapabilities() *Responses_UiLayoutCapabilities { + if x, ok := x.GetData().(*ResponseData_UiLayoutCapabilities); ok { + return x.UiLayoutCapabilities + } + return nil +} + +type isResponseData_Data interface { + isResponseData_Data() +} + +type ResponseData_Ack struct { + Ack *Responses_Ack `protobuf:"bytes,10,opt,name=ack,proto3,oneof"` +} + +type ResponseData_UiLayoutCapabilities struct { + UiLayoutCapabilities *Responses_UiLayoutCapabilities `protobuf:"bytes,11,opt,name=uiLayoutCapabilities,proto3,oneof"` +} + +func (*ResponseData_Ack) isResponseData_Data() {} + +func (*ResponseData_UiLayoutCapabilities) isResponseData_Data() {} + +type Events struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Events) Reset() { + *x = Events{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events) ProtoMessage() {} + +func (x *Events) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[6] + 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 Events.ProtoReflect.Descriptor instead. +func (*Events) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6} +} + +type EventData struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type EventType `protobuf:"varint,1,opt,name=type,proto3,enum=gdm.EventType" json:"type,omitempty"` + // Types that are assignable to Data: + // + // *EventData_BrokersReceived + // *EventData_BrokerSelected + // *EventData_AuthModesReceived + // *EventData_AuthModeSelected + // *EventData_IsAuthenticatedRequested + // *EventData_StageChanged + // *EventData_UiLayoutReceived + // *EventData_AuthEvent + // *EventData_ReselectAuthMode + // *EventData_StartAuthentication + // *EventData_UserSelected + Data isEventData_Data `protobuf_oneof:"data"` +} + +func (x *EventData) Reset() { + *x = EventData{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *EventData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventData) ProtoMessage() {} + +func (x *EventData) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[7] + 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 EventData.ProtoReflect.Descriptor instead. +func (*EventData) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{7} +} + +func (x *EventData) GetType() EventType { + if x != nil { + return x.Type + } + return EventType_unknownEvent +} + +func (m *EventData) GetData() isEventData_Data { + if m != nil { + return m.Data + } + return nil +} + +func (x *EventData) GetBrokersReceived() *Events_BrokersReceived { + if x, ok := x.GetData().(*EventData_BrokersReceived); ok { + return x.BrokersReceived + } + return nil +} + +func (x *EventData) GetBrokerSelected() *Events_BrokerSelected { + if x, ok := x.GetData().(*EventData_BrokerSelected); ok { + return x.BrokerSelected + } + return nil +} + +func (x *EventData) GetAuthModesReceived() *Events_AuthModesReceived { + if x, ok := x.GetData().(*EventData_AuthModesReceived); ok { + return x.AuthModesReceived + } + return nil +} + +func (x *EventData) GetAuthModeSelected() *Events_AuthModeSelected { + if x, ok := x.GetData().(*EventData_AuthModeSelected); ok { + return x.AuthModeSelected + } + return nil +} + +func (x *EventData) GetIsAuthenticatedRequested() *Events_IsAuthenticatedRequested { + if x, ok := x.GetData().(*EventData_IsAuthenticatedRequested); ok { + return x.IsAuthenticatedRequested + } + return nil +} + +func (x *EventData) GetStageChanged() *Events_StageChanged { + if x, ok := x.GetData().(*EventData_StageChanged); ok { + return x.StageChanged + } + return nil +} + +func (x *EventData) GetUiLayoutReceived() *Events_UiLayoutReceived { + if x, ok := x.GetData().(*EventData_UiLayoutReceived); ok { + return x.UiLayoutReceived + } + return nil +} + +func (x *EventData) GetAuthEvent() *Events_AuthEvent { + if x, ok := x.GetData().(*EventData_AuthEvent); ok { + return x.AuthEvent + } + return nil +} + +func (x *EventData) GetReselectAuthMode() *Events_ReselectAuthMode { + if x, ok := x.GetData().(*EventData_ReselectAuthMode); ok { + return x.ReselectAuthMode + } + return nil +} + +func (x *EventData) GetStartAuthentication() *Events_StartAuthentication { + if x, ok := x.GetData().(*EventData_StartAuthentication); ok { + return x.StartAuthentication + } + return nil +} + +func (x *EventData) GetUserSelected() *Events_UserSelected { + if x, ok := x.GetData().(*EventData_UserSelected); ok { + return x.UserSelected + } + return nil +} + +type isEventData_Data interface { + isEventData_Data() +} + +type EventData_BrokersReceived struct { + BrokersReceived *Events_BrokersReceived `protobuf:"bytes,10,opt,name=brokersReceived,proto3,oneof"` +} + +type EventData_BrokerSelected struct { + BrokerSelected *Events_BrokerSelected `protobuf:"bytes,11,opt,name=brokerSelected,proto3,oneof"` +} + +type EventData_AuthModesReceived struct { + AuthModesReceived *Events_AuthModesReceived `protobuf:"bytes,12,opt,name=authModesReceived,proto3,oneof"` +} + +type EventData_AuthModeSelected struct { + AuthModeSelected *Events_AuthModeSelected `protobuf:"bytes,13,opt,name=authModeSelected,proto3,oneof"` +} + +type EventData_IsAuthenticatedRequested struct { + IsAuthenticatedRequested *Events_IsAuthenticatedRequested `protobuf:"bytes,14,opt,name=isAuthenticatedRequested,proto3,oneof"` +} + +type EventData_StageChanged struct { + StageChanged *Events_StageChanged `protobuf:"bytes,15,opt,name=stageChanged,proto3,oneof"` +} + +type EventData_UiLayoutReceived struct { + UiLayoutReceived *Events_UiLayoutReceived `protobuf:"bytes,16,opt,name=uiLayoutReceived,proto3,oneof"` +} + +type EventData_AuthEvent struct { + AuthEvent *Events_AuthEvent `protobuf:"bytes,17,opt,name=authEvent,proto3,oneof"` +} + +type EventData_ReselectAuthMode struct { + ReselectAuthMode *Events_ReselectAuthMode `protobuf:"bytes,18,opt,name=reselectAuthMode,proto3,oneof"` +} + +type EventData_StartAuthentication struct { + StartAuthentication *Events_StartAuthentication `protobuf:"bytes,19,opt,name=startAuthentication,proto3,oneof"` +} + +type EventData_UserSelected struct { + UserSelected *Events_UserSelected `protobuf:"bytes,20,opt,name=userSelected,proto3,oneof"` +} + +func (*EventData_BrokersReceived) isEventData_Data() {} + +func (*EventData_BrokerSelected) isEventData_Data() {} + +func (*EventData_AuthModesReceived) isEventData_Data() {} + +func (*EventData_AuthModeSelected) isEventData_Data() {} + +func (*EventData_IsAuthenticatedRequested) isEventData_Data() {} + +func (*EventData_StageChanged) isEventData_Data() {} + +func (*EventData_UiLayoutReceived) isEventData_Data() {} + +func (*EventData_AuthEvent) isEventData_Data() {} + +func (*EventData_ReselectAuthMode) isEventData_Data() {} + +func (*EventData_StartAuthentication) isEventData_Data() {} + +func (*EventData_UserSelected) isEventData_Data() {} + +type Requests_UiLayoutCapabilities struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Requests_UiLayoutCapabilities) Reset() { + *x = Requests_UiLayoutCapabilities{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Requests_UiLayoutCapabilities) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Requests_UiLayoutCapabilities) ProtoMessage() {} + +func (x *Requests_UiLayoutCapabilities) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[8] + 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 Requests_UiLayoutCapabilities.ProtoReflect.Descriptor instead. +func (*Requests_UiLayoutCapabilities) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{2, 0} +} + +type Requests_ChangeStage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Stage int32 `protobuf:"varint,1,opt,name=stage,proto3" json:"stage,omitempty"` +} + +func (x *Requests_ChangeStage) Reset() { + *x = Requests_ChangeStage{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Requests_ChangeStage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Requests_ChangeStage) ProtoMessage() {} + +func (x *Requests_ChangeStage) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[9] + 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 Requests_ChangeStage.ProtoReflect.Descriptor instead. +func (*Requests_ChangeStage) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{2, 1} +} + +func (x *Requests_ChangeStage) GetStage() int32 { + if x != nil { + return x.Stage + } + return 0 +} + +type Responses_Ack struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Responses_Ack) Reset() { + *x = Responses_Ack{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Responses_Ack) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Responses_Ack) ProtoMessage() {} + +func (x *Responses_Ack) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[10] + 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 Responses_Ack.ProtoReflect.Descriptor instead. +func (*Responses_Ack) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{4, 0} +} + +type Responses_UiLayoutCapabilities struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + SupportedUiLayouts []*authd.UILayout `protobuf:"bytes,10,rep,name=supportedUiLayouts,proto3" json:"supportedUiLayouts,omitempty"` +} + +func (x *Responses_UiLayoutCapabilities) Reset() { + *x = Responses_UiLayoutCapabilities{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Responses_UiLayoutCapabilities) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Responses_UiLayoutCapabilities) ProtoMessage() {} + +func (x *Responses_UiLayoutCapabilities) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[11] + 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 Responses_UiLayoutCapabilities.ProtoReflect.Descriptor instead. +func (*Responses_UiLayoutCapabilities) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{4, 1} +} + +func (x *Responses_UiLayoutCapabilities) GetSupportedUiLayouts() []*authd.UILayout { + if x != nil { + return x.SupportedUiLayouts + } + return nil +} + +type Events_BrokersReceived struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BrokersInfos []*authd.ABResponse_BrokerInfo `protobuf:"bytes,1,rep,name=brokersInfos,proto3" json:"brokersInfos,omitempty"` +} + +func (x *Events_BrokersReceived) Reset() { + *x = Events_BrokersReceived{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_BrokersReceived) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_BrokersReceived) ProtoMessage() {} + +func (x *Events_BrokersReceived) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[12] + 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 Events_BrokersReceived.ProtoReflect.Descriptor instead. +func (*Events_BrokersReceived) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 0} +} + +func (x *Events_BrokersReceived) GetBrokersInfos() []*authd.ABResponse_BrokerInfo { + if x != nil { + return x.BrokersInfos + } + return nil +} + +type Events_BrokerSelected struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + BrokerId string `protobuf:"bytes,1,opt,name=brokerId,proto3" json:"brokerId,omitempty"` +} + +func (x *Events_BrokerSelected) Reset() { + *x = Events_BrokerSelected{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_BrokerSelected) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_BrokerSelected) ProtoMessage() {} + +func (x *Events_BrokerSelected) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[13] + 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 Events_BrokerSelected.ProtoReflect.Descriptor instead. +func (*Events_BrokerSelected) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 1} +} + +func (x *Events_BrokerSelected) GetBrokerId() string { + if x != nil { + return x.BrokerId + } + return "" +} + +type Events_UserSelected struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` +} + +func (x *Events_UserSelected) Reset() { + *x = Events_UserSelected{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_UserSelected) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_UserSelected) ProtoMessage() {} + +func (x *Events_UserSelected) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[14] + 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 Events_UserSelected.ProtoReflect.Descriptor instead. +func (*Events_UserSelected) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 2} +} + +func (x *Events_UserSelected) GetUserId() string { + if x != nil { + return x.UserId + } + return "" +} + +type Events_StartAuthentication struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Events_StartAuthentication) Reset() { + *x = Events_StartAuthentication{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_StartAuthentication) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_StartAuthentication) ProtoMessage() {} + +func (x *Events_StartAuthentication) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[15] + 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 Events_StartAuthentication.ProtoReflect.Descriptor instead. +func (*Events_StartAuthentication) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 3} +} + +type Events_AuthModesReceived struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AuthModes []*authd.GAMResponse_AuthenticationMode `protobuf:"bytes,1,rep,name=authModes,proto3" json:"authModes,omitempty"` +} + +func (x *Events_AuthModesReceived) Reset() { + *x = Events_AuthModesReceived{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_AuthModesReceived) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_AuthModesReceived) ProtoMessage() {} + +func (x *Events_AuthModesReceived) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[16] + 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 Events_AuthModesReceived.ProtoReflect.Descriptor instead. +func (*Events_AuthModesReceived) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 4} +} + +func (x *Events_AuthModesReceived) GetAuthModes() []*authd.GAMResponse_AuthenticationMode { + if x != nil { + return x.AuthModes + } + return nil +} + +type Events_AuthModeSelected struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AuthModeId string `protobuf:"bytes,1,opt,name=authModeId,proto3" json:"authModeId,omitempty"` +} + +func (x *Events_AuthModeSelected) Reset() { + *x = Events_AuthModeSelected{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_AuthModeSelected) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_AuthModeSelected) ProtoMessage() {} + +func (x *Events_AuthModeSelected) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[17] + 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 Events_AuthModeSelected.ProtoReflect.Descriptor instead. +func (*Events_AuthModeSelected) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 5} +} + +func (x *Events_AuthModeSelected) GetAuthModeId() string { + if x != nil { + return x.AuthModeId + } + return "" +} + +type Events_AuthEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Response *authd.IAResponse `protobuf:"bytes,1,opt,name=response,proto3" json:"response,omitempty"` +} + +func (x *Events_AuthEvent) Reset() { + *x = Events_AuthEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_AuthEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_AuthEvent) ProtoMessage() {} + +func (x *Events_AuthEvent) ProtoReflect() protoreflect.Message { + mi := &file_gdm_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 Events_AuthEvent.ProtoReflect.Descriptor instead. +func (*Events_AuthEvent) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 6} +} + +func (x *Events_AuthEvent) GetResponse() *authd.IAResponse { + if x != nil { + return x.Response + } + return nil +} + +type Events_ReselectAuthMode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *Events_ReselectAuthMode) Reset() { + *x = Events_ReselectAuthMode{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_ReselectAuthMode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_ReselectAuthMode) ProtoMessage() {} + +func (x *Events_ReselectAuthMode) ProtoReflect() protoreflect.Message { + mi := &file_gdm_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 Events_ReselectAuthMode.ProtoReflect.Descriptor instead. +func (*Events_ReselectAuthMode) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 7} +} + +type Events_IsAuthenticatedRequested struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Challenge *string `protobuf:"bytes,1,opt,name=challenge,proto3,oneof" json:"challenge,omitempty"` + Wait *bool `protobuf:"varint,2,opt,name=wait,proto3,oneof" json:"wait,omitempty"` +} + +func (x *Events_IsAuthenticatedRequested) Reset() { + *x = Events_IsAuthenticatedRequested{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_IsAuthenticatedRequested) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_IsAuthenticatedRequested) ProtoMessage() {} + +func (x *Events_IsAuthenticatedRequested) ProtoReflect() protoreflect.Message { + mi := &file_gdm_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 Events_IsAuthenticatedRequested.ProtoReflect.Descriptor instead. +func (*Events_IsAuthenticatedRequested) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 8} +} + +func (x *Events_IsAuthenticatedRequested) GetChallenge() string { + if x != nil && x.Challenge != nil { + return *x.Challenge + } + return "" +} + +func (x *Events_IsAuthenticatedRequested) GetWait() bool { + if x != nil && x.Wait != nil { + return *x.Wait + } + return false +} + +type Events_StageChanged struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Stage int32 `protobuf:"varint,1,opt,name=stage,proto3" json:"stage,omitempty"` +} + +func (x *Events_StageChanged) Reset() { + *x = Events_StageChanged{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_StageChanged) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_StageChanged) ProtoMessage() {} + +func (x *Events_StageChanged) ProtoReflect() protoreflect.Message { + mi := &file_gdm_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 Events_StageChanged.ProtoReflect.Descriptor instead. +func (*Events_StageChanged) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 9} +} + +func (x *Events_StageChanged) GetStage() int32 { + if x != nil { + return x.Stage + } + return 0 +} + +type Events_UiLayoutReceived struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + UiLayout *authd.UILayout `protobuf:"bytes,1,opt,name=uiLayout,proto3" json:"uiLayout,omitempty"` +} + +func (x *Events_UiLayoutReceived) Reset() { + *x = Events_UiLayoutReceived{} + if protoimpl.UnsafeEnabled { + mi := &file_gdm_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Events_UiLayoutReceived) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Events_UiLayoutReceived) ProtoMessage() {} + +func (x *Events_UiLayoutReceived) ProtoReflect() protoreflect.Message { + mi := &file_gdm_proto_msgTypes[22] + 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 Events_UiLayoutReceived.ProtoReflect.Descriptor instead. +func (*Events_UiLayoutReceived) Descriptor() ([]byte, []int) { + return file_gdm_proto_rawDescGZIP(), []int{6, 10} +} + +func (x *Events_UiLayoutReceived) GetUiLayout() *authd.UILayout { + if x != nil { + return x.UiLayout + } + return nil +} + +var File_gdm_proto protoreflect.FileDescriptor + +var file_gdm_proto_rawDesc = []byte{ + 0x0a, 0x09, 0x67, 0x64, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x67, 0x64, 0x6d, + 0x1a, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc5, 0x02, + 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x68, 0x65, 0x6c, + 0x6c, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x48, + 0x65, 0x6c, 0x6c, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x68, 0x65, 0x6c, 0x6c, + 0x6f, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x02, 0x52, 0x08, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x88, 0x01, 0x01, 0x12, 0x29, 0x0a, 0x05, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x48, 0x03, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x88, 0x01, 0x01, 0x12, 0x32, 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x67, 0x64, 0x6d, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0c, 0x70, 0x6f, 0x6c, 0x6c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x68, 0x65, 0x6c, + 0x6c, 0x6f, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x42, 0x0b, + 0x0a, 0x09, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x25, 0x0a, 0x09, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x47, 0x0a, 0x08, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x1a, 0x16, 0x0a, 0x14, 0x55, 0x69, 0x4c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x1a, 0x23, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x73, 0x74, 0x61, 0x67, 0x65, 0x22, 0xd4, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, 0x14, 0x75, + 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x64, 0x6d, 0x2e, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x55, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, + 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x48, 0x00, 0x52, + 0x14, 0x75, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, + 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3d, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, + 0x74, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x64, 0x6d, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, + 0x74, 0x61, 0x67, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x6b, 0x0a, 0x09, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x1a, 0x05, 0x0a, 0x03, 0x41, 0x63, 0x6b, + 0x1a, 0x57, 0x0a, 0x14, 0x55, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x43, 0x61, 0x70, 0x61, + 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x12, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x55, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x18, 0x0a, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x64, 0x2e, 0x55, 0x49, 0x4c, + 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x12, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, + 0x55, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x73, 0x22, 0xbf, 0x01, 0x0a, 0x0c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x26, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x67, 0x64, 0x6d, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x41, 0x63, + 0x6b, 0x48, 0x00, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x12, 0x59, 0x0a, 0x14, 0x75, 0x69, 0x4c, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x55, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x43, + 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x48, 0x00, 0x52, 0x14, 0x75, + 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xfe, 0x04, 0x0a, 0x06, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, 0x53, 0x0a, 0x0f, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, + 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x40, 0x0a, 0x0c, 0x62, 0x72, 0x6f, + 0x6b, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x64, 0x2e, 0x41, 0x42, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0c, 0x62, + 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x73, 0x1a, 0x2c, 0x0a, 0x0e, 0x42, + 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x1a, 0x0a, + 0x08, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x1a, 0x26, 0x0a, 0x0c, 0x55, 0x73, 0x65, + 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, + 0x72, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x1a, 0x15, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x58, 0x0a, 0x11, 0x41, 0x75, 0x74, 0x68, + 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x43, 0x0a, + 0x09, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x64, 0x2e, 0x47, 0x41, 0x4d, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, + 0x65, 0x73, 0x1a, 0x32, 0x0a, 0x10, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x6f, + 0x64, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x75, 0x74, 0x68, + 0x4d, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x1a, 0x3a, 0x0a, 0x09, 0x41, 0x75, 0x74, 0x68, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x64, 0x2e, 0x49, 0x41, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x1a, 0x12, 0x0a, 0x10, 0x52, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x41, 0x75, + 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x1a, 0x6d, 0x0a, 0x18, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x65, 0x64, 0x12, 0x21, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, + 0x67, 0x65, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x04, 0x77, 0x61, 0x69, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x04, 0x77, 0x61, 0x69, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0c, + 0x0a, 0x0a, 0x5f, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x42, 0x07, 0x0a, 0x05, + 0x5f, 0x77, 0x61, 0x69, 0x74, 0x1a, 0x24, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x67, 0x65, 0x43, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x1a, 0x3f, 0x0a, 0x10, 0x55, + 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, + 0x2b, 0x0a, 0x08, 0x75, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x64, 0x2e, 0x55, 0x49, 0x4c, 0x61, 0x79, 0x6f, + 0x75, 0x74, 0x52, 0x08, 0x75, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x22, 0xe9, 0x06, 0x0a, + 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x47, + 0x0a, 0x0f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x42, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x0e, 0x62, 0x72, 0x6f, 0x6b, 0x65, + 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x42, 0x72, 0x6f, + 0x6b, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x62, + 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x4d, 0x0a, + 0x11, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x52, + 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x61, 0x75, 0x74, 0x68, 0x4d, + 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x10, + 0x61, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x10, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, + 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x62, 0x0a, 0x18, 0x69, 0x73, 0x41, 0x75, + 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x64, 0x6d, + 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x49, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, + 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x18, 0x69, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x12, 0x3e, 0x0a, 0x0c, + 0x73, 0x74, 0x61, 0x67, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, + 0x53, 0x74, 0x61, 0x67, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, + 0x73, 0x74, 0x61, 0x67, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x4a, 0x0a, 0x10, + 0x75, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x55, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x10, 0x75, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, + 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x35, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x67, 0x64, + 0x6d, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x4a, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, + 0x6f, 0x64, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x64, 0x6d, 0x2e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x41, + 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x53, 0x0a, 0x13, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x3e, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x67, 0x64, 0x6d, 0x2e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x2a, 0x76, 0x0a, 0x08, 0x44, 0x61, 0x74, 0x61, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x10, 0x01, + 0x12, 0x09, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x6b, 0x10, 0x03, 0x12, 0x0b, 0x0a, 0x07, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x10, 0x05, 0x12, 0x08, 0x0a, 0x04, 0x70, 0x6f, 0x6c, 0x6c, 0x10, 0x06, 0x12, 0x10, + 0x0a, 0x0c, 0x70, 0x6f, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x10, 0x07, + 0x2a, 0x82, 0x01, 0x0a, 0x0b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x12, 0x0a, 0x0e, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x42, 0x72, + 0x6f, 0x6b, 0x65, 0x72, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x10, 0x01, 0x12, 0x1d, 0x0a, 0x19, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x69, 0x65, 0x77, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x75, 0x69, + 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x43, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, + 0x65, 0x73, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, + 0x61, 0x67, 0x65, 0x10, 0x04, 0x2a, 0x89, 0x02, 0x0a, 0x09, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x10, 0x01, 0x12, 0x13, 0x0a, 0x0f, 0x62, 0x72, 0x6f, 0x6b, 0x65, + 0x72, 0x73, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, + 0x62, 0x72, 0x6f, 0x6b, 0x65, 0x72, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x10, 0x03, + 0x12, 0x15, 0x0a, 0x11, 0x61, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x64, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x61, 0x75, 0x74, 0x68, 0x4d, + 0x6f, 0x64, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x10, 0x05, 0x12, 0x14, 0x0a, + 0x10, 0x72, 0x65, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x6f, 0x64, + 0x65, 0x10, 0x06, 0x12, 0x0d, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x75, 0x69, 0x4c, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x10, 0x08, 0x12, 0x17, 0x0a, 0x13, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x10, + 0x09, 0x12, 0x1c, 0x0a, 0x18, 0x69, 0x73, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x65, 0x64, 0x10, 0x0a, 0x12, + 0x10, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x67, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x10, + 0x0b, 0x42, 0x21, 0x5a, 0x1f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x75, 0x62, 0x75, 0x6e, 0x74, 0x75, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x64, 0x2f, 0x70, 0x61, 0x6d, + 0x2f, 0x67, 0x64, 0x6d, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_gdm_proto_rawDescOnce sync.Once + file_gdm_proto_rawDescData = file_gdm_proto_rawDesc +) + +func file_gdm_proto_rawDescGZIP() []byte { + file_gdm_proto_rawDescOnce.Do(func() { + file_gdm_proto_rawDescData = protoimpl.X.CompressGZIP(file_gdm_proto_rawDescData) + }) + return file_gdm_proto_rawDescData +} + +var file_gdm_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_gdm_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_gdm_proto_goTypes = []interface{}{ + (DataType)(0), // 0: gdm.DataType + (RequestType)(0), // 1: gdm.RequestType + (EventType)(0), // 2: gdm.EventType + (*Data)(nil), // 3: gdm.Data + (*HelloData)(nil), // 4: gdm.HelloData + (*Requests)(nil), // 5: gdm.Requests + (*RequestData)(nil), // 6: gdm.RequestData + (*Responses)(nil), // 7: gdm.Responses + (*ResponseData)(nil), // 8: gdm.ResponseData + (*Events)(nil), // 9: gdm.Events + (*EventData)(nil), // 10: gdm.EventData + (*Requests_UiLayoutCapabilities)(nil), // 11: gdm.Requests.UiLayoutCapabilities + (*Requests_ChangeStage)(nil), // 12: gdm.Requests.ChangeStage + (*Responses_Ack)(nil), // 13: gdm.Responses.Ack + (*Responses_UiLayoutCapabilities)(nil), // 14: gdm.Responses.UiLayoutCapabilities + (*Events_BrokersReceived)(nil), // 15: gdm.Events.BrokersReceived + (*Events_BrokerSelected)(nil), // 16: gdm.Events.BrokerSelected + (*Events_UserSelected)(nil), // 17: gdm.Events.UserSelected + (*Events_StartAuthentication)(nil), // 18: gdm.Events.StartAuthentication + (*Events_AuthModesReceived)(nil), // 19: gdm.Events.AuthModesReceived + (*Events_AuthModeSelected)(nil), // 20: gdm.Events.AuthModeSelected + (*Events_AuthEvent)(nil), // 21: gdm.Events.AuthEvent + (*Events_ReselectAuthMode)(nil), // 22: gdm.Events.ReselectAuthMode + (*Events_IsAuthenticatedRequested)(nil), // 23: gdm.Events.IsAuthenticatedRequested + (*Events_StageChanged)(nil), // 24: gdm.Events.StageChanged + (*Events_UiLayoutReceived)(nil), // 25: gdm.Events.UiLayoutReceived + (*authd.UILayout)(nil), // 26: authd.UILayout + (*authd.ABResponse_BrokerInfo)(nil), // 27: authd.ABResponse.BrokerInfo + (*authd.GAMResponse_AuthenticationMode)(nil), // 28: authd.GAMResponse.AuthenticationMode + (*authd.IAResponse)(nil), // 29: authd.IAResponse +} +var file_gdm_proto_depIdxs = []int32{ + 0, // 0: gdm.Data.type:type_name -> gdm.DataType + 4, // 1: gdm.Data.hello:type_name -> gdm.HelloData + 6, // 2: gdm.Data.request:type_name -> gdm.RequestData + 8, // 3: gdm.Data.response:type_name -> gdm.ResponseData + 10, // 4: gdm.Data.event:type_name -> gdm.EventData + 10, // 5: gdm.Data.pollResponse:type_name -> gdm.EventData + 1, // 6: gdm.RequestData.type:type_name -> gdm.RequestType + 11, // 7: gdm.RequestData.uiLayoutCapabilities:type_name -> gdm.Requests.UiLayoutCapabilities + 12, // 8: gdm.RequestData.changeStage:type_name -> gdm.Requests.ChangeStage + 1, // 9: gdm.ResponseData.type:type_name -> gdm.RequestType + 13, // 10: gdm.ResponseData.ack:type_name -> gdm.Responses.Ack + 14, // 11: gdm.ResponseData.uiLayoutCapabilities:type_name -> gdm.Responses.UiLayoutCapabilities + 2, // 12: gdm.EventData.type:type_name -> gdm.EventType + 15, // 13: gdm.EventData.brokersReceived:type_name -> gdm.Events.BrokersReceived + 16, // 14: gdm.EventData.brokerSelected:type_name -> gdm.Events.BrokerSelected + 19, // 15: gdm.EventData.authModesReceived:type_name -> gdm.Events.AuthModesReceived + 20, // 16: gdm.EventData.authModeSelected:type_name -> gdm.Events.AuthModeSelected + 23, // 17: gdm.EventData.isAuthenticatedRequested:type_name -> gdm.Events.IsAuthenticatedRequested + 24, // 18: gdm.EventData.stageChanged:type_name -> gdm.Events.StageChanged + 25, // 19: gdm.EventData.uiLayoutReceived:type_name -> gdm.Events.UiLayoutReceived + 21, // 20: gdm.EventData.authEvent:type_name -> gdm.Events.AuthEvent + 22, // 21: gdm.EventData.reselectAuthMode:type_name -> gdm.Events.ReselectAuthMode + 18, // 22: gdm.EventData.startAuthentication:type_name -> gdm.Events.StartAuthentication + 17, // 23: gdm.EventData.userSelected:type_name -> gdm.Events.UserSelected + 26, // 24: gdm.Responses.UiLayoutCapabilities.supportedUiLayouts:type_name -> authd.UILayout + 27, // 25: gdm.Events.BrokersReceived.brokersInfos:type_name -> authd.ABResponse.BrokerInfo + 28, // 26: gdm.Events.AuthModesReceived.authModes:type_name -> authd.GAMResponse.AuthenticationMode + 29, // 27: gdm.Events.AuthEvent.response:type_name -> authd.IAResponse + 26, // 28: gdm.Events.UiLayoutReceived.uiLayout:type_name -> authd.UILayout + 29, // [29:29] is the sub-list for method output_type + 29, // [29:29] is the sub-list for method input_type + 29, // [29:29] is the sub-list for extension type_name + 29, // [29:29] is the sub-list for extension extendee + 0, // [0:29] is the sub-list for field type_name +} + +func init() { file_gdm_proto_init() } +func file_gdm_proto_init() { + if File_gdm_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_gdm_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Data); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HelloData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Requests); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RequestData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Responses); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ResponseData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*EventData); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Requests_UiLayoutCapabilities); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Requests_ChangeStage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Responses_Ack); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Responses_UiLayoutCapabilities); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_BrokersReceived); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_BrokerSelected); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_UserSelected); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_StartAuthentication); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_AuthModesReceived); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_AuthModeSelected); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_AuthEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_ReselectAuthMode); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_IsAuthenticatedRequested); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_StageChanged); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_gdm_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Events_UiLayoutReceived); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_gdm_proto_msgTypes[0].OneofWrappers = []interface{}{} + file_gdm_proto_msgTypes[3].OneofWrappers = []interface{}{ + (*RequestData_UiLayoutCapabilities)(nil), + (*RequestData_ChangeStage)(nil), + } + file_gdm_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*ResponseData_Ack)(nil), + (*ResponseData_UiLayoutCapabilities)(nil), + } + file_gdm_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*EventData_BrokersReceived)(nil), + (*EventData_BrokerSelected)(nil), + (*EventData_AuthModesReceived)(nil), + (*EventData_AuthModeSelected)(nil), + (*EventData_IsAuthenticatedRequested)(nil), + (*EventData_StageChanged)(nil), + (*EventData_UiLayoutReceived)(nil), + (*EventData_AuthEvent)(nil), + (*EventData_ReselectAuthMode)(nil), + (*EventData_StartAuthentication)(nil), + (*EventData_UserSelected)(nil), + } + file_gdm_proto_msgTypes[20].OneofWrappers = []interface{}{} + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_gdm_proto_rawDesc, + NumEnums: 3, + NumMessages: 23, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_gdm_proto_goTypes, + DependencyIndexes: file_gdm_proto_depIdxs, + EnumInfos: file_gdm_proto_enumTypes, + MessageInfos: file_gdm_proto_msgTypes, + }.Build() + File_gdm_proto = out.File + file_gdm_proto_rawDesc = nil + file_gdm_proto_goTypes = nil + file_gdm_proto_depIdxs = nil +} diff --git a/pam/gdm/gdm.proto b/pam/gdm/gdm.proto new file mode 100644 index 0000000000..197f6978be --- /dev/null +++ b/pam/gdm/gdm.proto @@ -0,0 +1,169 @@ +syntax = "proto3"; +package gdm; + +option go_package = "github.com/ubuntu/authd/pam/gdm"; + +import "authd.proto"; + +enum DataType { + // DataType_unknownType is an unknown DataType. + unknownType = 0; + // DataType_hello is an hello DataType. + hello = 1; + // DataType_event is an event DataType. + event = 2; + // DataType_eventAck is an event DataType. + eventAck = 3; + // DataType_request is a request DataType. + request = 4; + // DataType_response is a response DataType. + response = 5; + // DataType_poll is a poll DataType. + poll = 6; + // DataType_pollResponse is a poll response DataType. + pollResponse = 7; +} + +message Data { + DataType type = 1; + + optional HelloData hello = 2; + optional RequestData request = 3; + optional ResponseData response = 4; + optional EventData event = 5; + repeated EventData pollResponse = 6; +} + +message HelloData { + uint32 version = 1; +} + +enum RequestType { + // RequestType_unknownRequest is an unknown request RequestType. + unknownRequest = 0; + // RequestType_updateBrokersList is an update brokers list RequestType. + updateBrokersList = 1; + // RequestType_composeAuthenticationView is an compose authentication view RequestType. + composeAuthenticationView = 2; + // RequestType_uiLayoutCapabilities is an ui layout capabilities RequestType. + uiLayoutCapabilities = 3; + // RequestType_changeStage is a change stage RequestType. + changeStage = 4; +} + +message Requests { + message UiLayoutCapabilities {} + message ChangeStage { + int32 stage = 1; + } +} + +message RequestData { + RequestType type = 1; + oneof data { + Requests.UiLayoutCapabilities uiLayoutCapabilities = 10; + Requests.ChangeStage changeStage = 11; + } +} + +message Responses { + message Ack {} + message UiLayoutCapabilities { + repeated authd.UILayout supportedUiLayouts = 10; + } +} + +message ResponseData { + RequestType type = 1; + oneof data { + Responses.Ack ack = 10; + Responses.UiLayoutCapabilities uiLayoutCapabilities = 11; + } +} + +enum EventType { + // EventType_unknownEvent is an unknown EventType. + unknownEvent = 0; + // EventType_userSelected is an user selected EventType. + userSelected = 1; + // EventType_brokersReceived is a broker received EventType. + brokersReceived = 2; + // EventType_brokerSelected is a broker selected EventType. + brokerSelected = 3; + // EventType_authModesReceived is an auth modes received EventType. + authModesReceived = 4; + // EventType_authModeSelected is an auth mode selected EventType. + authModeSelected = 5; + // EventType_reselectAuthMode is an reselect auth mode selected EventType. + reselectAuthMode = 6; + // EventType_authEvent is an auth event EventType. + authEvent = 7; + // EventType_uiLayoutReceived is an UI Layout Received EventType. + uiLayoutReceived = 8; + // EventType_startAuthentication is a start authentication EventType. + startAuthentication = 9; + // EventType_isAuthenticatedRequested is an authentication request EventType. + isAuthenticatedRequested = 10; + // EventType_stageChanged is stage changed EventType. + stageChanged = 11; +} + +message Events { + message BrokersReceived { + repeated authd.ABResponse.BrokerInfo brokersInfos = 1; + } + + message BrokerSelected { + string brokerId = 1; + } + + message UserSelected{ + string userId = 1; + } + + message StartAuthentication{} + + message AuthModesReceived { + repeated authd.GAMResponse.AuthenticationMode authModes = 1; + } + + message AuthModeSelected { + string authModeId = 1; + } + + message AuthEvent { + authd.IAResponse response = 1; + } + + message ReselectAuthMode {} + + message IsAuthenticatedRequested { + optional string challenge = 1; + optional bool wait = 2; + } + + message StageChanged { + int32 stage = 1; + } + + message UiLayoutReceived { + authd.UILayout uiLayout = 1; + } +} + +message EventData { + EventType type = 1; + oneof data { + Events.BrokersReceived brokersReceived = 10; + Events.BrokerSelected brokerSelected = 11; + Events.AuthModesReceived authModesReceived = 12; + Events.AuthModeSelected authModeSelected = 13; + Events.IsAuthenticatedRequested isAuthenticatedRequested = 14; + Events.StageChanged stageChanged = 15; + Events.UiLayoutReceived uiLayoutReceived = 16; + Events.AuthEvent authEvent = 17; + Events.ReselectAuthMode reselectAuthMode = 18; + Events.StartAuthentication startAuthentication = 19; + Events.UserSelected userSelected = 20; + } +} diff --git a/pam/gdm/protocol.go b/pam/gdm/protocol.go new file mode 100644 index 0000000000..dadd3aa13a --- /dev/null +++ b/pam/gdm/protocol.go @@ -0,0 +1,161 @@ +// Package gdm is the package for the GDM pam module handing. +package gdm + +//TODO: Watch https://github.com/protocolbuffers/protobuf for any changes on the experimental status of optional fields, +// previously described on: https://github.com/protocolbuffers/protobuf/blob/main/docs/implementing_proto3_presence.md. +// +// Should it become default, remove the --experimental_allow_proto3_optional flag from the go generate command below. +//go:generate sh -c "PATH=\"$PATH:`go env GOPATH`/bin\" protoc --proto_path=. --go_out=. --go_opt=paths=source_relative gdm.proto --experimental_allow_proto3_optional -I../.." + +import ( + "errors" + "fmt" + "reflect" + "slices" + + "google.golang.org/protobuf/encoding/protojson" +) + +const ( + // ProtoVersion is the version of the JSON protocol. + ProtoVersion = uint32(1) +) + +// NewDataFromJSON unmarshals data from json bytes. +func NewDataFromJSON(bytes []byte) (*Data, error) { + var gdmData Data + if err := protojson.Unmarshal(bytes, &gdmData); err != nil { + return nil, err + } + + if err := gdmData.Check(); err != nil { + return nil, err + } + + return &gdmData, nil +} + +// FIXME: Do not do this when building the module in release mode, this is +// just relevant for testing purposes. +func (d *Data) checkMembers(acceptedMembers []string) error { + //nolint:govet + //We only redirect the value to figure out its type. + val := reflect.ValueOf(*d) + typ := val.Type() + acceptedMembers = append(acceptedMembers, []string{ + "Type", "state", "sizeCache", "unknownFields", + }...) + + for i := 0; i < val.NumField(); i++ { + field := val.Field(i) + fieldType := typ.Field(i) + + if slices.Contains(acceptedMembers, fieldType.Name) { + continue + } + + if !field.IsZero() { + return fmt.Errorf("field %v should not be defined", fieldType.Name) + } + } + + return nil +} + +// Check allows to check the sanity of a data value. +func (d *Data) Check() error { + switch d.Type { + case DataType_unknownType: + return fmt.Errorf("unexpected type %v", d.Type.String()) + + case DataType_hello: + if err := d.checkMembers([]string{"Hello"}); err != nil { + return err + } + + case DataType_event: + if d.Event == nil { + return fmt.Errorf("missing event data") + } + if d.Event.Type == EventType_unknownEvent { + return errors.New("missing event type") + } + if _, ok := EventType_name[int32(d.Event.Type)]; !ok { + return fmt.Errorf("unexpected event type %v", d.Event.Type) + } + if d.Event.Data == nil { + return fmt.Errorf("missing event data") + } + if err := d.checkMembers([]string{"Event"}); err != nil { + return err + } + + case DataType_eventAck: + if err := d.checkMembers([]string{}); err != nil { + return err + } + + case DataType_request: + if d.Request == nil { + return errors.New("missing request data") + } + if d.Request.Type == RequestType_unknownRequest { + return errors.New("missing request type") + } + if _, ok := RequestType_name[int32(d.Request.Type)]; !ok { + return fmt.Errorf("unexpected request type %v", d.Request.Type) + } + if err := d.checkMembers([]string{"Request"}); err != nil { + return err + } + + case DataType_response: + if d.Response == nil { + return errors.New("missing response data") + } + if d.Response.Type == RequestType_unknownRequest { + return errors.New("missing response type") + } + if _, ok := RequestType_name[int32(d.Response.Type)]; !ok { + return fmt.Errorf("unexpected request type %v", d.Response.Type) + } + if err := d.checkMembers([]string{"Response"}); err != nil { + return err + } + + case DataType_poll: + if err := d.checkMembers([]string{}); err != nil { + return err + } + + case DataType_pollResponse: + if err := d.checkMembers([]string{"PollResponse"}); err != nil { + return err + } + for i, response := range d.PollResponse { + data := &Data{Type: DataType_event, Event: response} + if err := data.Check(); err != nil { + return fmt.Errorf("poll response data member %v invalid: %v", i, err) + } + } + + default: + return fmt.Errorf("unhandled type %v", d.Type) + } + + return nil +} + +// JSON returns the data object serialized as JSON bytes. +func (d *Data) JSON() ([]byte, error) { + bytes, err := protojson.Marshal(d) + if err != nil { + return nil, err + } + + if err = d.Check(); err != nil { + return nil, err + } + + return bytes, err +} diff --git a/pam/gdm/protocol_test.go b/pam/gdm/protocol_test.go new file mode 100644 index 0000000000..6ceb73bd2d --- /dev/null +++ b/pam/gdm/protocol_test.go @@ -0,0 +1,670 @@ +package gdm + +import ( + "encoding/json" + "testing" + + "github.com/stretchr/testify/require" +) + +func reformatJSON(t *testing.T, input []byte) []byte { + // We can't safely compare for JSON values when generated via protobuf + // so we initially pass it to native implementation to make it rebuild + // the JSON data so that the output is more reliable. + // See: https://protobuf.dev/reference/go/faq/#unstable-json + t.Helper() + var js json.RawMessage + err := json.Unmarshal(input, &js) + require.NoError(t, err) + out, err := json.Marshal(js) + require.NoError(t, err) + return out +} + +func TestGdmStructsMarshal(t *testing.T) { + t.Parallel() + tests := map[string]struct { + gdmData *Data + + wantJSON string + wantErrMsg string + }{ + "Hello packet": { + gdmData: &Data{Type: DataType_hello}, + + wantJSON: `{"type":"hello"}`, + }, + + "Hello packet with data": { + gdmData: &Data{Type: DataType_hello, Hello: &HelloData{Version: 55}}, + + wantJSON: `{"type":"hello","hello":{"version":55}}`, + }, + + "Event packet": { + gdmData: &Data{ + Type: DataType_event, + Event: &EventData{ + Type: EventType_brokerSelected, + Data: &EventData_BrokerSelected{}, + }, + }, + + wantJSON: `{"type":"event","event":{"type":"brokerSelected","brokerSelected":{}}}`, + }, + + "Event ack packet": { + gdmData: &Data{Type: DataType_eventAck}, + + wantJSON: `{"type":"eventAck"}`, + }, + + "Request packet": { + gdmData: &Data{ + Type: DataType_request, + Request: &RequestData{ + Type: RequestType_uiLayoutCapabilities, + Data: &RequestData_UiLayoutCapabilities{}, + }, + }, + + wantJSON: `{"type":"request","request":{"type":"uiLayoutCapabilities","uiLayoutCapabilities":{}}}`, + }, + + "Request packet with missing data": { + gdmData: &Data{ + Type: DataType_request, + Request: &RequestData{ + Type: RequestType_updateBrokersList, + }, + }, + + wantJSON: `{"type":"request","request":{"type":"updateBrokersList"}}`, + }, + + "Response packet": { + gdmData: &Data{ + Type: DataType_response, + Response: &ResponseData{ + Type: RequestType_uiLayoutCapabilities, + Data: &ResponseData_UiLayoutCapabilities{}, + }, + }, + + wantJSON: `{"type":"response","response":{"type":"uiLayoutCapabilities","uiLayoutCapabilities":{}}}`, + }, + + "Response packet with ack data": { + gdmData: &Data{ + Type: DataType_response, + Response: &ResponseData{ + Type: RequestType_changeStage, + Data: &ResponseData_Ack{}, + }, + }, + + wantJSON: `{"type":"response","response":{"type":"changeStage","ack":{}}}`, + }, + + "Poll packet": { + gdmData: &Data{Type: DataType_poll}, + + wantJSON: `{"type":"poll"}`, + }, + + "PollResponse packet": { + gdmData: &Data{ + Type: DataType_pollResponse, + PollResponse: []*EventData{ + { + Type: EventType_brokerSelected, + Data: &EventData_BrokerSelected{ + BrokerSelected: &Events_BrokerSelected{BrokerId: "a broker"}, + }, + }, + }, + }, + + wantJSON: `{"type":"pollResponse","pollResponse":` + + `[{"type":"brokerSelected","brokerSelected":{"brokerId":"a broker"}}]}`, + }, + + "PollResponse packet with multiple results": { + gdmData: &Data{ + Type: DataType_pollResponse, + PollResponse: []*EventData{ + { + Type: EventType_brokerSelected, + Data: &EventData_BrokerSelected{ + BrokerSelected: &Events_BrokerSelected{BrokerId: "a broker"}, + }, + }, + { + Type: EventType_authModeSelected, + Data: &EventData_AuthModeSelected{ + AuthModeSelected: &Events_AuthModeSelected{AuthModeId: "auth mode"}, + }, + }, + }, + }, + + wantJSON: `{"type":"pollResponse","pollResponse":` + + `[{"type":"brokerSelected","brokerSelected":{"brokerId":"a broker"}},` + + `{"type":"authModeSelected","authModeSelected":{"authModeId":"auth mode"}}]}`, + }, + + "PollResponse packet with nil data": { + gdmData: &Data{ + Type: DataType_pollResponse, + PollResponse: nil, + }, + + wantJSON: `{"type":"pollResponse"}`, + }, + + "PollResponse packet with empty data": { + gdmData: &Data{ + Type: DataType_pollResponse, + PollResponse: []*EventData{}, + }, + + wantJSON: `{"type":"pollResponse"}`, + }, + + // Error cases + "Error empty packet": { + gdmData: &Data{}, + + wantErrMsg: "unexpected type unknownType", + }, + + "Error if packet has invalid type": { + gdmData: &Data{Type: DataType(-1)}, + + wantErrMsg: "unhandled type -1", + }, + + "Error hello packet with unexpected data": { + gdmData: &Data{Type: DataType_hello, Request: &RequestData{}}, + + wantErrMsg: "field Request should not be defined", + }, + + "Error event packet with unknown type": { + gdmData: &Data{ + Type: DataType_event, + Event: &EventData{Type: EventType_unknownEvent}, + }, + + wantErrMsg: "missing event type", + }, + + "Error event packet with invalid type": { + gdmData: &Data{Type: DataType_event, Event: &EventData{Type: EventType(-1)}}, + + wantErrMsg: "unexpected event type", + }, + + "Error event packet with missing data": { + gdmData: &Data{Type: DataType_event, Event: nil}, + + wantErrMsg: "missing event data", + }, + + "Error event packet with empty data": { + gdmData: &Data{Type: DataType_event, Event: &EventData{}}, + + wantErrMsg: "missing event type", + }, + + "Error event packet with missing type": { + gdmData: &Data{Type: DataType_event, Event: &EventData{Data: &EventData_AuthModeSelected{}}}, + + wantErrMsg: "missing event type", + }, + + "Error event packet with unexpected data": { + gdmData: &Data{ + Type: DataType_event, + Event: &EventData{Type: EventType_authEvent, Data: &EventData_AuthModeSelected{}}, + Hello: &HelloData{}, + }, + + wantErrMsg: "field Hello should not be defined", + }, + + "Error event ack packet with unexpected data": { + gdmData: &Data{Type: DataType_eventAck, Event: &EventData{}}, + + wantErrMsg: "field Event should not be defined", + }, + + "Error request packet with unknown type": { + gdmData: &Data{Type: DataType_request, Request: &RequestData{Data: &RequestData_ChangeStage{}}}, + + wantErrMsg: "missing request type", + }, + + "Error request packet with invalid type": { + gdmData: &Data{Type: DataType_request, Request: &RequestData{Type: RequestType(-1)}}, + + wantErrMsg: "unexpected request type", + }, + + "Error request packet with missing data": { + gdmData: &Data{Type: DataType_request, Request: nil}, + + wantErrMsg: "missing request data", + }, + + "Error request packet with empty data": { + gdmData: &Data{Type: DataType_request, Request: &RequestData{}}, + wantErrMsg: "missing request type", + }, + + "Error request packet with unexpected data": { + gdmData: &Data{ + Type: DataType_request, + Request: &RequestData{ + Type: RequestType_changeStage, + Data: &RequestData_ChangeStage{}, + }, + Event: &EventData{}, + }, + + wantErrMsg: "field Event should not be defined", + }, + + "Error response packet with missing data": { + gdmData: &Data{Type: DataType_response}, + + wantErrMsg: "missing response data", + }, + + "Error response packet with missing type": { + gdmData: &Data{ + Type: DataType_response, + Response: &ResponseData{Data: &ResponseData_Ack{}}, + }, + + wantErrMsg: "missing response type", + }, + + "Error response packet with invalid type": { + gdmData: &Data{ + Type: DataType_response, + Response: &ResponseData{Type: RequestType(-1), Data: &ResponseData_Ack{}}, + }, + + wantErrMsg: "unexpected request type -1", + }, + + "Error response packet with unexpected data": { + gdmData: &Data{ + Type: DataType_response, + Response: &ResponseData{Type: RequestType_changeStage, Data: &ResponseData_Ack{}}, + Event: &EventData{}, + }, + + wantErrMsg: "field Event should not be defined", + }, + + "Error poll packet with unexpected data": { + gdmData: &Data{Type: DataType_poll, Request: &RequestData{}}, + + wantErrMsg: "field Request should not be defined", + }, + + "Error pollResponse packet with missing event type": { + gdmData: &Data{ + Type: DataType_pollResponse, + PollResponse: []*EventData{ + { + Type: EventType_brokerSelected, + Data: &EventData_BrokerSelected{ + BrokerSelected: &Events_BrokerSelected{BrokerId: "a broker"}, + }, + }, + { + Data: &EventData_AuthModeSelected{ + AuthModeSelected: &Events_AuthModeSelected{AuthModeId: "auth mode"}, + }, + }, + }, + }, + + wantErrMsg: "poll response data member 1 invalid: missing event type", + }, + + "Error pollResponse packet with event with missing type": { + gdmData: &Data{ + Type: DataType_pollResponse, + PollResponse: []*EventData{ + {}, + { + Type: EventType_authModeSelected, + Data: &EventData_AuthModeSelected{ + AuthModeSelected: &Events_AuthModeSelected{AuthModeId: "auth mode"}, + }, + }, + }, + }, + + wantErrMsg: "poll response data member 0 invalid: missing event type", + }, + + "Error pollResponse packet with unexpected data": { + gdmData: &Data{ + Type: DataType_pollResponse, + PollResponse: []*EventData{}, + Event: &EventData{}, + }, + + wantErrMsg: "field Event should not be defined", + }, + } + + for name, tc := range tests { + tc := tc + t.Run(name, func(t *testing.T) { + t.Parallel() + bytes, err := tc.gdmData.JSON() + if tc.wantErrMsg != "" { + require.ErrorContains(t, err, tc.wantErrMsg) + return + } + require.NoError(t, err) + + formattedJSON := string(reformatJSON(t, bytes)) + require.Equal(t, tc.wantJSON, formattedJSON) + + // Now try to reconvert things back again + gdmData, err := NewDataFromJSON(bytes) + require.NoError(t, err) + newBytes, err := gdmData.JSON() + require.NoError(t, err) + require.Equal(t, formattedJSON, string(reformatJSON(t, newBytes))) + }) + } +} + +func TestGdmStructsUnMarshal(t *testing.T) { + t.Parallel() + tests := map[string]struct { + JSON string + + wantData *Data + wantErrMsg string + }{ + "hello packet": { + JSON: `{"type":"hello"}`, + + wantData: &Data{Type: DataType_hello}, + }, + + "Hello packet with data": { + JSON: `{"type":"hello","hello":{"version":55}}`, + + wantData: &Data{Type: DataType_hello, Hello: &HelloData{Version: 55}}, + }, + + "Event packet": { + JSON: `{"type":"event","event":{"type":"brokerSelected","brokerSelected":{}}}`, + + wantData: &Data{ + Type: DataType_event, + Event: &EventData{ + Type: EventType_brokerSelected, + Data: &EventData_BrokerSelected{}, + }, + }, + }, + + "Event ack packet": { + JSON: `{"type":"eventAck"}`, + + wantData: &Data{Type: DataType_eventAck}, + }, + + "Request packet": { + JSON: `{"type":"request","request":{"type":"uiLayoutCapabilities","uiLayoutCapabilities":{}}}`, + + wantData: &Data{ + Type: DataType_request, + Request: &RequestData{ + Type: RequestType_uiLayoutCapabilities, + Data: &RequestData_UiLayoutCapabilities{}, + }, + }, + }, + + "Request packet with missing data": { + JSON: `{"type":"request","request":{"type":"updateBrokersList"}}`, + + wantData: &Data{ + Type: DataType_request, + Request: &RequestData{ + Type: RequestType_updateBrokersList, + }, + }, + }, + + "Response packet": { + JSON: `{"type":"response","response":{"type":"uiLayoutCapabilities","uiLayoutCapabilities":{}}}`, + + wantData: &Data{ + Type: DataType_response, + Response: &ResponseData{ + Type: RequestType_uiLayoutCapabilities, + Data: &ResponseData_UiLayoutCapabilities{}, + }, + }, + }, + + "Response packet with ack data": { + JSON: `{"type":"response","response":{"type":"changeStage","ack":{}}}`, + + wantData: &Data{ + Type: DataType_response, + Response: &ResponseData{ + Type: RequestType_changeStage, + Data: &ResponseData_Ack{}, + }, + }, + }, + + "Poll packet": { + JSON: `{"type":"poll"}`, + + wantData: &Data{Type: DataType_poll}, + }, + + "PollResponse packet": { + JSON: `{"type":"pollResponse","pollResponse":` + + `[{"type":"brokerSelected","brokerSelected":{"brokerId":"a broker"}}]}`, + + wantData: &Data{ + Type: DataType_pollResponse, + PollResponse: []*EventData{ + { + Type: EventType_brokerSelected, + Data: &EventData_BrokerSelected{ + BrokerSelected: &Events_BrokerSelected{BrokerId: "a broker"}, + }, + }, + }, + }, + }, + + "PollResponse packet with missing data": { + JSON: `{"type":"pollResponse"}`, + + wantData: &Data{ + Type: DataType_pollResponse, + PollResponse: nil, + }, + }, + + // Error cases + "Error empty packet ": { + wantErrMsg: "syntax error", + }, + + "Error empty packet object": { + JSON: `{}`, + + wantErrMsg: "unexpected type unknownType", + }, + + "Error packet with invalid type": { + JSON: `{"type":"invalidType"}`, + + wantErrMsg: "invalid value for enum type", + }, + + "Error packet with invalid value type": { + JSON: `{"type":[]}`, + + wantErrMsg: "invalid value for enum type", + }, + + "Error hello packet with unexpected data": { + JSON: `{"type":"hello","request":{}}`, + + wantErrMsg: "field Request should not be defined", + }, + + "Error event packet with invalid data": { + JSON: `{"type":"event","fooEvent":null}`, + + wantErrMsg: `unknown field "fooEvent"`, + }, + + "Error event packet with missing type": { + JSON: `{"type":"event","event":{}}`, + wantErrMsg: "missing event type", + }, + + "Error event packet with unknown type": { + JSON: `{"type":"event","event":{"type":"someType"}`, + + wantErrMsg: "invalid value for enum type", + }, + + "Error event packet with invalid value type": { + JSON: `{"type":"event","event":{"brokerSelected":{},"type":{}}}`, + + wantErrMsg: "invalid value for enum type", + }, + + "Error event packet with missing data": { + JSON: `{"type":"event","event":{"type":"brokerSelected"}}`, + + wantErrMsg: "missing event data", + }, + + "Error event packet with unexpected data": { + JSON: `{"type":"event","event":{"type":"brokerSelected",` + + `"brokerSelected":{}},"request":{}}`, + + wantErrMsg: "field Request should not be defined", + }, + + "Error event ack packet with unexpected member": { + JSON: `{"type":"eventAck","event":{}}`, + + wantErrMsg: "field Event should not be defined", + }, + + "Error request packet with missing type": { + JSON: `{"type":"request","request":{"uiLayoutCapabilities":{}}}`, + + wantErrMsg: "missing request type", + }, + + "Error request packet with unknown type": { + JSON: `{"type":"request","request":{"type":true,"uiLayoutCapabilities":{}}}`, + + wantErrMsg: "invalid value for enum type", + }, + + "Error request packet with unknown value type": { + JSON: `{"type":"request","request":{"type":"someUnknownRequest",` + + `"uiLayoutCapabilities":{}}}`, + + wantErrMsg: "invalid value for enum type", + }, + + "Error request packet with unexpected data": { + JSON: `{"type":"request","request":{"type": "uiLayoutCapabilities",` + + `"uiLayoutCapabilities":{}}, "event":{}}`, + + wantErrMsg: "field Event should not be defined", + }, + + "Error response packet with missing data": { + JSON: `{"type":"response"}`, + + wantErrMsg: "missing response data", + }, + + "Error response packet with unexpected data": { + JSON: `{"type":"response","response":{"type":"changeStage","ack":{}}, "event":{}}`, + + wantErrMsg: "field Event should not be defined", + }, + + "Error poll packet with unexpected data": { + JSON: `{"type":"poll", "response": {}}`, + + wantErrMsg: "field Response should not be defined", + }, + + "Error pollResponse packet with missing event type": { + JSON: `{"type":"pollResponse","pollResponse":` + + `[{"type":"brokerSelected","brokerSelected":{"brokerId":"a broker"}},` + + `{"authModeSelected":{"authModeId":"auth mode"}}]}`, + + wantErrMsg: "poll response data member 1 invalid: missing event type", + }, + + "Error pollResponse packet with unsupported event type": { + JSON: `{"type":"pollResponse","pollResponse":` + + `[{"type":"brokerSelected","brokerSelected":{"brokerId":"a broker"}},` + + `{"type":"invalidEvent"}]}`, + + wantErrMsg: "invalid value for enum type", + }, + + "Error pollResponse packet with unexpected data": { + JSON: `{"type":"pollResponse","pollResponse":` + + `[{"type":"brokerSelected","brokerSelected":{"brokerId":"a broker"}},` + + `{"type":"authModeSelected","authModeSelected":{"authModeId":"auth mode"}}],` + + `"response":{}}`, + + wantErrMsg: "field Response should not be defined", + }, + } + + for name, tc := range tests { + tc := tc + t.Run(name, func(t *testing.T) { + t.Parallel() + gdmData, err := NewDataFromJSON([]byte(tc.JSON)) + if tc.wantErrMsg != "" { + require.ErrorContains(t, err, tc.wantErrMsg) + return + } + require.NoError(t, err) + + bytes, err := tc.wantData.JSON() + require.NoError(t, err) + require.Equal(t, tc.JSON, string(reformatJSON(t, bytes))) + + // Convert back the data to JSON and check it's still matching. + json, err := gdmData.JSON() + require.NoError(t, err) + require.Equal(t, tc.JSON, string(reformatJSON(t, json))) + }) + } +}