55
66import io .grpc .Status ;
77import org .hypertrace .core .grpcutils .context .RequestContext ;
8+ import org .hypertrace .notification .config .service .v1 .AwsS3BucketChannelConfig ;
9+ import org .hypertrace .notification .config .service .v1 .AwsS3BucketChannelConfig .WebIdentityAuthenticationCredential ;
810import org .hypertrace .notification .config .service .v1 .CreateNotificationChannelRequest ;
911import org .hypertrace .notification .config .service .v1 .DeleteNotificationChannelRequest ;
12+ import org .hypertrace .notification .config .service .v1 .EmailChannelConfig ;
1013import org .hypertrace .notification .config .service .v1 .GetAllNotificationChannelsRequest ;
1114import org .hypertrace .notification .config .service .v1 .GetNotificationChannelRequest ;
1215import org .hypertrace .notification .config .service .v1 .NotificationChannelMutableData ;
1316import org .hypertrace .notification .config .service .v1 .UpdateNotificationChannelRequest ;
17+ import org .hypertrace .notification .config .service .v1 .WebhookChannelConfig ;
18+ import org .hypertrace .notification .config .service .v1 .WebhookHeader ;
1419
1520public class NotificationChannelConfigServiceRequestValidator {
1621
@@ -30,11 +35,14 @@ public void validateUpdateNotificationChannelRequest(
3035 private void validateNotificationChannelMutableData (NotificationChannelMutableData data ) {
3136 validateNonDefaultPresenceOrThrow (
3237 data , NotificationChannelMutableData .CHANNEL_NAME_FIELD_NUMBER );
33- if (data .getEmailChannelConfigCount () == 0 && data . getWebhookChannelConfigCount () == 0 ) {
34- throw Status . INVALID_ARGUMENT
35- . withDescription ( "Either email or webhook config should be present" )
36- .asRuntimeException ();
38+ if (data .getEmailChannelConfigCount () == 0
39+ && data . getWebhookChannelConfigCount () == 0
40+ && data . getS3BucketChannelConfigCount () == 0 ) {
41+ throw Status . INVALID_ARGUMENT . withDescription ( "No config present" ) .asRuntimeException ();
3742 }
43+ data .getEmailChannelConfigList ().forEach (this ::validateEmailChannelConfig );
44+ data .getWebhookChannelConfigList ().forEach (this ::validateWebhookChannelConfig );
45+ data .getS3BucketChannelConfigList ().forEach (this ::validateS3BucketConfig );
3846 }
3947
4048 public void validateGetAllNotificationChannelsRequest (
@@ -55,4 +63,37 @@ public void validateGetNotificationChannelRequest(
5563 validateNonDefaultPresenceOrThrow (
5664 request , GetNotificationChannelRequest .NOTIFICATION_CHANNEL_ID_FIELD_NUMBER );
5765 }
66+
67+ private void validateEmailChannelConfig (EmailChannelConfig emailChannelConfig ) {
68+ validateNonDefaultPresenceOrThrow (emailChannelConfig , EmailChannelConfig .ADDRESS_FIELD_NUMBER );
69+ }
70+
71+ private void validateWebhookChannelConfig (WebhookChannelConfig webhookChannelConfig ) {
72+ validateNonDefaultPresenceOrThrow (webhookChannelConfig , WebhookChannelConfig .URL_FIELD_NUMBER );
73+ validateNonDefaultPresenceOrThrow (
74+ webhookChannelConfig , WebhookChannelConfig .FORMAT_FIELD_NUMBER );
75+ webhookChannelConfig .getHeadersList ().forEach (this ::validateWebhookHeader );
76+ }
77+
78+ private void validateS3BucketConfig (AwsS3BucketChannelConfig awsS3BucketChannelConfig ) {
79+ validateNonDefaultPresenceOrThrow (
80+ awsS3BucketChannelConfig , AwsS3BucketChannelConfig .BUCKET_NAME_FIELD_NUMBER );
81+ validateNonDefaultPresenceOrThrow (
82+ awsS3BucketChannelConfig , AwsS3BucketChannelConfig .REGION_FIELD_NUMBER );
83+ switch (awsS3BucketChannelConfig .getAuthenticationCredentialCase ()) {
84+ case WEB_IDENTITY_AUTH_CREDENTIAL :
85+ validateNonDefaultPresenceOrThrow (
86+ awsS3BucketChannelConfig .getWebIdentityAuthCredential (),
87+ WebIdentityAuthenticationCredential .ROLE_ARN_FIELD_NUMBER );
88+ break ;
89+ default :
90+ throw Status .INVALID_ARGUMENT
91+ .withDescription ("No credentials present in AWS S3 bucket config" )
92+ .asRuntimeException ();
93+ }
94+ }
95+
96+ private void validateWebhookHeader (WebhookHeader webhookHeader ) {
97+ validateNonDefaultPresenceOrThrow (webhookHeader , WebhookHeader .NAME_FIELD_NUMBER );
98+ }
5899}
0 commit comments