github.com/gravitational/teleport/api@v0.0.0-20240507183017-3110591cbafc/types/events/oneof.go (about)

     1  /*
     2  Copyright 2021 Gravitational, Inc.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package events
    18  
    19  import (
    20  	"context"
    21  	"encoding/json"
    22  	"log/slog"
    23  	"reflect"
    24  
    25  	"github.com/gravitational/trace"
    26  )
    27  
    28  // MustToOneOf converts audit event to OneOf
    29  // or panics, used in tests
    30  func MustToOneOf(in AuditEvent) *OneOf {
    31  	out, err := ToOneOf(in)
    32  	if err != nil {
    33  		panic(err)
    34  	}
    35  	return out
    36  }
    37  
    38  // ToOneOf converts audit event to union type of the events
    39  func ToOneOf(in AuditEvent) (*OneOf, error) {
    40  	out := OneOf{}
    41  
    42  	switch e := in.(type) {
    43  	case *UserLogin:
    44  		out.Event = &OneOf_UserLogin{
    45  			UserLogin: e,
    46  		}
    47  	case *UserCreate:
    48  		out.Event = &OneOf_UserCreate{
    49  			UserCreate: e,
    50  		}
    51  	case *UserUpdate:
    52  		out.Event = &OneOf_UserUpdate{
    53  			UserUpdate: e,
    54  		}
    55  	case *UserDelete:
    56  		out.Event = &OneOf_UserDelete{
    57  			UserDelete: e,
    58  		}
    59  	case *UserPasswordChange:
    60  		out.Event = &OneOf_UserPasswordChange{
    61  			UserPasswordChange: e,
    62  		}
    63  	case *SessionStart:
    64  		out.Event = &OneOf_SessionStart{
    65  			SessionStart: e,
    66  		}
    67  	case *SessionJoin:
    68  		out.Event = &OneOf_SessionJoin{
    69  			SessionJoin: e,
    70  		}
    71  	case *SessionPrint:
    72  		out.Event = &OneOf_SessionPrint{
    73  			SessionPrint: e,
    74  		}
    75  	case *SessionReject:
    76  		out.Event = &OneOf_SessionReject{
    77  			SessionReject: e,
    78  		}
    79  	case *Resize:
    80  		out.Event = &OneOf_Resize{
    81  			Resize: e,
    82  		}
    83  	case *SessionEnd:
    84  		out.Event = &OneOf_SessionEnd{
    85  			SessionEnd: e,
    86  		}
    87  	case *SessionCommand:
    88  		out.Event = &OneOf_SessionCommand{
    89  			SessionCommand: e,
    90  		}
    91  	case *SessionDisk:
    92  		out.Event = &OneOf_SessionDisk{
    93  			SessionDisk: e,
    94  		}
    95  	case *SessionNetwork:
    96  		out.Event = &OneOf_SessionNetwork{
    97  			SessionNetwork: e,
    98  		}
    99  	case *SessionData:
   100  		out.Event = &OneOf_SessionData{
   101  			SessionData: e,
   102  		}
   103  	case *SessionLeave:
   104  		out.Event = &OneOf_SessionLeave{
   105  			SessionLeave: e,
   106  		}
   107  	case *PortForward:
   108  		out.Event = &OneOf_PortForward{
   109  			PortForward: e,
   110  		}
   111  	case *X11Forward:
   112  		out.Event = &OneOf_X11Forward{
   113  			X11Forward: e,
   114  		}
   115  	case *Subsystem:
   116  		out.Event = &OneOf_Subsystem{
   117  			Subsystem: e,
   118  		}
   119  	case *SCP:
   120  		out.Event = &OneOf_SCP{
   121  			SCP: e,
   122  		}
   123  	case *Exec:
   124  		out.Event = &OneOf_Exec{
   125  			Exec: e,
   126  		}
   127  	case *ClientDisconnect:
   128  		out.Event = &OneOf_ClientDisconnect{
   129  			ClientDisconnect: e,
   130  		}
   131  	case *AuthAttempt:
   132  		out.Event = &OneOf_AuthAttempt{
   133  			AuthAttempt: e,
   134  		}
   135  	case *AccessRequestCreate:
   136  		out.Event = &OneOf_AccessRequestCreate{
   137  			AccessRequestCreate: e,
   138  		}
   139  	case *AccessRequestResourceSearch:
   140  		out.Event = &OneOf_AccessRequestResourceSearch{
   141  			AccessRequestResourceSearch: e,
   142  		}
   143  	case *RoleCreate:
   144  		out.Event = &OneOf_RoleCreate{
   145  			RoleCreate: e,
   146  		}
   147  	case *RoleUpdate:
   148  		out.Event = &OneOf_RoleUpdate{
   149  			RoleUpdate: e,
   150  		}
   151  	case *RoleDelete:
   152  		out.Event = &OneOf_RoleDelete{
   153  			RoleDelete: e,
   154  		}
   155  	case *UserTokenCreate:
   156  		out.Event = &OneOf_UserTokenCreate{
   157  			UserTokenCreate: e,
   158  		}
   159  	case *TrustedClusterCreate:
   160  		out.Event = &OneOf_TrustedClusterCreate{
   161  			TrustedClusterCreate: e,
   162  		}
   163  	case *TrustedClusterDelete:
   164  		out.Event = &OneOf_TrustedClusterDelete{
   165  			TrustedClusterDelete: e,
   166  		}
   167  	case *TrustedClusterTokenCreate:
   168  		out.Event = &OneOf_TrustedClusterTokenCreate{
   169  			TrustedClusterTokenCreate: e,
   170  		}
   171  	case *ProvisionTokenCreate:
   172  		out.Event = &OneOf_ProvisionTokenCreate{
   173  			ProvisionTokenCreate: e,
   174  		}
   175  	case *GithubConnectorCreate:
   176  		out.Event = &OneOf_GithubConnectorCreate{
   177  			GithubConnectorCreate: e,
   178  		}
   179  	case *GithubConnectorUpdate:
   180  		out.Event = &OneOf_GithubConnectorUpdate{
   181  			GithubConnectorUpdate: e,
   182  		}
   183  	case *GithubConnectorDelete:
   184  		out.Event = &OneOf_GithubConnectorDelete{
   185  			GithubConnectorDelete: e,
   186  		}
   187  	case *OIDCConnectorCreate:
   188  		out.Event = &OneOf_OIDCConnectorCreate{
   189  			OIDCConnectorCreate: e,
   190  		}
   191  	case *OIDCConnectorUpdate:
   192  		out.Event = &OneOf_OIDCConnectorUpdate{
   193  			OIDCConnectorUpdate: e,
   194  		}
   195  	case *OIDCConnectorDelete:
   196  		out.Event = &OneOf_OIDCConnectorDelete{
   197  			OIDCConnectorDelete: e,
   198  		}
   199  	case *SAMLConnectorCreate:
   200  		out.Event = &OneOf_SAMLConnectorCreate{
   201  			SAMLConnectorCreate: e,
   202  		}
   203  	case *SAMLConnectorUpdate:
   204  		out.Event = &OneOf_SAMLConnectorUpdate{
   205  			SAMLConnectorUpdate: e,
   206  		}
   207  	case *SAMLConnectorDelete:
   208  		out.Event = &OneOf_SAMLConnectorDelete{
   209  			SAMLConnectorDelete: e,
   210  		}
   211  	case *KubeRequest:
   212  		out.Event = &OneOf_KubeRequest{
   213  			KubeRequest: e,
   214  		}
   215  	case *AppSessionStart:
   216  		out.Event = &OneOf_AppSessionStart{
   217  			AppSessionStart: e,
   218  		}
   219  	case *AppSessionEnd:
   220  		out.Event = &OneOf_AppSessionEnd{
   221  			AppSessionEnd: e,
   222  		}
   223  	case *AppSessionChunk:
   224  		out.Event = &OneOf_AppSessionChunk{
   225  			AppSessionChunk: e,
   226  		}
   227  	case *AppSessionRequest:
   228  		out.Event = &OneOf_AppSessionRequest{
   229  			AppSessionRequest: e,
   230  		}
   231  	case *AppSessionDynamoDBRequest:
   232  		out.Event = &OneOf_AppSessionDynamoDBRequest{
   233  			AppSessionDynamoDBRequest: e,
   234  		}
   235  	case *AppCreate:
   236  		out.Event = &OneOf_AppCreate{
   237  			AppCreate: e,
   238  		}
   239  	case *AppUpdate:
   240  		out.Event = &OneOf_AppUpdate{
   241  			AppUpdate: e,
   242  		}
   243  	case *AppDelete:
   244  		out.Event = &OneOf_AppDelete{
   245  			AppDelete: e,
   246  		}
   247  	case *DatabaseCreate:
   248  		out.Event = &OneOf_DatabaseCreate{
   249  			DatabaseCreate: e,
   250  		}
   251  	case *DatabaseUpdate:
   252  		out.Event = &OneOf_DatabaseUpdate{
   253  			DatabaseUpdate: e,
   254  		}
   255  	case *DatabaseDelete:
   256  		out.Event = &OneOf_DatabaseDelete{
   257  			DatabaseDelete: e,
   258  		}
   259  	case *DatabaseSessionStart:
   260  		out.Event = &OneOf_DatabaseSessionStart{
   261  			DatabaseSessionStart: e,
   262  		}
   263  	case *DatabaseSessionEnd:
   264  		out.Event = &OneOf_DatabaseSessionEnd{
   265  			DatabaseSessionEnd: e,
   266  		}
   267  	case *DatabaseSessionQuery:
   268  		out.Event = &OneOf_DatabaseSessionQuery{
   269  			DatabaseSessionQuery: e,
   270  		}
   271  	case *DatabasePermissionUpdate:
   272  		out.Event = &OneOf_DatabasePermissionUpdate{
   273  			DatabasePermissionUpdate: e,
   274  		}
   275  	case *PostgresParse:
   276  		out.Event = &OneOf_PostgresParse{
   277  			PostgresParse: e,
   278  		}
   279  	case *PostgresBind:
   280  		out.Event = &OneOf_PostgresBind{
   281  			PostgresBind: e,
   282  		}
   283  	case *PostgresExecute:
   284  		out.Event = &OneOf_PostgresExecute{
   285  			PostgresExecute: e,
   286  		}
   287  	case *PostgresClose:
   288  		out.Event = &OneOf_PostgresClose{
   289  			PostgresClose: e,
   290  		}
   291  	case *PostgresFunctionCall:
   292  		out.Event = &OneOf_PostgresFunctionCall{
   293  			PostgresFunctionCall: e,
   294  		}
   295  	case *SessionUpload:
   296  		out.Event = &OneOf_SessionUpload{
   297  			SessionUpload: e,
   298  		}
   299  	case *MFADeviceAdd:
   300  		out.Event = &OneOf_MFADeviceAdd{
   301  			MFADeviceAdd: e,
   302  		}
   303  	case *MFADeviceDelete:
   304  		out.Event = &OneOf_MFADeviceDelete{
   305  			MFADeviceDelete: e,
   306  		}
   307  	case *DeviceEvent:
   308  		out.Event = &OneOf_DeviceEvent{
   309  			DeviceEvent: e,
   310  		}
   311  	case *DeviceEvent2:
   312  		out.Event = &OneOf_DeviceEvent2{
   313  			DeviceEvent2: e,
   314  		}
   315  	case *BillingCardCreate:
   316  		out.Event = &OneOf_BillingCardCreate{
   317  			BillingCardCreate: e,
   318  		}
   319  	case *BillingCardDelete:
   320  		out.Event = &OneOf_BillingCardDelete{
   321  			BillingCardDelete: e,
   322  		}
   323  	case *LockCreate:
   324  		out.Event = &OneOf_LockCreate{
   325  			LockCreate: e,
   326  		}
   327  	case *LockDelete:
   328  		out.Event = &OneOf_LockDelete{
   329  			LockDelete: e,
   330  		}
   331  	case *BillingInformationUpdate:
   332  		out.Event = &OneOf_BillingInformationUpdate{
   333  			BillingInformationUpdate: e,
   334  		}
   335  	case *RecoveryCodeGenerate:
   336  		out.Event = &OneOf_RecoveryCodeGenerate{
   337  			RecoveryCodeGenerate: e,
   338  		}
   339  	case *RecoveryCodeUsed:
   340  		out.Event = &OneOf_RecoveryCodeUsed{
   341  			RecoveryCodeUsed: e,
   342  		}
   343  	case *WindowsDesktopSessionStart:
   344  		out.Event = &OneOf_WindowsDesktopSessionStart{
   345  			WindowsDesktopSessionStart: e,
   346  		}
   347  	case *WindowsDesktopSessionEnd:
   348  		out.Event = &OneOf_WindowsDesktopSessionEnd{
   349  			WindowsDesktopSessionEnd: e,
   350  		}
   351  	case *SessionConnect:
   352  		out.Event = &OneOf_SessionConnect{
   353  			SessionConnect: e,
   354  		}
   355  	case *AccessRequestDelete:
   356  		out.Event = &OneOf_AccessRequestDelete{
   357  			AccessRequestDelete: e,
   358  		}
   359  	case *CertificateCreate:
   360  		out.Event = &OneOf_CertificateCreate{
   361  			CertificateCreate: e,
   362  		}
   363  	case *DesktopRecording:
   364  		out.Event = &OneOf_DesktopRecording{
   365  			DesktopRecording: e,
   366  		}
   367  	case *DesktopClipboardReceive:
   368  		out.Event = &OneOf_DesktopClipboardReceive{
   369  			DesktopClipboardReceive: e,
   370  		}
   371  	case *DesktopClipboardSend:
   372  		out.Event = &OneOf_DesktopClipboardSend{
   373  			DesktopClipboardSend: e,
   374  		}
   375  	case *MySQLStatementPrepare:
   376  		out.Event = &OneOf_MySQLStatementPrepare{
   377  			MySQLStatementPrepare: e,
   378  		}
   379  	case *MySQLStatementExecute:
   380  		out.Event = &OneOf_MySQLStatementExecute{
   381  			MySQLStatementExecute: e,
   382  		}
   383  	case *MySQLStatementSendLongData:
   384  		out.Event = &OneOf_MySQLStatementSendLongData{
   385  			MySQLStatementSendLongData: e,
   386  		}
   387  	case *MySQLStatementClose:
   388  		out.Event = &OneOf_MySQLStatementClose{
   389  			MySQLStatementClose: e,
   390  		}
   391  	case *MySQLStatementReset:
   392  		out.Event = &OneOf_MySQLStatementReset{
   393  			MySQLStatementReset: e,
   394  		}
   395  	case *MySQLStatementFetch:
   396  		out.Event = &OneOf_MySQLStatementFetch{
   397  			MySQLStatementFetch: e,
   398  		}
   399  	case *MySQLStatementBulkExecute:
   400  		out.Event = &OneOf_MySQLStatementBulkExecute{
   401  			MySQLStatementBulkExecute: e,
   402  		}
   403  	case *MySQLInitDB:
   404  		out.Event = &OneOf_MySQLInitDB{
   405  			MySQLInitDB: e,
   406  		}
   407  	case *MySQLCreateDB:
   408  		out.Event = &OneOf_MySQLCreateDB{
   409  			MySQLCreateDB: e,
   410  		}
   411  	case *MySQLDropDB:
   412  		out.Event = &OneOf_MySQLDropDB{
   413  			MySQLDropDB: e,
   414  		}
   415  	case *MySQLShutDown:
   416  		out.Event = &OneOf_MySQLShutDown{
   417  			MySQLShutDown: e,
   418  		}
   419  	case *MySQLProcessKill:
   420  		out.Event = &OneOf_MySQLProcessKill{
   421  			MySQLProcessKill: e,
   422  		}
   423  	case *MySQLDebug:
   424  		out.Event = &OneOf_MySQLDebug{
   425  			MySQLDebug: e,
   426  		}
   427  	case *MySQLRefresh:
   428  		out.Event = &OneOf_MySQLRefresh{
   429  			MySQLRefresh: e,
   430  		}
   431  	case *SQLServerRPCRequest:
   432  		out.Event = &OneOf_SQLServerRPCRequest{
   433  			SQLServerRPCRequest: e,
   434  		}
   435  	case *ElasticsearchRequest:
   436  		out.Event = &OneOf_ElasticsearchRequest{
   437  			ElasticsearchRequest: e,
   438  		}
   439  	case *OpenSearchRequest:
   440  		out.Event = &OneOf_OpenSearchRequest{
   441  			OpenSearchRequest: e,
   442  		}
   443  	case *DynamoDBRequest:
   444  		out.Event = &OneOf_DynamoDBRequest{
   445  			DynamoDBRequest: e,
   446  		}
   447  	case *DatabaseSessionMalformedPacket:
   448  		out.Event = &OneOf_DatabaseSessionMalformedPacket{
   449  			DatabaseSessionMalformedPacket: e,
   450  		}
   451  	case *RenewableCertificateGenerationMismatch:
   452  		out.Event = &OneOf_RenewableCertificateGenerationMismatch{
   453  			RenewableCertificateGenerationMismatch: e,
   454  		}
   455  	case *SFTP:
   456  		out.Event = &OneOf_SFTP{
   457  			SFTP: e,
   458  		}
   459  	case *UpgradeWindowStartUpdate:
   460  		out.Event = &OneOf_UpgradeWindowStartUpdate{
   461  			UpgradeWindowStartUpdate: e,
   462  		}
   463  	case *SessionRecordingAccess:
   464  		out.Event = &OneOf_SessionRecordingAccess{
   465  			SessionRecordingAccess: e,
   466  		}
   467  	case *SSMRun:
   468  		out.Event = &OneOf_SSMRun{
   469  			SSMRun: e,
   470  		}
   471  	case *Unknown:
   472  		out.Event = &OneOf_Unknown{
   473  			Unknown: e,
   474  		}
   475  	case *CassandraBatch:
   476  		out.Event = &OneOf_CassandraBatch{
   477  			CassandraBatch: e,
   478  		}
   479  	case *CassandraPrepare:
   480  		out.Event = &OneOf_CassandraPrepare{
   481  			CassandraPrepare: e,
   482  		}
   483  	case *CassandraRegister:
   484  		out.Event = &OneOf_CassandraRegister{
   485  			CassandraRegister: e,
   486  		}
   487  	case *CassandraExecute:
   488  		out.Event = &OneOf_CassandraExecute{
   489  			CassandraExecute: e,
   490  		}
   491  	case *KubernetesClusterCreate:
   492  		out.Event = &OneOf_KubernetesClusterCreate{
   493  			KubernetesClusterCreate: e,
   494  		}
   495  	case *KubernetesClusterUpdate:
   496  		out.Event = &OneOf_KubernetesClusterUpdate{
   497  			KubernetesClusterUpdate: e,
   498  		}
   499  	case *KubernetesClusterDelete:
   500  		out.Event = &OneOf_KubernetesClusterDelete{
   501  			KubernetesClusterDelete: e,
   502  		}
   503  	case *DesktopSharedDirectoryStart:
   504  		out.Event = &OneOf_DesktopSharedDirectoryStart{
   505  			DesktopSharedDirectoryStart: e,
   506  		}
   507  	case *DesktopSharedDirectoryRead:
   508  		out.Event = &OneOf_DesktopSharedDirectoryRead{
   509  			DesktopSharedDirectoryRead: e,
   510  		}
   511  	case *DesktopSharedDirectoryWrite:
   512  		out.Event = &OneOf_DesktopSharedDirectoryWrite{
   513  			DesktopSharedDirectoryWrite: e,
   514  		}
   515  	case *BotJoin:
   516  		out.Event = &OneOf_BotJoin{
   517  			BotJoin: e,
   518  		}
   519  	case *InstanceJoin:
   520  		out.Event = &OneOf_InstanceJoin{
   521  			InstanceJoin: e,
   522  		}
   523  	case *BotCreate:
   524  		out.Event = &OneOf_BotCreate{
   525  			BotCreate: e,
   526  		}
   527  	case *BotUpdate:
   528  		out.Event = &OneOf_BotUpdate{
   529  			BotUpdate: e,
   530  		}
   531  	case *BotDelete:
   532  		out.Event = &OneOf_BotDelete{
   533  			BotDelete: e,
   534  		}
   535  	case *LoginRuleCreate:
   536  		out.Event = &OneOf_LoginRuleCreate{
   537  			LoginRuleCreate: e,
   538  		}
   539  	case *LoginRuleDelete:
   540  		out.Event = &OneOf_LoginRuleDelete{
   541  			LoginRuleDelete: e,
   542  		}
   543  	case *SAMLIdPAuthAttempt:
   544  		out.Event = &OneOf_SAMLIdPAuthAttempt{
   545  			SAMLIdPAuthAttempt: e,
   546  		}
   547  	case *SAMLIdPServiceProviderCreate:
   548  		out.Event = &OneOf_SAMLIdPServiceProviderCreate{
   549  			SAMLIdPServiceProviderCreate: e,
   550  		}
   551  	case *SAMLIdPServiceProviderUpdate:
   552  		out.Event = &OneOf_SAMLIdPServiceProviderUpdate{
   553  			SAMLIdPServiceProviderUpdate: e,
   554  		}
   555  	case *SAMLIdPServiceProviderDelete:
   556  		out.Event = &OneOf_SAMLIdPServiceProviderDelete{
   557  			SAMLIdPServiceProviderDelete: e,
   558  		}
   559  	case *SAMLIdPServiceProviderDeleteAll:
   560  		out.Event = &OneOf_SAMLIdPServiceProviderDeleteAll{
   561  			SAMLIdPServiceProviderDeleteAll: e,
   562  		}
   563  	case *OktaResourcesUpdate:
   564  		out.Event = &OneOf_OktaResourcesUpdate{
   565  			OktaResourcesUpdate: e,
   566  		}
   567  	case *OktaSyncFailure:
   568  		out.Event = &OneOf_OktaSyncFailure{
   569  			OktaSyncFailure: e,
   570  		}
   571  	case *OktaAssignmentResult:
   572  		out.Event = &OneOf_OktaAssignmentResult{
   573  			OktaAssignmentResult: e,
   574  		}
   575  	case *AccessListCreate:
   576  		out.Event = &OneOf_AccessListCreate{
   577  			AccessListCreate: e,
   578  		}
   579  	case *AccessListUpdate:
   580  		out.Event = &OneOf_AccessListUpdate{
   581  			AccessListUpdate: e,
   582  		}
   583  	case *AccessListDelete:
   584  		out.Event = &OneOf_AccessListDelete{
   585  			AccessListDelete: e,
   586  		}
   587  	case *AccessListReview:
   588  		out.Event = &OneOf_AccessListReview{
   589  			AccessListReview: e,
   590  		}
   591  	case *AccessListMemberCreate:
   592  		out.Event = &OneOf_AccessListMemberCreate{
   593  			AccessListMemberCreate: e,
   594  		}
   595  	case *AccessListMemberUpdate:
   596  		out.Event = &OneOf_AccessListMemberUpdate{
   597  			AccessListMemberUpdate: e,
   598  		}
   599  	case *AccessListMemberDelete:
   600  		out.Event = &OneOf_AccessListMemberDelete{
   601  			AccessListMemberDelete: e,
   602  		}
   603  	case *AccessListMemberDeleteAllForAccessList:
   604  		out.Event = &OneOf_AccessListMemberDeleteAllForAccessList{
   605  			AccessListMemberDeleteAllForAccessList: e,
   606  		}
   607  	case *AuditQueryRun:
   608  		out.Event = &OneOf_AuditQueryRun{
   609  			AuditQueryRun: e,
   610  		}
   611  	case *SecurityReportRun:
   612  		out.Event = &OneOf_SecurityReportRun{
   613  			SecurityReportRun: e,
   614  		}
   615  	case *ExternalAuditStorageEnable:
   616  		out.Event = &OneOf_ExternalAuditStorageEnable{
   617  			ExternalAuditStorageEnable: e,
   618  		}
   619  	case *ExternalAuditStorageDisable:
   620  		out.Event = &OneOf_ExternalAuditStorageDisable{
   621  			ExternalAuditStorageDisable: e,
   622  		}
   623  	case *CreateMFAAuthChallenge:
   624  		out.Event = &OneOf_CreateMFAAuthChallenge{
   625  			CreateMFAAuthChallenge: e,
   626  		}
   627  	case *ValidateMFAAuthResponse:
   628  		out.Event = &OneOf_ValidateMFAAuthResponse{
   629  			ValidateMFAAuthResponse: e,
   630  		}
   631  	case *OktaAccessListSync:
   632  		out.Event = &OneOf_OktaAccessListSync{
   633  			OktaAccessListSync: e,
   634  		}
   635  	case *OktaUserSync:
   636  		out.Event = &OneOf_OktaUserSync{
   637  			OktaUserSync: e,
   638  		}
   639  	case *SPIFFESVIDIssued:
   640  		out.Event = &OneOf_SPIFFESVIDIssued{
   641  			SPIFFESVIDIssued: e,
   642  		}
   643  	case *AuthPreferenceUpdate:
   644  		out.Event = &OneOf_AuthPreferenceUpdate{
   645  			AuthPreferenceUpdate: e,
   646  		}
   647  	case *ClusterNetworkingConfigUpdate:
   648  		out.Event = &OneOf_ClusterNetworkingConfigUpdate{
   649  			ClusterNetworkingConfigUpdate: e,
   650  		}
   651  	case *SessionRecordingConfigUpdate:
   652  		out.Event = &OneOf_SessionRecordingConfigUpdate{
   653  			SessionRecordingConfigUpdate: e,
   654  		}
   655  	case *DatabaseUserCreate:
   656  		out.Event = &OneOf_DatabaseUserCreate{
   657  			DatabaseUserCreate: e,
   658  		}
   659  	case *DatabaseUserDeactivate:
   660  		out.Event = &OneOf_DatabaseUserDeactivate{
   661  			DatabaseUserDeactivate: e,
   662  		}
   663  
   664  	default:
   665  		slog.ErrorContext(context.Background(), "Attempted to convert dynamic event of unknown type into protobuf event.", "event_type", in.GetType())
   666  		unknown := &Unknown{}
   667  		unknown.Type = UnknownEvent
   668  		unknown.Code = UnknownCode
   669  		unknown.Time = in.GetTime()
   670  		unknown.ClusterName = in.GetClusterName()
   671  		unknown.UnknownType = in.GetType()
   672  		unknown.UnknownCode = in.GetCode()
   673  		data, err := json.Marshal(in)
   674  		if err != nil {
   675  			return nil, trace.Wrap(err)
   676  		}
   677  
   678  		unknown.Data = string(data)
   679  		out.Event = &OneOf_Unknown{
   680  			Unknown: unknown,
   681  		}
   682  	}
   683  	return &out, nil
   684  }
   685  
   686  // FromOneOf converts audit event from one of wrapper to interface
   687  func FromOneOf(in OneOf) (AuditEvent, error) {
   688  	e := in.GetEvent()
   689  	if e == nil {
   690  		return nil, trace.BadParameter("failed to parse event, session record is corrupted")
   691  	}
   692  
   693  	// We go from e (isOneOf_Event) -> reflect.Value (*OneOf_SomeStruct) -> reflect.Value(OneOf_SomeStruct).
   694  	elem := reflect.ValueOf(in.GetEvent()).Elem()
   695  
   696  	// OneOfs only have one inner field, verify and then read it.
   697  	if elem.NumField() != 1 {
   698  		// This should never happen for proto one-ofs.
   699  		return nil, trace.BadParameter("unexpected number in value %v: %v != 1", elem.Kind(), elem.NumField())
   700  	}
   701  
   702  	auditEvent, ok := elem.Field(0).Interface().(AuditEvent)
   703  	if !ok || reflect.ValueOf(auditEvent).IsNil() {
   704  		return nil, trace.BadParameter("received unsupported event %T", in.Event)
   705  	}
   706  	return auditEvent, nil
   707  }