diff --git a/pkg/analyzer/analyzers/sendgrid/permissions.go b/pkg/analyzer/analyzers/sendgrid/permissions.go new file mode 100644 index 000000000..996c0b0ed --- /dev/null +++ b/pkg/analyzer/analyzers/sendgrid/permissions.go @@ -0,0 +1,991 @@ +// Code generated by go generate; DO NOT EDIT. +package sendgrid + +import "errors" + +type Permission int + +const ( + Invalid Permission = iota + AccessSettingsActivityRead Permission = iota + AccessSettingsWhitelistCreate Permission = iota + AccessSettingsWhitelistDelete Permission = iota + AccessSettingsWhitelistRead Permission = iota + AccessSettingsWhitelistUpdate Permission = iota + AlertsCreate Permission = iota + AlertsDelete Permission = iota + AlertsRead Permission = iota + AlertsUpdate Permission = iota + ApiKeysCreate Permission = iota + ApiKeysDelete Permission = iota + ApiKeysRead Permission = iota + ApiKeysUpdate Permission = iota + AsmGroupsCreate Permission = iota + AsmGroupsDelete Permission = iota + AsmGroupsRead Permission = iota + AsmGroupsUpdate Permission = iota + BillingCreate Permission = iota + BillingDelete Permission = iota + BillingRead Permission = iota + BillingUpdate Permission = iota + BrowsersStatsRead Permission = iota + CategoriesCreate Permission = iota + CategoriesDelete Permission = iota + CategoriesRead Permission = iota + CategoriesStatsRead Permission = iota + CategoriesStatsSumsRead Permission = iota + CategoriesUpdate Permission = iota + ClientsDesktopStatsRead Permission = iota + ClientsPhoneStatsRead Permission = iota + ClientsStatsRead Permission = iota + ClientsTabletStatsRead Permission = iota + ClientsWebmailStatsRead Permission = iota + DevicesStatsRead Permission = iota + EmailActivityRead Permission = iota + GeoStatsRead Permission = iota + IpsAssignedRead Permission = iota + IpsPoolsCreate Permission = iota + IpsPoolsDelete Permission = iota + IpsPoolsIpsCreate Permission = iota + IpsPoolsIpsDelete Permission = iota + IpsPoolsIpsRead Permission = iota + IpsPoolsIpsUpdate Permission = iota + IpsPoolsRead Permission = iota + IpsPoolsUpdate Permission = iota + IpsRead Permission = iota + IpsWarmupCreate Permission = iota + IpsWarmupDelete Permission = iota + IpsWarmupRead Permission = iota + IpsWarmupUpdate Permission = iota + MailSettingsAddressWhitelistRead Permission = iota + MailSettingsAddressWhitelistUpdate Permission = iota + MailSettingsBouncePurgeRead Permission = iota + MailSettingsBouncePurgeUpdate Permission = iota + MailSettingsFooterRead Permission = iota + MailSettingsFooterUpdate Permission = iota + MailSettingsForwardBounceRead Permission = iota + MailSettingsForwardBounceUpdate Permission = iota + MailSettingsForwardSpamRead Permission = iota + MailSettingsForwardSpamUpdate Permission = iota + MailSettingsPlainContentRead Permission = iota + MailSettingsPlainContentUpdate Permission = iota + MailSettingsRead Permission = iota + MailSettingsTemplateRead Permission = iota + MailSettingsTemplateUpdate Permission = iota + MailBatchCreate Permission = iota + MailBatchDelete Permission = iota + MailBatchRead Permission = iota + MailBatchUpdate Permission = iota + MailSend Permission = iota + MailboxProvidersStatsRead Permission = iota + MarketingCampaignsCreate Permission = iota + MarketingCampaignsDelete Permission = iota + MarketingCampaignsRead Permission = iota + MarketingCampaignsUpdate Permission = iota + PartnerSettingsNewRelicRead Permission = iota + PartnerSettingsNewRelicUpdate Permission = iota + PartnerSettingsRead Permission = iota + StatsGlobalRead Permission = iota + StatsRead Permission = iota + SubusersCreate Permission = iota + SubusersCreditsCreate Permission = iota + SubusersCreditsDelete Permission = iota + SubusersCreditsRead Permission = iota + SubusersCreditsRemainingCreate Permission = iota + SubusersCreditsRemainingDelete Permission = iota + SubusersCreditsRemainingRead Permission = iota + SubusersCreditsRemainingUpdate Permission = iota + SubusersCreditsUpdate Permission = iota + SubusersDelete Permission = iota + SubusersMonitorCreate Permission = iota + SubusersMonitorDelete Permission = iota + SubusersMonitorRead Permission = iota + SubusersMonitorUpdate Permission = iota + SubusersRead Permission = iota + SubusersReputationsRead Permission = iota + SubusersStatsMonthlyRead Permission = iota + SubusersStatsRead Permission = iota + SubusersStatsSumsRead Permission = iota + SubusersSummaryRead Permission = iota + SubusersUpdate Permission = iota + SuppressionBlocksCreate Permission = iota + SuppressionBlocksDelete Permission = iota + SuppressionBlocksRead Permission = iota + SuppressionBlocksUpdate Permission = iota + SuppressionBouncesCreate Permission = iota + SuppressionBouncesDelete Permission = iota + SuppressionBouncesRead Permission = iota + SuppressionBouncesUpdate Permission = iota + SuppressionCreate Permission = iota + SuppressionDelete Permission = iota + SuppressionInvalidEmailsCreate Permission = iota + SuppressionInvalidEmailsDelete Permission = iota + SuppressionInvalidEmailsRead Permission = iota + SuppressionInvalidEmailsUpdate Permission = iota + SuppressionRead Permission = iota + SuppressionSpamReportsCreate Permission = iota + SuppressionSpamReportsDelete Permission = iota + SuppressionSpamReportsRead Permission = iota + SuppressionSpamReportsUpdate Permission = iota + SuppressionUnsubscribesCreate Permission = iota + SuppressionUnsubscribesDelete Permission = iota + SuppressionUnsubscribesRead Permission = iota + SuppressionUnsubscribesUpdate Permission = iota + SuppressionUpdate Permission = iota + TeammatesCreate Permission = iota + TeammatesRead Permission = iota + TeammatesUpdate Permission = iota + TeammatesDelete Permission = iota + TemplatesCreate Permission = iota + TemplatesDelete Permission = iota + TemplatesRead Permission = iota + TemplatesUpdate Permission = iota + TemplatesVersionsActivateCreate Permission = iota + TemplatesVersionsActivateDelete Permission = iota + TemplatesVersionsActivateRead Permission = iota + TemplatesVersionsActivateUpdate Permission = iota + TemplatesVersionsCreate Permission = iota + TemplatesVersionsDelete Permission = iota + TemplatesVersionsRead Permission = iota + TemplatesVersionsUpdate Permission = iota + TrackingSettingsClickRead Permission = iota + TrackingSettingsClickUpdate Permission = iota + TrackingSettingsGoogleAnalyticsRead Permission = iota + TrackingSettingsGoogleAnalyticsUpdate Permission = iota + TrackingSettingsOpenRead Permission = iota + TrackingSettingsOpenUpdate Permission = iota + TrackingSettingsRead Permission = iota + TrackingSettingsSubscriptionRead Permission = iota + TrackingSettingsSubscriptionUpdate Permission = iota + UserAccountRead Permission = iota + UserCreditsRead Permission = iota + UserEmailCreate Permission = iota + UserEmailDelete Permission = iota + UserEmailRead Permission = iota + UserEmailUpdate Permission = iota + UserMultifactorAuthenticationCreate Permission = iota + UserMultifactorAuthenticationDelete Permission = iota + UserMultifactorAuthenticationRead Permission = iota + UserMultifactorAuthenticationUpdate Permission = iota + UserPasswordRead Permission = iota + UserPasswordUpdate Permission = iota + UserProfileRead Permission = iota + UserProfileUpdate Permission = iota + UserScheduledSendsCreate Permission = iota + UserScheduledSendsDelete Permission = iota + UserScheduledSendsRead Permission = iota + UserScheduledSendsUpdate Permission = iota + UserSettingsEnforcedTlsRead Permission = iota + UserSettingsEnforcedTlsUpdate Permission = iota + UserTimezoneRead Permission = iota + UserUsernameRead Permission = iota + UserUsernameUpdate Permission = iota + UserWebhooksEventSettingsRead Permission = iota + UserWebhooksEventSettingsUpdate Permission = iota + UserWebhooksEventTestCreate Permission = iota + UserWebhooksEventTestRead Permission = iota + UserWebhooksEventTestUpdate Permission = iota + UserWebhooksParseSettingsCreate Permission = iota + UserWebhooksParseSettingsDelete Permission = iota + UserWebhooksParseSettingsRead Permission = iota + UserWebhooksParseSettingsUpdate Permission = iota + UserWebhooksParseStatsRead Permission = iota + WhitelabelCreate Permission = iota + WhitelabelDelete Permission = iota + WhitelabelRead Permission = iota + WhitelabelUpdate Permission = iota +) + +var ( + PermissionStrings = map[Permission]string{ + AccessSettingsActivityRead: "access_settings.activity.read", + AccessSettingsWhitelistCreate: "access_settings.whitelist.create", + AccessSettingsWhitelistDelete: "access_settings.whitelist.delete", + AccessSettingsWhitelistRead: "access_settings.whitelist.read", + AccessSettingsWhitelistUpdate: "access_settings.whitelist.update", + AlertsCreate: "alerts.create", + AlertsDelete: "alerts.delete", + AlertsRead: "alerts.read", + AlertsUpdate: "alerts.update", + ApiKeysCreate: "api_keys.create", + ApiKeysDelete: "api_keys.delete", + ApiKeysRead: "api_keys.read", + ApiKeysUpdate: "api_keys.update", + AsmGroupsCreate: "asm.groups.create", + AsmGroupsDelete: "asm.groups.delete", + AsmGroupsRead: "asm.groups.read", + AsmGroupsUpdate: "asm.groups.update", + BillingCreate: "billing.create", + BillingDelete: "billing.delete", + BillingRead: "billing.read", + BillingUpdate: "billing.update", + BrowsersStatsRead: "browsers.stats.read", + CategoriesCreate: "categories.create", + CategoriesDelete: "categories.delete", + CategoriesRead: "categories.read", + CategoriesStatsRead: "categories.stats.read", + CategoriesStatsSumsRead: "categories.stats.sums.read", + CategoriesUpdate: "categories.update", + ClientsDesktopStatsRead: "clients.desktop.stats.read", + ClientsPhoneStatsRead: "clients.phone.stats.read", + ClientsStatsRead: "clients.stats.read", + ClientsTabletStatsRead: "clients.tablet.stats.read", + ClientsWebmailStatsRead: "clients.webmail.stats.read", + DevicesStatsRead: "devices.stats.read", + EmailActivityRead: "email_activity.read", + GeoStatsRead: "geo.stats.read", + IpsAssignedRead: "ips.assigned.read", + IpsPoolsCreate: "ips.pools.create", + IpsPoolsDelete: "ips.pools.delete", + IpsPoolsIpsCreate: "ips.pools.ips.create", + IpsPoolsIpsDelete: "ips.pools.ips.delete", + IpsPoolsIpsRead: "ips.pools.ips.read", + IpsPoolsIpsUpdate: "ips.pools.ips.update", + IpsPoolsRead: "ips.pools.read", + IpsPoolsUpdate: "ips.pools.update", + IpsRead: "ips.read", + IpsWarmupCreate: "ips.warmup.create", + IpsWarmupDelete: "ips.warmup.delete", + IpsWarmupRead: "ips.warmup.read", + IpsWarmupUpdate: "ips.warmup.update", + MailSettingsAddressWhitelistRead: "mail_settings.address_whitelist.read", + MailSettingsAddressWhitelistUpdate: "mail_settings.address_whitelist.update", + MailSettingsBouncePurgeRead: "mail_settings.bounce_purge.read", + MailSettingsBouncePurgeUpdate: "mail_settings.bounce_purge.update", + MailSettingsFooterRead: "mail_settings.footer.read", + MailSettingsFooterUpdate: "mail_settings.footer.update", + MailSettingsForwardBounceRead: "mail_settings.forward_bounce.read", + MailSettingsForwardBounceUpdate: "mail_settings.forward_bounce.update", + MailSettingsForwardSpamRead: "mail_settings.forward_spam.read", + MailSettingsForwardSpamUpdate: "mail_settings.forward_spam.update", + MailSettingsPlainContentRead: "mail_settings.plain_content.read", + MailSettingsPlainContentUpdate: "mail_settings.plain_content.update", + MailSettingsRead: "mail_settings.read", + MailSettingsTemplateRead: "mail_settings.template.read", + MailSettingsTemplateUpdate: "mail_settings.template.update", + MailBatchCreate: "mail.batch.create", + MailBatchDelete: "mail.batch.delete", + MailBatchRead: "mail.batch.read", + MailBatchUpdate: "mail.batch.update", + MailSend: "mail.send", + MailboxProvidersStatsRead: "mailbox_providers.stats.read", + MarketingCampaignsCreate: "marketing_campaigns.create", + MarketingCampaignsDelete: "marketing_campaigns.delete", + MarketingCampaignsRead: "marketing_campaigns.read", + MarketingCampaignsUpdate: "marketing_campaigns.update", + PartnerSettingsNewRelicRead: "partner_settings.new_relic.read", + PartnerSettingsNewRelicUpdate: "partner_settings.new_relic.update", + PartnerSettingsRead: "partner_settings.read", + StatsGlobalRead: "stats.global.read", + StatsRead: "stats.read", + SubusersCreate: "subusers.create", + SubusersCreditsCreate: "subusers.credits.create", + SubusersCreditsDelete: "subusers.credits.delete", + SubusersCreditsRead: "subusers.credits.read", + SubusersCreditsRemainingCreate: "subusers.credits.remaining.create", + SubusersCreditsRemainingDelete: "subusers.credits.remaining.delete", + SubusersCreditsRemainingRead: "subusers.credits.remaining.read", + SubusersCreditsRemainingUpdate: "subusers.credits.remaining.update", + SubusersCreditsUpdate: "subusers.credits.update", + SubusersDelete: "subusers.delete", + SubusersMonitorCreate: "subusers.monitor.create", + SubusersMonitorDelete: "subusers.monitor.delete", + SubusersMonitorRead: "subusers.monitor.read", + SubusersMonitorUpdate: "subusers.monitor.update", + SubusersRead: "subusers.read", + SubusersReputationsRead: "subusers.reputations.read", + SubusersStatsMonthlyRead: "subusers.stats.monthly.read", + SubusersStatsRead: "subusers.stats.read", + SubusersStatsSumsRead: "subusers.stats.sums.read", + SubusersSummaryRead: "subusers.summary.read", + SubusersUpdate: "subusers.update", + SuppressionBlocksCreate: "suppression.blocks.create", + SuppressionBlocksDelete: "suppression.blocks.delete", + SuppressionBlocksRead: "suppression.blocks.read", + SuppressionBlocksUpdate: "suppression.blocks.update", + SuppressionBouncesCreate: "suppression.bounces.create", + SuppressionBouncesDelete: "suppression.bounces.delete", + SuppressionBouncesRead: "suppression.bounces.read", + SuppressionBouncesUpdate: "suppression.bounces.update", + SuppressionCreate: "suppression.create", + SuppressionDelete: "suppression.delete", + SuppressionInvalidEmailsCreate: "suppression.invalid_emails.create", + SuppressionInvalidEmailsDelete: "suppression.invalid_emails.delete", + SuppressionInvalidEmailsRead: "suppression.invalid_emails.read", + SuppressionInvalidEmailsUpdate: "suppression.invalid_emails.update", + SuppressionRead: "suppression.read", + SuppressionSpamReportsCreate: "suppression.spam_reports.create", + SuppressionSpamReportsDelete: "suppression.spam_reports.delete", + SuppressionSpamReportsRead: "suppression.spam_reports.read", + SuppressionSpamReportsUpdate: "suppression.spam_reports.update", + SuppressionUnsubscribesCreate: "suppression.unsubscribes.create", + SuppressionUnsubscribesDelete: "suppression.unsubscribes.delete", + SuppressionUnsubscribesRead: "suppression.unsubscribes.read", + SuppressionUnsubscribesUpdate: "suppression.unsubscribes.update", + SuppressionUpdate: "suppression.update", + TeammatesCreate: "teammates.create", + TeammatesRead: "teammates.read", + TeammatesUpdate: "teammates.update", + TeammatesDelete: "teammates.delete", + TemplatesCreate: "templates.create", + TemplatesDelete: "templates.delete", + TemplatesRead: "templates.read", + TemplatesUpdate: "templates.update", + TemplatesVersionsActivateCreate: "templates.versions.activate.create", + TemplatesVersionsActivateDelete: "templates.versions.activate.delete", + TemplatesVersionsActivateRead: "templates.versions.activate.read", + TemplatesVersionsActivateUpdate: "templates.versions.activate.update", + TemplatesVersionsCreate: "templates.versions.create", + TemplatesVersionsDelete: "templates.versions.delete", + TemplatesVersionsRead: "templates.versions.read", + TemplatesVersionsUpdate: "templates.versions.update", + TrackingSettingsClickRead: "tracking_settings.click.read", + TrackingSettingsClickUpdate: "tracking_settings.click.update", + TrackingSettingsGoogleAnalyticsRead: "tracking_settings.google_analytics.read", + TrackingSettingsGoogleAnalyticsUpdate: "tracking_settings.google_analytics.update", + TrackingSettingsOpenRead: "tracking_settings.open.read", + TrackingSettingsOpenUpdate: "tracking_settings.open.update", + TrackingSettingsRead: "tracking_settings.read", + TrackingSettingsSubscriptionRead: "tracking_settings.subscription.read", + TrackingSettingsSubscriptionUpdate: "tracking_settings.subscription.update", + UserAccountRead: "user.account.read", + UserCreditsRead: "user.credits.read", + UserEmailCreate: "user.email.create", + UserEmailDelete: "user.email.delete", + UserEmailRead: "user.email.read", + UserEmailUpdate: "user.email.update", + UserMultifactorAuthenticationCreate: "user.multifactor_authentication.create", + UserMultifactorAuthenticationDelete: "user.multifactor_authentication.delete", + UserMultifactorAuthenticationRead: "user.multifactor_authentication.read", + UserMultifactorAuthenticationUpdate: "user.multifactor_authentication.update", + UserPasswordRead: "user.password.read", + UserPasswordUpdate: "user.password.update", + UserProfileRead: "user.profile.read", + UserProfileUpdate: "user.profile.update", + UserScheduledSendsCreate: "user.scheduled_sends.create", + UserScheduledSendsDelete: "user.scheduled_sends.delete", + UserScheduledSendsRead: "user.scheduled_sends.read", + UserScheduledSendsUpdate: "user.scheduled_sends.update", + UserSettingsEnforcedTlsRead: "user.settings.enforced_tls.read", + UserSettingsEnforcedTlsUpdate: "user.settings.enforced_tls.update", + UserTimezoneRead: "user.timezone.read", + UserUsernameRead: "user.username.read", + UserUsernameUpdate: "user.username.update", + UserWebhooksEventSettingsRead: "user.webhooks.event.settings.read", + UserWebhooksEventSettingsUpdate: "user.webhooks.event.settings.update", + UserWebhooksEventTestCreate: "user.webhooks.event.test.create", + UserWebhooksEventTestRead: "user.webhooks.event.test.read", + UserWebhooksEventTestUpdate: "user.webhooks.event.test.update", + UserWebhooksParseSettingsCreate: "user.webhooks.parse.settings.create", + UserWebhooksParseSettingsDelete: "user.webhooks.parse.settings.delete", + UserWebhooksParseSettingsRead: "user.webhooks.parse.settings.read", + UserWebhooksParseSettingsUpdate: "user.webhooks.parse.settings.update", + UserWebhooksParseStatsRead: "user.webhooks.parse.stats.read", + WhitelabelCreate: "whitelabel.create", + WhitelabelDelete: "whitelabel.delete", + WhitelabelRead: "whitelabel.read", + WhitelabelUpdate: "whitelabel.update", + } + + StringToPermission = map[string]Permission{ + "access_settings.activity.read": AccessSettingsActivityRead, + "access_settings.whitelist.create": AccessSettingsWhitelistCreate, + "access_settings.whitelist.delete": AccessSettingsWhitelistDelete, + "access_settings.whitelist.read": AccessSettingsWhitelistRead, + "access_settings.whitelist.update": AccessSettingsWhitelistUpdate, + "alerts.create": AlertsCreate, + "alerts.delete": AlertsDelete, + "alerts.read": AlertsRead, + "alerts.update": AlertsUpdate, + "api_keys.create": ApiKeysCreate, + "api_keys.delete": ApiKeysDelete, + "api_keys.read": ApiKeysRead, + "api_keys.update": ApiKeysUpdate, + "asm.groups.create": AsmGroupsCreate, + "asm.groups.delete": AsmGroupsDelete, + "asm.groups.read": AsmGroupsRead, + "asm.groups.update": AsmGroupsUpdate, + "billing.create": BillingCreate, + "billing.delete": BillingDelete, + "billing.read": BillingRead, + "billing.update": BillingUpdate, + "browsers.stats.read": BrowsersStatsRead, + "categories.create": CategoriesCreate, + "categories.delete": CategoriesDelete, + "categories.read": CategoriesRead, + "categories.stats.read": CategoriesStatsRead, + "categories.stats.sums.read": CategoriesStatsSumsRead, + "categories.update": CategoriesUpdate, + "clients.desktop.stats.read": ClientsDesktopStatsRead, + "clients.phone.stats.read": ClientsPhoneStatsRead, + "clients.stats.read": ClientsStatsRead, + "clients.tablet.stats.read": ClientsTabletStatsRead, + "clients.webmail.stats.read": ClientsWebmailStatsRead, + "devices.stats.read": DevicesStatsRead, + "email_activity.read": EmailActivityRead, + "geo.stats.read": GeoStatsRead, + "ips.assigned.read": IpsAssignedRead, + "ips.pools.create": IpsPoolsCreate, + "ips.pools.delete": IpsPoolsDelete, + "ips.pools.ips.create": IpsPoolsIpsCreate, + "ips.pools.ips.delete": IpsPoolsIpsDelete, + "ips.pools.ips.read": IpsPoolsIpsRead, + "ips.pools.ips.update": IpsPoolsIpsUpdate, + "ips.pools.read": IpsPoolsRead, + "ips.pools.update": IpsPoolsUpdate, + "ips.read": IpsRead, + "ips.warmup.create": IpsWarmupCreate, + "ips.warmup.delete": IpsWarmupDelete, + "ips.warmup.read": IpsWarmupRead, + "ips.warmup.update": IpsWarmupUpdate, + "mail_settings.address_whitelist.read": MailSettingsAddressWhitelistRead, + "mail_settings.address_whitelist.update": MailSettingsAddressWhitelistUpdate, + "mail_settings.bounce_purge.read": MailSettingsBouncePurgeRead, + "mail_settings.bounce_purge.update": MailSettingsBouncePurgeUpdate, + "mail_settings.footer.read": MailSettingsFooterRead, + "mail_settings.footer.update": MailSettingsFooterUpdate, + "mail_settings.forward_bounce.read": MailSettingsForwardBounceRead, + "mail_settings.forward_bounce.update": MailSettingsForwardBounceUpdate, + "mail_settings.forward_spam.read": MailSettingsForwardSpamRead, + "mail_settings.forward_spam.update": MailSettingsForwardSpamUpdate, + "mail_settings.plain_content.read": MailSettingsPlainContentRead, + "mail_settings.plain_content.update": MailSettingsPlainContentUpdate, + "mail_settings.read": MailSettingsRead, + "mail_settings.template.read": MailSettingsTemplateRead, + "mail_settings.template.update": MailSettingsTemplateUpdate, + "mail.batch.create": MailBatchCreate, + "mail.batch.delete": MailBatchDelete, + "mail.batch.read": MailBatchRead, + "mail.batch.update": MailBatchUpdate, + "mail.send": MailSend, + "mailbox_providers.stats.read": MailboxProvidersStatsRead, + "marketing_campaigns.create": MarketingCampaignsCreate, + "marketing_campaigns.delete": MarketingCampaignsDelete, + "marketing_campaigns.read": MarketingCampaignsRead, + "marketing_campaigns.update": MarketingCampaignsUpdate, + "partner_settings.new_relic.read": PartnerSettingsNewRelicRead, + "partner_settings.new_relic.update": PartnerSettingsNewRelicUpdate, + "partner_settings.read": PartnerSettingsRead, + "stats.global.read": StatsGlobalRead, + "stats.read": StatsRead, + "subusers.create": SubusersCreate, + "subusers.credits.create": SubusersCreditsCreate, + "subusers.credits.delete": SubusersCreditsDelete, + "subusers.credits.read": SubusersCreditsRead, + "subusers.credits.remaining.create": SubusersCreditsRemainingCreate, + "subusers.credits.remaining.delete": SubusersCreditsRemainingDelete, + "subusers.credits.remaining.read": SubusersCreditsRemainingRead, + "subusers.credits.remaining.update": SubusersCreditsRemainingUpdate, + "subusers.credits.update": SubusersCreditsUpdate, + "subusers.delete": SubusersDelete, + "subusers.monitor.create": SubusersMonitorCreate, + "subusers.monitor.delete": SubusersMonitorDelete, + "subusers.monitor.read": SubusersMonitorRead, + "subusers.monitor.update": SubusersMonitorUpdate, + "subusers.read": SubusersRead, + "subusers.reputations.read": SubusersReputationsRead, + "subusers.stats.monthly.read": SubusersStatsMonthlyRead, + "subusers.stats.read": SubusersStatsRead, + "subusers.stats.sums.read": SubusersStatsSumsRead, + "subusers.summary.read": SubusersSummaryRead, + "subusers.update": SubusersUpdate, + "suppression.blocks.create": SuppressionBlocksCreate, + "suppression.blocks.delete": SuppressionBlocksDelete, + "suppression.blocks.read": SuppressionBlocksRead, + "suppression.blocks.update": SuppressionBlocksUpdate, + "suppression.bounces.create": SuppressionBouncesCreate, + "suppression.bounces.delete": SuppressionBouncesDelete, + "suppression.bounces.read": SuppressionBouncesRead, + "suppression.bounces.update": SuppressionBouncesUpdate, + "suppression.create": SuppressionCreate, + "suppression.delete": SuppressionDelete, + "suppression.invalid_emails.create": SuppressionInvalidEmailsCreate, + "suppression.invalid_emails.delete": SuppressionInvalidEmailsDelete, + "suppression.invalid_emails.read": SuppressionInvalidEmailsRead, + "suppression.invalid_emails.update": SuppressionInvalidEmailsUpdate, + "suppression.read": SuppressionRead, + "suppression.spam_reports.create": SuppressionSpamReportsCreate, + "suppression.spam_reports.delete": SuppressionSpamReportsDelete, + "suppression.spam_reports.read": SuppressionSpamReportsRead, + "suppression.spam_reports.update": SuppressionSpamReportsUpdate, + "suppression.unsubscribes.create": SuppressionUnsubscribesCreate, + "suppression.unsubscribes.delete": SuppressionUnsubscribesDelete, + "suppression.unsubscribes.read": SuppressionUnsubscribesRead, + "suppression.unsubscribes.update": SuppressionUnsubscribesUpdate, + "suppression.update": SuppressionUpdate, + "teammates.create": TeammatesCreate, + "teammates.read": TeammatesRead, + "teammates.update": TeammatesUpdate, + "teammates.delete": TeammatesDelete, + "templates.create": TemplatesCreate, + "templates.delete": TemplatesDelete, + "templates.read": TemplatesRead, + "templates.update": TemplatesUpdate, + "templates.versions.activate.create": TemplatesVersionsActivateCreate, + "templates.versions.activate.delete": TemplatesVersionsActivateDelete, + "templates.versions.activate.read": TemplatesVersionsActivateRead, + "templates.versions.activate.update": TemplatesVersionsActivateUpdate, + "templates.versions.create": TemplatesVersionsCreate, + "templates.versions.delete": TemplatesVersionsDelete, + "templates.versions.read": TemplatesVersionsRead, + "templates.versions.update": TemplatesVersionsUpdate, + "tracking_settings.click.read": TrackingSettingsClickRead, + "tracking_settings.click.update": TrackingSettingsClickUpdate, + "tracking_settings.google_analytics.read": TrackingSettingsGoogleAnalyticsRead, + "tracking_settings.google_analytics.update": TrackingSettingsGoogleAnalyticsUpdate, + "tracking_settings.open.read": TrackingSettingsOpenRead, + "tracking_settings.open.update": TrackingSettingsOpenUpdate, + "tracking_settings.read": TrackingSettingsRead, + "tracking_settings.subscription.read": TrackingSettingsSubscriptionRead, + "tracking_settings.subscription.update": TrackingSettingsSubscriptionUpdate, + "user.account.read": UserAccountRead, + "user.credits.read": UserCreditsRead, + "user.email.create": UserEmailCreate, + "user.email.delete": UserEmailDelete, + "user.email.read": UserEmailRead, + "user.email.update": UserEmailUpdate, + "user.multifactor_authentication.create": UserMultifactorAuthenticationCreate, + "user.multifactor_authentication.delete": UserMultifactorAuthenticationDelete, + "user.multifactor_authentication.read": UserMultifactorAuthenticationRead, + "user.multifactor_authentication.update": UserMultifactorAuthenticationUpdate, + "user.password.read": UserPasswordRead, + "user.password.update": UserPasswordUpdate, + "user.profile.read": UserProfileRead, + "user.profile.update": UserProfileUpdate, + "user.scheduled_sends.create": UserScheduledSendsCreate, + "user.scheduled_sends.delete": UserScheduledSendsDelete, + "user.scheduled_sends.read": UserScheduledSendsRead, + "user.scheduled_sends.update": UserScheduledSendsUpdate, + "user.settings.enforced_tls.read": UserSettingsEnforcedTlsRead, + "user.settings.enforced_tls.update": UserSettingsEnforcedTlsUpdate, + "user.timezone.read": UserTimezoneRead, + "user.username.read": UserUsernameRead, + "user.username.update": UserUsernameUpdate, + "user.webhooks.event.settings.read": UserWebhooksEventSettingsRead, + "user.webhooks.event.settings.update": UserWebhooksEventSettingsUpdate, + "user.webhooks.event.test.create": UserWebhooksEventTestCreate, + "user.webhooks.event.test.read": UserWebhooksEventTestRead, + "user.webhooks.event.test.update": UserWebhooksEventTestUpdate, + "user.webhooks.parse.settings.create": UserWebhooksParseSettingsCreate, + "user.webhooks.parse.settings.delete": UserWebhooksParseSettingsDelete, + "user.webhooks.parse.settings.read": UserWebhooksParseSettingsRead, + "user.webhooks.parse.settings.update": UserWebhooksParseSettingsUpdate, + "user.webhooks.parse.stats.read": UserWebhooksParseStatsRead, + "whitelabel.create": WhitelabelCreate, + "whitelabel.delete": WhitelabelDelete, + "whitelabel.read": WhitelabelRead, + "whitelabel.update": WhitelabelUpdate, + } + + PermissionIDs = map[Permission]int{ + AccessSettingsActivityRead: 1, + AccessSettingsWhitelistCreate: 2, + AccessSettingsWhitelistDelete: 3, + AccessSettingsWhitelistRead: 4, + AccessSettingsWhitelistUpdate: 5, + AlertsCreate: 6, + AlertsDelete: 7, + AlertsRead: 8, + AlertsUpdate: 9, + ApiKeysCreate: 10, + ApiKeysDelete: 11, + ApiKeysRead: 12, + ApiKeysUpdate: 13, + AsmGroupsCreate: 14, + AsmGroupsDelete: 15, + AsmGroupsRead: 16, + AsmGroupsUpdate: 17, + BillingCreate: 18, + BillingDelete: 19, + BillingRead: 20, + BillingUpdate: 21, + BrowsersStatsRead: 22, + CategoriesCreate: 23, + CategoriesDelete: 24, + CategoriesRead: 25, + CategoriesStatsRead: 26, + CategoriesStatsSumsRead: 27, + CategoriesUpdate: 28, + ClientsDesktopStatsRead: 29, + ClientsPhoneStatsRead: 30, + ClientsStatsRead: 31, + ClientsTabletStatsRead: 32, + ClientsWebmailStatsRead: 33, + DevicesStatsRead: 34, + EmailActivityRead: 35, + GeoStatsRead: 36, + IpsAssignedRead: 37, + IpsPoolsCreate: 38, + IpsPoolsDelete: 39, + IpsPoolsIpsCreate: 40, + IpsPoolsIpsDelete: 41, + IpsPoolsIpsRead: 42, + IpsPoolsIpsUpdate: 43, + IpsPoolsRead: 44, + IpsPoolsUpdate: 45, + IpsRead: 46, + IpsWarmupCreate: 47, + IpsWarmupDelete: 48, + IpsWarmupRead: 49, + IpsWarmupUpdate: 50, + MailSettingsAddressWhitelistRead: 51, + MailSettingsAddressWhitelistUpdate: 52, + MailSettingsBouncePurgeRead: 53, + MailSettingsBouncePurgeUpdate: 54, + MailSettingsFooterRead: 55, + MailSettingsFooterUpdate: 56, + MailSettingsForwardBounceRead: 57, + MailSettingsForwardBounceUpdate: 58, + MailSettingsForwardSpamRead: 59, + MailSettingsForwardSpamUpdate: 60, + MailSettingsPlainContentRead: 61, + MailSettingsPlainContentUpdate: 62, + MailSettingsRead: 63, + MailSettingsTemplateRead: 64, + MailSettingsTemplateUpdate: 65, + MailBatchCreate: 66, + MailBatchDelete: 67, + MailBatchRead: 68, + MailBatchUpdate: 69, + MailSend: 70, + MailboxProvidersStatsRead: 71, + MarketingCampaignsCreate: 72, + MarketingCampaignsDelete: 73, + MarketingCampaignsRead: 74, + MarketingCampaignsUpdate: 75, + PartnerSettingsNewRelicRead: 76, + PartnerSettingsNewRelicUpdate: 77, + PartnerSettingsRead: 78, + StatsGlobalRead: 79, + StatsRead: 80, + SubusersCreate: 81, + SubusersCreditsCreate: 82, + SubusersCreditsDelete: 83, + SubusersCreditsRead: 84, + SubusersCreditsRemainingCreate: 85, + SubusersCreditsRemainingDelete: 86, + SubusersCreditsRemainingRead: 87, + SubusersCreditsRemainingUpdate: 88, + SubusersCreditsUpdate: 89, + SubusersDelete: 90, + SubusersMonitorCreate: 91, + SubusersMonitorDelete: 92, + SubusersMonitorRead: 93, + SubusersMonitorUpdate: 94, + SubusersRead: 95, + SubusersReputationsRead: 96, + SubusersStatsMonthlyRead: 97, + SubusersStatsRead: 98, + SubusersStatsSumsRead: 99, + SubusersSummaryRead: 100, + SubusersUpdate: 101, + SuppressionBlocksCreate: 102, + SuppressionBlocksDelete: 103, + SuppressionBlocksRead: 104, + SuppressionBlocksUpdate: 105, + SuppressionBouncesCreate: 106, + SuppressionBouncesDelete: 107, + SuppressionBouncesRead: 108, + SuppressionBouncesUpdate: 109, + SuppressionCreate: 110, + SuppressionDelete: 111, + SuppressionInvalidEmailsCreate: 112, + SuppressionInvalidEmailsDelete: 113, + SuppressionInvalidEmailsRead: 114, + SuppressionInvalidEmailsUpdate: 115, + SuppressionRead: 116, + SuppressionSpamReportsCreate: 117, + SuppressionSpamReportsDelete: 118, + SuppressionSpamReportsRead: 119, + SuppressionSpamReportsUpdate: 120, + SuppressionUnsubscribesCreate: 121, + SuppressionUnsubscribesDelete: 122, + SuppressionUnsubscribesRead: 123, + SuppressionUnsubscribesUpdate: 124, + SuppressionUpdate: 125, + TeammatesCreate: 126, + TeammatesRead: 127, + TeammatesUpdate: 128, + TeammatesDelete: 129, + TemplatesCreate: 130, + TemplatesDelete: 131, + TemplatesRead: 132, + TemplatesUpdate: 133, + TemplatesVersionsActivateCreate: 134, + TemplatesVersionsActivateDelete: 135, + TemplatesVersionsActivateRead: 136, + TemplatesVersionsActivateUpdate: 137, + TemplatesVersionsCreate: 138, + TemplatesVersionsDelete: 139, + TemplatesVersionsRead: 140, + TemplatesVersionsUpdate: 141, + TrackingSettingsClickRead: 142, + TrackingSettingsClickUpdate: 143, + TrackingSettingsGoogleAnalyticsRead: 144, + TrackingSettingsGoogleAnalyticsUpdate: 145, + TrackingSettingsOpenRead: 146, + TrackingSettingsOpenUpdate: 147, + TrackingSettingsRead: 148, + TrackingSettingsSubscriptionRead: 149, + TrackingSettingsSubscriptionUpdate: 150, + UserAccountRead: 151, + UserCreditsRead: 152, + UserEmailCreate: 153, + UserEmailDelete: 154, + UserEmailRead: 155, + UserEmailUpdate: 156, + UserMultifactorAuthenticationCreate: 157, + UserMultifactorAuthenticationDelete: 158, + UserMultifactorAuthenticationRead: 159, + UserMultifactorAuthenticationUpdate: 160, + UserPasswordRead: 161, + UserPasswordUpdate: 162, + UserProfileRead: 163, + UserProfileUpdate: 164, + UserScheduledSendsCreate: 165, + UserScheduledSendsDelete: 166, + UserScheduledSendsRead: 167, + UserScheduledSendsUpdate: 168, + UserSettingsEnforcedTlsRead: 169, + UserSettingsEnforcedTlsUpdate: 170, + UserTimezoneRead: 171, + UserUsernameRead: 172, + UserUsernameUpdate: 173, + UserWebhooksEventSettingsRead: 174, + UserWebhooksEventSettingsUpdate: 175, + UserWebhooksEventTestCreate: 176, + UserWebhooksEventTestRead: 177, + UserWebhooksEventTestUpdate: 178, + UserWebhooksParseSettingsCreate: 179, + UserWebhooksParseSettingsDelete: 180, + UserWebhooksParseSettingsRead: 181, + UserWebhooksParseSettingsUpdate: 182, + UserWebhooksParseStatsRead: 183, + WhitelabelCreate: 184, + WhitelabelDelete: 185, + WhitelabelRead: 186, + WhitelabelUpdate: 187, + } + + IdToPermission = map[int]Permission{ + 1: AccessSettingsActivityRead, + 2: AccessSettingsWhitelistCreate, + 3: AccessSettingsWhitelistDelete, + 4: AccessSettingsWhitelistRead, + 5: AccessSettingsWhitelistUpdate, + 6: AlertsCreate, + 7: AlertsDelete, + 8: AlertsRead, + 9: AlertsUpdate, + 10: ApiKeysCreate, + 11: ApiKeysDelete, + 12: ApiKeysRead, + 13: ApiKeysUpdate, + 14: AsmGroupsCreate, + 15: AsmGroupsDelete, + 16: AsmGroupsRead, + 17: AsmGroupsUpdate, + 18: BillingCreate, + 19: BillingDelete, + 20: BillingRead, + 21: BillingUpdate, + 22: BrowsersStatsRead, + 23: CategoriesCreate, + 24: CategoriesDelete, + 25: CategoriesRead, + 26: CategoriesStatsRead, + 27: CategoriesStatsSumsRead, + 28: CategoriesUpdate, + 29: ClientsDesktopStatsRead, + 30: ClientsPhoneStatsRead, + 31: ClientsStatsRead, + 32: ClientsTabletStatsRead, + 33: ClientsWebmailStatsRead, + 34: DevicesStatsRead, + 35: EmailActivityRead, + 36: GeoStatsRead, + 37: IpsAssignedRead, + 38: IpsPoolsCreate, + 39: IpsPoolsDelete, + 40: IpsPoolsIpsCreate, + 41: IpsPoolsIpsDelete, + 42: IpsPoolsIpsRead, + 43: IpsPoolsIpsUpdate, + 44: IpsPoolsRead, + 45: IpsPoolsUpdate, + 46: IpsRead, + 47: IpsWarmupCreate, + 48: IpsWarmupDelete, + 49: IpsWarmupRead, + 50: IpsWarmupUpdate, + 51: MailSettingsAddressWhitelistRead, + 52: MailSettingsAddressWhitelistUpdate, + 53: MailSettingsBouncePurgeRead, + 54: MailSettingsBouncePurgeUpdate, + 55: MailSettingsFooterRead, + 56: MailSettingsFooterUpdate, + 57: MailSettingsForwardBounceRead, + 58: MailSettingsForwardBounceUpdate, + 59: MailSettingsForwardSpamRead, + 60: MailSettingsForwardSpamUpdate, + 61: MailSettingsPlainContentRead, + 62: MailSettingsPlainContentUpdate, + 63: MailSettingsRead, + 64: MailSettingsTemplateRead, + 65: MailSettingsTemplateUpdate, + 66: MailBatchCreate, + 67: MailBatchDelete, + 68: MailBatchRead, + 69: MailBatchUpdate, + 70: MailSend, + 71: MailboxProvidersStatsRead, + 72: MarketingCampaignsCreate, + 73: MarketingCampaignsDelete, + 74: MarketingCampaignsRead, + 75: MarketingCampaignsUpdate, + 76: PartnerSettingsNewRelicRead, + 77: PartnerSettingsNewRelicUpdate, + 78: PartnerSettingsRead, + 79: StatsGlobalRead, + 80: StatsRead, + 81: SubusersCreate, + 82: SubusersCreditsCreate, + 83: SubusersCreditsDelete, + 84: SubusersCreditsRead, + 85: SubusersCreditsRemainingCreate, + 86: SubusersCreditsRemainingDelete, + 87: SubusersCreditsRemainingRead, + 88: SubusersCreditsRemainingUpdate, + 89: SubusersCreditsUpdate, + 90: SubusersDelete, + 91: SubusersMonitorCreate, + 92: SubusersMonitorDelete, + 93: SubusersMonitorRead, + 94: SubusersMonitorUpdate, + 95: SubusersRead, + 96: SubusersReputationsRead, + 97: SubusersStatsMonthlyRead, + 98: SubusersStatsRead, + 99: SubusersStatsSumsRead, + 100: SubusersSummaryRead, + 101: SubusersUpdate, + 102: SuppressionBlocksCreate, + 103: SuppressionBlocksDelete, + 104: SuppressionBlocksRead, + 105: SuppressionBlocksUpdate, + 106: SuppressionBouncesCreate, + 107: SuppressionBouncesDelete, + 108: SuppressionBouncesRead, + 109: SuppressionBouncesUpdate, + 110: SuppressionCreate, + 111: SuppressionDelete, + 112: SuppressionInvalidEmailsCreate, + 113: SuppressionInvalidEmailsDelete, + 114: SuppressionInvalidEmailsRead, + 115: SuppressionInvalidEmailsUpdate, + 116: SuppressionRead, + 117: SuppressionSpamReportsCreate, + 118: SuppressionSpamReportsDelete, + 119: SuppressionSpamReportsRead, + 120: SuppressionSpamReportsUpdate, + 121: SuppressionUnsubscribesCreate, + 122: SuppressionUnsubscribesDelete, + 123: SuppressionUnsubscribesRead, + 124: SuppressionUnsubscribesUpdate, + 125: SuppressionUpdate, + 126: TeammatesCreate, + 127: TeammatesRead, + 128: TeammatesUpdate, + 129: TeammatesDelete, + 130: TemplatesCreate, + 131: TemplatesDelete, + 132: TemplatesRead, + 133: TemplatesUpdate, + 134: TemplatesVersionsActivateCreate, + 135: TemplatesVersionsActivateDelete, + 136: TemplatesVersionsActivateRead, + 137: TemplatesVersionsActivateUpdate, + 138: TemplatesVersionsCreate, + 139: TemplatesVersionsDelete, + 140: TemplatesVersionsRead, + 141: TemplatesVersionsUpdate, + 142: TrackingSettingsClickRead, + 143: TrackingSettingsClickUpdate, + 144: TrackingSettingsGoogleAnalyticsRead, + 145: TrackingSettingsGoogleAnalyticsUpdate, + 146: TrackingSettingsOpenRead, + 147: TrackingSettingsOpenUpdate, + 148: TrackingSettingsRead, + 149: TrackingSettingsSubscriptionRead, + 150: TrackingSettingsSubscriptionUpdate, + 151: UserAccountRead, + 152: UserCreditsRead, + 153: UserEmailCreate, + 154: UserEmailDelete, + 155: UserEmailRead, + 156: UserEmailUpdate, + 157: UserMultifactorAuthenticationCreate, + 158: UserMultifactorAuthenticationDelete, + 159: UserMultifactorAuthenticationRead, + 160: UserMultifactorAuthenticationUpdate, + 161: UserPasswordRead, + 162: UserPasswordUpdate, + 163: UserProfileRead, + 164: UserProfileUpdate, + 165: UserScheduledSendsCreate, + 166: UserScheduledSendsDelete, + 167: UserScheduledSendsRead, + 168: UserScheduledSendsUpdate, + 169: UserSettingsEnforcedTlsRead, + 170: UserSettingsEnforcedTlsUpdate, + 171: UserTimezoneRead, + 172: UserUsernameRead, + 173: UserUsernameUpdate, + 174: UserWebhooksEventSettingsRead, + 175: UserWebhooksEventSettingsUpdate, + 176: UserWebhooksEventTestCreate, + 177: UserWebhooksEventTestRead, + 178: UserWebhooksEventTestUpdate, + 179: UserWebhooksParseSettingsCreate, + 180: UserWebhooksParseSettingsDelete, + 181: UserWebhooksParseSettingsRead, + 182: UserWebhooksParseSettingsUpdate, + 183: UserWebhooksParseStatsRead, + 184: WhitelabelCreate, + 185: WhitelabelDelete, + 186: WhitelabelRead, + 187: WhitelabelUpdate, + } +) + +// ToString converts a Permission enum to its string representation +func (p Permission) ToString() (string, error) { + if str, ok := PermissionStrings[p]; ok { + return str, nil + } + return "", errors.New("invalid permission") +} + +// ToID converts a Permission enum to its ID +func (p Permission) ToID() (int, error) { + if id, ok := PermissionIDs[p]; ok { + return id, nil + } + return 0, errors.New("invalid permission") +} + +// PermissionFromString converts a string representation to its Permission enum +func PermissionFromString(s string) (Permission, error) { + if p, ok := StringToPermission[s]; ok { + return p, nil + } + return 0, errors.New("invalid permission string") +} + +// PermissionFromID converts an ID to its Permission enum +func PermissionFromID(id int) (Permission, error) { + if p, ok := IdToPermission[id]; ok { + return p, nil + } + return 0, errors.New("invalid permission ID") +} diff --git a/pkg/analyzer/analyzers/sendgrid/permissions.yaml b/pkg/analyzer/analyzers/sendgrid/permissions.yaml new file mode 100644 index 000000000..80415dee4 --- /dev/null +++ b/pkg/analyzer/analyzers/sendgrid/permissions.yaml @@ -0,0 +1,188 @@ +permissions: + - access_settings.activity.read + - access_settings.whitelist.create + - access_settings.whitelist.delete + - access_settings.whitelist.read + - access_settings.whitelist.update + - alerts.create + - alerts.delete + - alerts.read + - alerts.update + - api_keys.create + - api_keys.delete + - api_keys.read + - api_keys.update + - asm.groups.create + - asm.groups.delete + - asm.groups.read + - asm.groups.update + - billing.create + - billing.delete + - billing.read + - billing.update + - browsers.stats.read + - categories.create + - categories.delete + - categories.read + - categories.stats.read + - categories.stats.sums.read + - categories.update + - clients.desktop.stats.read + - clients.phone.stats.read + - clients.stats.read + - clients.tablet.stats.read + - clients.webmail.stats.read + - devices.stats.read + - email_activity.read + - geo.stats.read + - ips.assigned.read + - ips.pools.create + - ips.pools.delete + - ips.pools.ips.create + - ips.pools.ips.delete + - ips.pools.ips.read + - ips.pools.ips.update + - ips.pools.read + - ips.pools.update + - ips.read + - ips.warmup.create + - ips.warmup.delete + - ips.warmup.read + - ips.warmup.update + - mail_settings.address_whitelist.read + - mail_settings.address_whitelist.update + - mail_settings.bounce_purge.read + - mail_settings.bounce_purge.update + - mail_settings.footer.read + - mail_settings.footer.update + - mail_settings.forward_bounce.read + - mail_settings.forward_bounce.update + - mail_settings.forward_spam.read + - mail_settings.forward_spam.update + - mail_settings.plain_content.read + - mail_settings.plain_content.update + - mail_settings.read + - mail_settings.template.read + - mail_settings.template.update + - mail.batch.create + - mail.batch.delete + - mail.batch.read + - mail.batch.update + - mail.send + - mailbox_providers.stats.read + - marketing_campaigns.create + - marketing_campaigns.delete + - marketing_campaigns.read + - marketing_campaigns.update + - partner_settings.new_relic.read + - partner_settings.new_relic.update + - partner_settings.read + - stats.global.read + - stats.read + - subusers.create + - subusers.credits.create + - subusers.credits.delete + - subusers.credits.read + - subusers.credits.remaining.create + - subusers.credits.remaining.delete + - subusers.credits.remaining.read + - subusers.credits.remaining.update + - subusers.credits.update + - subusers.delete + - subusers.monitor.create + - subusers.monitor.delete + - subusers.monitor.read + - subusers.monitor.update + - subusers.read + - subusers.reputations.read + - subusers.stats.monthly.read + - subusers.stats.read + - subusers.stats.sums.read + - subusers.summary.read + - subusers.update + - suppression.blocks.create + - suppression.blocks.delete + - suppression.blocks.read + - suppression.blocks.update + - suppression.bounces.create + - suppression.bounces.delete + - suppression.bounces.read + - suppression.bounces.update + - suppression.create + - suppression.delete + - suppression.invalid_emails.create + - suppression.invalid_emails.delete + - suppression.invalid_emails.read + - suppression.invalid_emails.update + - suppression.read + - suppression.spam_reports.create + - suppression.spam_reports.delete + - suppression.spam_reports.read + - suppression.spam_reports.update + - suppression.unsubscribes.create + - suppression.unsubscribes.delete + - suppression.unsubscribes.read + - suppression.unsubscribes.update + - suppression.update + - teammates.create + - teammates.read + - teammates.update + - teammates.delete + - templates.create + - templates.delete + - templates.read + - templates.update + - templates.versions.activate.create + - templates.versions.activate.delete + - templates.versions.activate.read + - templates.versions.activate.update + - templates.versions.create + - templates.versions.delete + - templates.versions.read + - templates.versions.update + - tracking_settings.click.read + - tracking_settings.click.update + - tracking_settings.google_analytics.read + - tracking_settings.google_analytics.update + - tracking_settings.open.read + - tracking_settings.open.update + - tracking_settings.read + - tracking_settings.subscription.read + - tracking_settings.subscription.update + - user.account.read + - user.credits.read + - user.email.create + - user.email.delete + - user.email.read + - user.email.update + - user.multifactor_authentication.create + - user.multifactor_authentication.delete + - user.multifactor_authentication.read + - user.multifactor_authentication.update + - user.password.read + - user.password.update + - user.profile.read + - user.profile.update + - user.scheduled_sends.create + - user.scheduled_sends.delete + - user.scheduled_sends.read + - user.scheduled_sends.update + - user.settings.enforced_tls.read + - user.settings.enforced_tls.update + - user.timezone.read + - user.username.read + - user.username.update + - user.webhooks.event.settings.read + - user.webhooks.event.settings.update + - user.webhooks.event.test.create + - user.webhooks.event.test.read + - user.webhooks.event.test.update + - user.webhooks.parse.settings.create + - user.webhooks.parse.settings.delete + - user.webhooks.parse.settings.read + - user.webhooks.parse.settings.update + - user.webhooks.parse.stats.read + - whitelabel.create + - whitelabel.delete + - whitelabel.read + - whitelabel.update diff --git a/pkg/analyzer/analyzers/sendgrid/sendgrid.go b/pkg/analyzer/analyzers/sendgrid/sendgrid.go index 25c239d92..f924d0d68 100644 --- a/pkg/analyzer/analyzers/sendgrid/sendgrid.go +++ b/pkg/analyzer/analyzers/sendgrid/sendgrid.go @@ -1,3 +1,5 @@ +//go:generate generate_permissions permissions.yaml permissions.go sendgrid + package sendgrid import ( @@ -13,17 +15,106 @@ import ( "github.com/trufflesecurity/trufflehog/v3/pkg/analyzer/analyzers" "github.com/trufflesecurity/trufflehog/v3/pkg/analyzer/config" + "github.com/trufflesecurity/trufflehog/v3/pkg/analyzer/pb/analyzerpb" + "github.com/trufflesecurity/trufflehog/v3/pkg/context" ) +var _ analyzers.Analyzer = (*Analyzer)(nil) + +type Analyzer struct { + Cfg *config.Config +} + +func (Analyzer) Type() analyzerpb.AnalyzerType { return analyzerpb.AnalyzerType_Sendgrid } + +func (a Analyzer) Analyze(_ context.Context, credInfo map[string]string) (*analyzers.AnalyzerResult, error) { + key, ok := credInfo["key"] + if !ok { + return nil, fmt.Errorf("missing key in credInfo") + } + info, err := AnalyzePermissions(a.Cfg, key) + if err != nil { + return nil, err + } + return secretInfoToAnalyzerResult(info), nil +} + +func secretInfoToAnalyzerResult(info *SecretInfo) *analyzers.AnalyzerResult { + if info == nil { + return nil + } + + var keyType string + if slices.Contains(info.RawScopes, "user.email.read") { + keyType = "full access" + } else if slices.Contains(info.RawScopes, "billing.read") { + keyType = "billing access" + } else { + keyType = "restricted access" + } + + result := analyzers.AnalyzerResult{ + AnalyzerType: analyzerpb.AnalyzerType_Sendgrid, + Metadata: map[string]any{ + "key_type": keyType, + "2fa_required": slices.Contains(info.RawScopes, "2fa_required"), + }, + Bindings: []analyzers.Binding{}, + UnboundedResources: []analyzers.Resource{}, + } + + for _, scope := range info.Scopes { + resource := getCategoryResource(scope) + + if len(scope.Permissions) == 0 { + result.UnboundedResources = append(result.UnboundedResources, *resource) + continue + } + + for _, permission := range scope.Permissions { + result.Bindings = append(result.Bindings, analyzers.Binding{ + Resource: *resource, + Permission: analyzers.Permission{ + Value: permission, + }, + }) + } + } + + return &result +} + +func getCategoryResource(scope SendgridScope) *analyzers.Resource { + categoryResource := &analyzers.Resource{ + Name: scope.Category, + FullyQualifiedName: scope.Category, + Type: "category", + Metadata: nil, + } + + if scope.SubCategory != "" { + return &analyzers.Resource{ + Name: scope.SubCategory, + FullyQualifiedName: fmt.Sprintf("%s/%s", scope.Category, scope.SubCategory), + Type: "category", + Metadata: nil, + Parent: categoryResource, + } + } + + return categoryResource +} + type ScopesJSON struct { Scopes []string `json:"scopes"` } type SecretInfo struct { RawScopes []string + Scopes []SendgridScope } -func printPermissions(show_all bool) { +func printPermissions(info *SecretInfo, show_all bool) { fmt.Print("\n\n") t := table.NewWriter() t.SetOutputMirror(os.Stdout) @@ -33,7 +124,7 @@ func printPermissions(show_all bool) { t.AppendHeader(table.Row{"Scope", "Sub-Scope", "Access"}) } // Print the scopes - for _, s := range SCOPES { + for _, s := range info.Scopes { writer := analyzers.GetWriterFromStatus(s.PermissionType) if show_all { t.AppendRow([]interface{}{writer(s.Category), writer(s.SubCategory), writer(s.PermissionType), writer(strings.Join(s.Permissions, "\n"))}) @@ -49,11 +140,11 @@ func printPermissions(show_all bool) { // It will return the most specific category possible. // For example, if the scope is "mail.send.read", it will return "Mail Send", not just "Mail" // since it's searching "mail.send.read" -> "mail.send" -> "mail" -func getScopeIndex(scope string) int { +func getScopeIndex(categories []SendgridScope, scope string) int { splitScope := strings.Split(scope, ".") for i := len(splitScope); i > 0; i-- { searchScope := strings.Join(splitScope[:i], ".") - for i, s := range SCOPES { + for i, s := range categories { for _, prefix := range s.Prefixes { if strings.HasPrefix(searchScope, prefix) { return i @@ -64,24 +155,36 @@ func getScopeIndex(scope string) int { return -1 } -func processPermissions(rawScopes []string) { +func processPermissions(rawScopes []string) []SendgridScope { + categoryPermissions := make([]SendgridScope, len(SCOPES)) + + // copy all scope categories to the categoryPermissions slice + copy(categoryPermissions, SCOPES) for _, scope := range rawScopes { // Skip these scopes since they are not useful for this analysis if scope == "2fa_required" || scope == "sender_verification_eligible" { continue } - ind := getScopeIndex(scope) + + // must be part of generated permissions + if _, ok := StringToPermission[scope]; !ok { + continue + } + ind := getScopeIndex(categoryPermissions, scope) if ind == -1 { //color.Red("[!] Scope not found: %v", scope) continue } - s := &SCOPES[ind] + s := &categoryPermissions[ind] s.AddPermission(scope) } + // Run tests to determine the permission type - for i := range SCOPES { - SCOPES[i].RunTests() + for i := range categoryPermissions { + categoryPermissions[i].RunTests() } + + return categoryPermissions } func AnalyzeAndPrintPermissions(cfg *config.Config, key string) { @@ -105,7 +208,7 @@ func AnalyzeAndPrintPermissions(cfg *config.Config, key string) { color.Yellow("[i] 2FA Required for this account") } - printPermissions(cfg.ShowAll) + printPermissions(info, cfg.ShowAll) } func AnalyzePermissions(cfg *config.Config, key string) (*SecretInfo, error) { @@ -133,7 +236,10 @@ func AnalyzePermissions(cfg *config.Config, key string) (*SecretInfo, error) { // Now you can access the scopes rawScopes := jsonScopes.Scopes - processPermissions(rawScopes) + categoryScope := processPermissions(rawScopes) - return &SecretInfo{RawScopes: rawScopes}, nil + return &SecretInfo{ + RawScopes: rawScopes, + Scopes: categoryScope, + }, nil } diff --git a/pkg/analyzer/analyzers/sendgrid/sendgrid_test.go b/pkg/analyzer/analyzers/sendgrid/sendgrid_test.go new file mode 100644 index 000000000..1d14c682e --- /dev/null +++ b/pkg/analyzer/analyzers/sendgrid/sendgrid_test.go @@ -0,0 +1,97 @@ +package sendgrid + +import ( + "encoding/json" + "testing" + "time" + + "github.com/trufflesecurity/trufflehog/v3/pkg/analyzer/analyzers" + "github.com/trufflesecurity/trufflehog/v3/pkg/analyzer/config" + "github.com/trufflesecurity/trufflehog/v3/pkg/common" + "github.com/trufflesecurity/trufflehog/v3/pkg/context" +) + +func TestAnalyzer_Analyze(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + testSecrets, err := common.GetSecret(ctx, "trufflehog-testing", "detectors5") + if err != nil { + t.Fatalf("could not get test secrets from GCP: %s", err) + } + + tests := []struct { + name string + key string + want string // JSON string + wantErr bool + }{ + { + name: "Valid Sendgrid key", + key: testSecrets.MustGetField("SENDGRID"), + want: `{"AnalyzerType":14,"Bindings":[{"Resource":{"Name":"API Keys","FullyQualifiedName":"API Keys","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"api_keys.create","Parent":null}},{"Resource":{"Name":"API Keys","FullyQualifiedName":"API Keys","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"api_keys.read","Parent":null}},{"Resource":{"Name":"API Keys","FullyQualifiedName":"API Keys","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"api_keys.update","Parent":null}},{"Resource":{"Name":"API Keys","FullyQualifiedName":"API Keys","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"api_keys.delete","Parent":null}},{"Resource":{"Name":"Alerts","FullyQualifiedName":"Alerts","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"alerts.create","Parent":null}},{"Resource":{"Name":"Alerts","FullyQualifiedName":"Alerts","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"alerts.read","Parent":null}},{"Resource":{"Name":"Alerts","FullyQualifiedName":"Alerts","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"alerts.update","Parent":null}},{"Resource":{"Name":"Alerts","FullyQualifiedName":"Alerts","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"alerts.delete","Parent":null}},{"Resource":{"Name":"Category Management","FullyQualifiedName":"Category Management","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"categories.stats.read","Parent":null}},{"Resource":{"Name":"Category Management","FullyQualifiedName":"Category Management","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"categories.stats.sums.read","Parent":null}},{"Resource":{"Name":"Category Management","FullyQualifiedName":"Category Management","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"categories.create","Parent":null}},{"Resource":{"Name":"Category Management","FullyQualifiedName":"Category Management","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"categories.read","Parent":null}},{"Resource":{"Name":"Category Management","FullyQualifiedName":"Category Management","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"categories.update","Parent":null}},{"Resource":{"Name":"Category Management","FullyQualifiedName":"Category Management","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"categories.delete","Parent":null}},{"Resource":{"Name":"Design Library","FullyQualifiedName":"Design Library","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"design_library.read","Parent":null}},{"Resource":{"Name":"Design Library","FullyQualifiedName":"Design Library","Type":"category","Metadata":null,"Parent":null}, + "Permission":{"Value":"design_library.create","Parent":null}},{"Resource":{"Name":"Design Library","FullyQualifiedName":"Design Library","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"design_library.update","Parent":null}}, + {"Resource":{"Name":"Design Library","FullyQualifiedName":"Design Library","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"design_library.delete","Parent":null}},{"Resource":{"Name":"Email Activity","FullyQualifiedName":"Email Activity","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"messages.read","Parent":null}},{"Resource":{"Name":"Email Testing","FullyQualifiedName":"Email Testing","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"email_testing.read","Parent":null}},{"Resource":{"Name":"Email Testing","FullyQualifiedName":"Email Testing","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"email_testing.write","Parent":null}},{"Resource":{"Name":"IP Management","FullyQualifiedName":"IP Management","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"ips.pools.ips.read","Parent":null}},{"Resource":{"Name":"Inbound Parse","FullyQualifiedName":"Inbound Parse","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"user.webhooks.parse.settings.create","Parent":null}},{"Resource":{"Name":"Inbound Parse","FullyQualifiedName":"Inbound Parse","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"user.webhooks.parse.settings.read","Parent":null}},{"Resource":{"Name":"Inbound Parse","FullyQualifiedName":"Inbound Parse","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"user.webhooks.parse.settings.update","Parent":null}},{"Resource":{"Name":"Inbound Parse","FullyQualifiedName":"Inbound Parse","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"user.webhooks.parse.settings.delete","Parent":null}},{"Resource":{"Name":"Mail Send","FullyQualifiedName":"Mail Send","Type":"category","Metadata":null,"Parent":{"Name":"Mail Send","FullyQualifiedName":"Mail Send","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail.send","Parent":null}},{"Resource":{"Name":"Address Allow List","FullyQualifiedName":"Address Allow List","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.address_whitelist.create","Parent":null}},{"Resource":{"Name":"Address Allow List","FullyQualifiedName":"Address Allow List","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.address_whitelist.read","Parent":null}},{"Resource":{"Name":"Address Allow List","FullyQualifiedName":"Address Allow List","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.address_whitelist.update","Parent":null}},{"Resource":{"Name":"Address Allow List","FullyQualifiedName":"Address Allow List","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.address_whitelist.delete","Parent":null}},{"Resource":{"Name":"BCC","FullyQualifiedName":"BCC","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.bcc.create","Parent":null}},{"Resource":{"Name":"BCC","FullyQualifiedName":"BCC","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.bcc.read","Parent":null}},{"Resource":{"Name":"BCC","FullyQualifiedName":"BCC","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.bcc.update","Parent":null}},{"Resource":{"Name":"BCC","FullyQualifiedName":"BCC","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.bcc.delete","Parent":null}},{"Resource":{"Name":"Bounce Purge","FullyQualifiedName":"Bounce Purge","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.bounce_purge.create","Parent":null}},{"Resource":{"Name":"Bounce Purge","FullyQualifiedName":"Bounce Purge","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.bounce_purge.read","Parent":null}},{"Resource":{"Name":"Bounce Purge","FullyQualifiedName":"Bounce Purge","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.bounce_purge.update","Parent":null}},{"Resource":{"Name":"Bounce Purge","FullyQualifiedName":"Bounce Purge","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.bounce_purge.delete","Parent":null}},{"Resource":{"Name":"Event Notification","FullyQualifiedName":"Event Notification","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.event.settings.create","Parent":null}},{"Resource":{"Name":"Event Notification","FullyQualifiedName":"Event Notification","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.event.settings.read","Parent":null}},{"Resource":{"Name":"Event Notification","FullyQualifiedName":"Event Notification","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.event.settings.update","Parent":null}},{"Resource":{"Name":"Event Notification","FullyQualifiedName":"Event Notification","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.event.settings.delete","Parent":null}},{"Resource":{"Name":"Event Notification","FullyQualifiedName":"Event Notification","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.event.test.create","Parent":null}},{"Resource":{"Name":"Event Notification","FullyQualifiedName":"Event Notification","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.event.test.read","Parent":null}},{"Resource":{"Name":"Event Notification","FullyQualifiedName":"Event Notification","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.event.test.update","Parent":null}},{"Resource":{"Name":"Event Notification","FullyQualifiedName":"Event Notification","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.event.test.delete","Parent":null}},{"Resource":{"Name":"Footer","FullyQualifiedName":"Footer","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.footer.create","Parent":null}},{"Resource":{"Name":"Footer","FullyQualifiedName":"Footer","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.footer.read","Parent":null}},{"Resource":{"Name":"Footer","FullyQualifiedName":"Footer","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.footer.update","Parent":null}},{"Resource":{"Name":"Footer","FullyQualifiedName":"Footer","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.footer.delete","Parent":null}},{"Resource":{"Name":"Forward Bounce","FullyQualifiedName":"Forward Bounce","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.forward_bounce.create","Parent":null}},{"Resource":{"Name":"Forward Bounce","FullyQualifiedName":"Forward Bounce","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.forward_bounce.read","Parent":null}},{"Resource":{"Name":"Forward Bounce","FullyQualifiedName":"Forward Bounce","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.forward_bounce.update","Parent":null}},{"Resource":{"Name":"Forward Bounce","FullyQualifiedName":"Forward Bounce","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.forward_bounce.delete","Parent":null}},{"Resource":{"Name":"Forward Spam","FullyQualifiedName":"Forward Spam","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.forward_spam.create","Parent":null}},{"Resource":{"Name":"Forward Spam","FullyQualifiedName":"Forward Spam","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.forward_spam.read","Parent":null}},{"Resource":{"Name":"Forward Spam","FullyQualifiedName":"Forward Spam","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.forward_spam.update","Parent":null}},{"Resource":{"Name":"Forward Spam","FullyQualifiedName":"Forward Spam","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.forward_spam.delete","Parent":null}},{"Resource":{"Name":"Legacy Email Template","FullyQualifiedName":"Legacy Email Template","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.template.create","Parent":null}},{"Resource":{"Name":"Legacy Email Template","FullyQualifiedName":"Legacy Email Template","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.template.read","Parent":null}},{"Resource":{"Name":"Legacy Email Template","FullyQualifiedName":"Legacy Email Template","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.template.update","Parent":null}},{"Resource":{"Name":"Legacy Email Template","FullyQualifiedName":"Legacy Email Template","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.template.delete","Parent":null}},{"Resource":{"Name":"Plain Content","FullyQualifiedName":"Plain Content","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.plain_content.create","Parent":null}},{"Resource":{"Name":"Plain Content","FullyQualifiedName":"Plain Content","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.plain_content.read","Parent":null}},{"Resource":{"Name":"Plain Content","FullyQualifiedName":"Plain Content","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.plain_content.update","Parent":null}},{"Resource":{"Name":"Plain Content","FullyQualifiedName":"Plain Content","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.plain_content.delete","Parent":null}},{"Resource":{"Name":"Spam Checker","FullyQualifiedName":"Spam Checker","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.spam_check.create","Parent":null}},{"Resource":{"Name":"Spam Checker","FullyQualifiedName":"Spam Checker","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.spam_check.read","Parent":null}},{"Resource":{"Name":"Spam Checker","FullyQualifiedName":"Spam Checker","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.spam_check.update","Parent":null}},{"Resource":{"Name":"Spam Checker","FullyQualifiedName":"Spam Checker","Type":"category","Metadata":null,"Parent":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mail_settings.spam_check.delete","Parent":null}},{"Resource":{"Name":"Automation","FullyQualifiedName":"Automation","Type":"category","Metadata":null,"Parent":{"Name":"Marketing","FullyQualifiedName":"Marketing","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"marketing.automation.read","Parent":null}},{"Resource":{"Name":"Marketing","FullyQualifiedName":"Marketing","Type":"category","Metadata":null,"Parent":{"Name":"Marketing","FullyQualifiedName":"Marketing","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"marketing.read","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.read","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.new_relic.create","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.new_relic.read","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.new_relic.update","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.new_relic.delete","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.sendwithus.create","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.sendwithus.read","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.sendwithus.update","Parent":null}},{"Resource":{"Name":"Partners","FullyQualifiedName":"Partners","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"partner_settings.sendwithus.delete","Parent":null}},{"Resource":{"Name":"Recipients Data Erasure","FullyQualifiedName":"Recipients Data Erasure","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"recipients.erasejob.create","Parent":null}},{"Resource":{"Name":"Recipients Data Erasure","FullyQualifiedName":"Recipients Data Erasure","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"recipients.erasejob.read","Parent":null}},{"Resource":{"Name":"Security","FullyQualifiedName":"Security","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"access_settings.whitelist.create","Parent":null}},{"Resource":{"Name":"Security","FullyQualifiedName":"Security","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"access_settings.whitelist.read","Parent":null}},{"Resource":{"Name":"Security","FullyQualifiedName":"Security","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"access_settings.whitelist.update","Parent":null}},{"Resource":{"Name":"Security","FullyQualifiedName":"Security","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"access_settings.whitelist.delete","Parent":null}},{"Resource":{"Name":"Security","FullyQualifiedName":"Security","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"access_settings.activity.read","Parent":null}},{"Resource":{"Name":"Sender Authentication","FullyQualifiedName":"Sender Authentication","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"whitelabel.create","Parent":null}},{"Resource":{"Name":"Sender Authentication","FullyQualifiedName":"Sender Authentication","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"whitelabel.read","Parent":null}},{"Resource":{"Name":"Sender Authentication","FullyQualifiedName":"Sender Authentication","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"whitelabel.update","Parent":null}},{"Resource":{"Name":"Sender Authentication","FullyQualifiedName":"Sender Authentication","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"whitelabel.delete","Parent":null}},{"Resource":{"Name":"Browser Stats","FullyQualifiedName":"Browser Stats","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"browsers.stats.read","Parent":null}},{"Resource":{"Name":"Email Clients and Devices","FullyQualifiedName":"Email Clients and Devices","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"devices.stats.read","Parent":null}},{"Resource":{"Name":"Email Clients and Devices","FullyQualifiedName":"Email Clients and Devices","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"clients.stats.read","Parent":null}},{"Resource":{"Name":"Email Clients and Devices","FullyQualifiedName":"Email Clients and Devices","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"clients.phone.stats.read","Parent":null}},{"Resource":{"Name":"Email Clients and Devices","FullyQualifiedName":"Email Clients and Devices","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"clients.tablet.stats.read","Parent":null}},{"Resource":{"Name":"Email Clients and Devices","FullyQualifiedName":"Email Clients and Devices","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"clients.webmail.stats.read","Parent":null}},{"Resource":{"Name":"Email Clients and Devices","FullyQualifiedName":"Email Clients and Devices","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"clients.desktop.stats.read","Parent":null}},{"Resource":{"Name":"Geographical","FullyQualifiedName":"Geographical","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"geo.stats.read","Parent":null}},{"Resource":{"Name":"Global Stats","FullyQualifiedName":"Global Stats","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"stats.global.read","Parent":null}},{"Resource":{"Name":"Mailbox Provider Stats","FullyQualifiedName":"Mailbox Provider Stats","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"mailbox_providers.stats.read","Parent":null}},{"Resource":{"Name":"Parse Webhook","FullyQualifiedName":"Parse Webhook","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.webhooks.parse.stats.read","Parent":null}},{"Resource":{"Name":"Stats Overview","FullyQualifiedName":"Stats Overview","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"stats.read","Parent":null}},{"Resource":{"Name":"Subuser Stats","FullyQualifiedName":"Subuser Stats","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"subusers.stats.read","Parent":null}},{"Resource":{"Name":"Subuser Stats","FullyQualifiedName":"Subuser Stats","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"subusers.stats.sums.read","Parent":null}},{"Resource":{"Name":"Subuser Stats","FullyQualifiedName":"Subuser Stats","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"subusers.stats.monthly.read","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.bounces.create","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.bounces.read","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.bounces.update","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.bounces.delete","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.blocks.create","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.blocks.read","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.blocks.update","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.blocks.delete","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.invalid_emails.create","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.invalid_emails.read","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.invalid_emails.update","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.invalid_emails.delete","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.spam_reports.create","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.spam_reports.read","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.spam_reports.update","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.spam_reports.delete","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.unsubscribes.create","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.unsubscribes.read","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.unsubscribes.update","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.unsubscribes.delete","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.create","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.read","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.update","Parent":null}},{"Resource":{"Name":"Supressions","FullyQualifiedName":"Supressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"suppression.delete","Parent":null}},{"Resource":{"Name":"Unsubscribe Groups","FullyQualifiedName":"Unsubscribe Groups","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.groups.create","Parent":null}},{"Resource":{"Name":"Unsubscribe Groups","FullyQualifiedName":"Unsubscribe Groups","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.groups.read","Parent":null}},{"Resource":{"Name":"Unsubscribe Groups","FullyQualifiedName":"Unsubscribe Groups","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.groups.update","Parent":null}},{"Resource":{"Name":"Unsubscribe Groups","FullyQualifiedName":"Unsubscribe Groups","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.groups.delete","Parent":null}},{"Resource":{"Name":"Unsubscribe Groups","FullyQualifiedName":"Unsubscribe Groups","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.groups.suppressions.create","Parent":null}},{"Resource":{"Name":"Unsubscribe Groups","FullyQualifiedName":"Unsubscribe Groups","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.groups.suppressions.read","Parent":null}},{"Resource":{"Name":"Unsubscribe Groups","FullyQualifiedName":"Unsubscribe Groups","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.groups.suppressions.update","Parent":null}},{"Resource":{"Name":"Unsubscribe Groups","FullyQualifiedName":"Unsubscribe Groups","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.groups.suppressions.delete","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.create","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.read","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.update","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.delete","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.versions.create","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.versions.read","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.versions.update","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.versions.delete","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.versions.activate.create","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.versions.activate.read","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.versions.activate.update","Parent":null}},{"Resource":{"Name":"Template Engine","FullyQualifiedName":"Template Engine","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"templates.versions.activate.delete","Parent":null}},{"Resource":{"Name":"Click Tracking","FullyQualifiedName":"Click Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.click.create","Parent":null}},{"Resource":{"Name":"Click Tracking","FullyQualifiedName":"Click Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.click.read","Parent":null}},{"Resource":{"Name":"Click Tracking","FullyQualifiedName":"Click Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.click.update","Parent":null}},{"Resource":{"Name":"Click Tracking","FullyQualifiedName":"Click Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.click.delete","Parent":null}},{"Resource":{"Name":"Google Analytics","FullyQualifiedName":"Google Analytics","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.google_analytics.create","Parent":null}},{"Resource":{"Name":"Google Analytics","FullyQualifiedName":"Google Analytics","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.google_analytics.read","Parent":null}},{"Resource":{"Name":"Google Analytics","FullyQualifiedName":"Google Analytics","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.google_analytics.update","Parent":null}},{"Resource":{"Name":"Google Analytics","FullyQualifiedName":"Google Analytics","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.google_analytics.delete","Parent":null}},{"Resource":{"Name":"Open Tracking","FullyQualifiedName":"Open Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.open.create","Parent":null}},{"Resource":{"Name":"Open Tracking","FullyQualifiedName":"Open Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.open.read","Parent":null}},{"Resource":{"Name":"Open Tracking","FullyQualifiedName":"Open Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.open.update","Parent":null}},{"Resource":{"Name":"Open Tracking","FullyQualifiedName":"Open Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.open.delete","Parent":null}},{"Resource":{"Name":"Subscription Tracking","FullyQualifiedName":"Subscription Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.subscription.create","Parent":null}},{"Resource":{"Name":"Subscription Tracking","FullyQualifiedName":"Subscription Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.subscription.read","Parent":null}},{"Resource":{"Name":"Subscription Tracking","FullyQualifiedName":"Subscription Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.subscription.update","Parent":null}},{"Resource":{"Name":"Subscription Tracking","FullyQualifiedName":"Subscription Tracking","Type":"category","Metadata":null,"Parent":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"tracking_settings.subscription.delete","Parent":null}},{"Resource":{"Name":"Enforced TLS","FullyQualifiedName":"Enforced TLS","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.settings.enforced_tls.read","Parent":null}},{"Resource":{"Name":"Enforced TLS","FullyQualifiedName":"Enforced TLS","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.settings.enforced_tls.update","Parent":null}},{"Resource":{"Name":"Timezone","FullyQualifiedName":"Timezone","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.timezone.create","Parent":null}},{"Resource":{"Name":"Timezone","FullyQualifiedName":"Timezone","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.timezone.read","Parent":null}},{"Resource":{"Name":"Timezone","FullyQualifiedName":"Timezone","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.timezone.update","Parent":null}},{"Resource":{"Name":"Timezone","FullyQualifiedName":"Timezone","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.timezone.delete","Parent":null}},{"Resource":{"Name":"Global Suppressions","FullyQualifiedName":"Global Suppressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.suppressions.global.create","Parent":null}},{"Resource":{"Name":"Global Suppressions","FullyQualifiedName":"Global Suppressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.suppressions.global.read","Parent":null}},{"Resource":{"Name":"Global Suppressions","FullyQualifiedName":"Global Suppressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.suppressions.global.update","Parent":null}},{"Resource":{"Name":"Global Suppressions","FullyQualifiedName":"Global Suppressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"asm.suppressions.global.delete","Parent":null}},{"Resource":{"Name":"Credentials","FullyQualifiedName":"Credentials","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"credentials.create","Parent":null}},{"Resource":{"Name":"Credentials","FullyQualifiedName":"Credentials","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"credentials.read","Parent":null}},{"Resource":{"Name":"Credentials","FullyQualifiedName":"Credentials","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"credentials.update","Parent":null}},{"Resource":{"Name":"Credentials","FullyQualifiedName":"Credentials","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"credentials.delete","Parent":null}},{"Resource":{"Name":"Mail Settings","FullyQualifiedName":"Mail Settings","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"mail_settings.read","Parent":null}},{"Resource":{"Name":"Signup","FullyQualifiedName":"Signup","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"signup.trigger_confirmation","Parent":null}},{"Resource":{"Name":"Teammates","FullyQualifiedName":"Teammates","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"teammates.create","Parent":null}},{"Resource":{"Name":"Teammates","FullyQualifiedName":"Teammates","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"teammates.read","Parent":null}},{"Resource":{"Name":"Teammates","FullyQualifiedName":"Teammates","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"teammates.update","Parent":null}},{"Resource":{"Name":"Teammates","FullyQualifiedName":"Teammates","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"teammates.delete","Parent":null}},{"Resource":{"Name":"Tracking","FullyQualifiedName":"Tracking","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"tracking_settings.read","Parent":null}},{"Resource":{"Name":"UI","FullyQualifiedName":"UI","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"ui.confirm_email","Parent":null}},{"Resource":{"Name":"UI","FullyQualifiedName":"UI","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"ui.provision","Parent":null}},{"Resource":{"Name":"UI","FullyQualifiedName":"UI","Type":"category","Metadata":null,"Parent":null},"Permission":{"Value":"ui.signup_complete","Parent":null}},{"Resource":{"Name":"Account","FullyQualifiedName":"Account","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.account.read","Parent":null}},{"Resource":{"Name":"Credits","FullyQualifiedName":"Credits","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.credits.read","Parent":null}},{"Resource":{"Name":"Email","FullyQualifiedName":"Email","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.email.create","Parent":null}},{"Resource":{"Name":"Email","FullyQualifiedName":"Email","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.email.read","Parent":null}},{"Resource":{"Name":"Email","FullyQualifiedName":"Email","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.email.update","Parent":null}},{"Resource":{"Name":"Email","FullyQualifiedName":"Email","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.email.delete","Parent":null}},{"Resource":{"Name":"Multifactor Authentication","FullyQualifiedName":"Multifactor Authentication","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.multifactor_authentication.create","Parent":null}},{"Resource":{"Name":"Multifactor Authentication","FullyQualifiedName":"Multifactor Authentication","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.multifactor_authentication.read","Parent":null}},{"Resource":{"Name":"Multifactor Authentication","FullyQualifiedName":"Multifactor Authentication","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.multifactor_authentication.update","Parent":null}},{"Resource":{"Name":"Multifactor Authentication","FullyQualifiedName":"Multifactor Authentication","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.multifactor_authentication.delete","Parent":null}},{"Resource":{"Name":"Password","FullyQualifiedName":"Password","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.password.create","Parent":null}},{"Resource":{"Name":"Password","FullyQualifiedName":"Password","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.password.read","Parent":null}},{"Resource":{"Name":"Password","FullyQualifiedName":"Password","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.password.update","Parent":null}},{"Resource":{"Name":"Password","FullyQualifiedName":"Password","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.password.delete","Parent":null}},{"Resource":{"Name":"Profile","FullyQualifiedName":"Profile","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.profile.create","Parent":null}},{"Resource":{"Name":"Profile","FullyQualifiedName":"Profile","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.profile.read","Parent":null}},{"Resource":{"Name":"Profile","FullyQualifiedName":"Profile","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.profile.update","Parent":null}},{"Resource":{"Name":"Profile","FullyQualifiedName":"Profile","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.profile.delete","Parent":null}},{"Resource":{"Name":"Username","FullyQualifiedName":"Username","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.username.create","Parent":null}},{"Resource":{"Name":"Username","FullyQualifiedName":"Username","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.username.read","Parent":null}},{"Resource":{"Name":"Username","FullyQualifiedName":"Username","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.username.update","Parent":null}},{"Resource":{"Name":"Username","FullyQualifiedName":"Username","Type":"category","Metadata":null,"Parent":{"Name":"User Account","FullyQualifiedName":"User Account","Type":"category","Metadata":null,"Parent":null}},"Permission":{"Value":"user.username.delete","Parent":null}}],"UnboundedResources":[{"Name":"Billing","FullyQualifiedName":"Billing","Type":"category","Metadata":null,"Parent":null},{"Name":"Scheduled Sends","FullyQualifiedName":"Scheduled Sends","Type":"category","Metadata":null,"Parent":{"Name":"Mail Send","FullyQualifiedName":"Mail Send","Type":"category","Metadata":null,"Parent":null}},{"Name":"Category Stats","FullyQualifiedName":"Category Stats","Type":"category","Metadata":null,"Parent":{"Name":"Stats","FullyQualifiedName":"Stats","Type":"category","Metadata":null,"Parent":null}},{"Name":"Unsubscribe Group Suppressions","FullyQualifiedName":"Unsubscribe Group Suppressions","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},{"Name":"Blocks","FullyQualifiedName":"Blocks","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},{"Name":"Bounces","FullyQualifiedName":"Bounces","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},{"Name":"Invalid Emails","FullyQualifiedName":"Invalid Emails","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},{"Name":"Spam Reports","FullyQualifiedName":"Spam Reports","Type":"category", + "Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}},{"Name":"Unsubscribes","FullyQualifiedName":"Unsubscribes","Type":"category","Metadata":null,"Parent":{"Name":"Suppressions","FullyQualifiedName":"Suppressions","Type":"category","Metadata":null,"Parent":null}}],"Metadata":{"2fa_required":true,"key_type":"full access"}}`, + wantErr: false, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + a := Analyzer{Cfg: &config.Config{}} + got, err := a.Analyze(ctx, map[string]string{"key": tt.key}) + if (err != nil) != tt.wantErr { + t.Errorf("Analyzer.Analyze() error = %v, wantErr %v", err, tt.wantErr) + return + } + + // Marshal the actual result to JSON + gotJSON, err := json.Marshal(got) + if err != nil { + t.Fatalf("could not marshal got to JSON: %s", err) + } + + // Parse the expected JSON string + var wantObj analyzers.AnalyzerResult + if err := json.Unmarshal([]byte(tt.want), &wantObj); err != nil { + t.Fatalf("could not unmarshal want JSON string: %s", err) + } + + // Marshal the expected result to JSON (to normalize) + wantJSON, err := json.Marshal(wantObj) + if err != nil { + t.Fatalf("could not marshal want to JSON: %s", err) + } + + // Compare the JSON strings + if string(gotJSON) != string(wantJSON) { + // Pretty-print both JSON strings for easier comparison + var gotIndented, wantIndented []byte + gotIndented, err = json.MarshalIndent(got, "", " ") + if err != nil { + t.Fatalf("could not marshal got to indented JSON: %s", err) + } + wantIndented, err = json.MarshalIndent(wantObj, "", " ") + if err != nil { + t.Fatalf("could not marshal want to indented JSON: %s", err) + } + t.Errorf("Analyzer.Analyze() = %s, want %s", gotIndented, wantIndented) + } + }) + } +} diff --git a/pkg/detectors/sendgrid/sendgrid.go b/pkg/detectors/sendgrid/sendgrid.go index 936004a04..3d09f9e62 100644 --- a/pkg/detectors/sendgrid/sendgrid.go +++ b/pkg/detectors/sendgrid/sendgrid.go @@ -60,6 +60,7 @@ func (s Scanner) FromData(ctx context.Context, verify bool, data []byte) (result s1.Verified = verified s1.ExtraData = extraData s1.SetVerificationError(verificationErr) + s1.AnalysisInfo = map[string]string{"key": token} } results = append(results, s1) diff --git a/pkg/detectors/sendgrid/sendgrid_test.go b/pkg/detectors/sendgrid/sendgrid_test.go index 490636ec2..886f5ffb0 100644 --- a/pkg/detectors/sendgrid/sendgrid_test.go +++ b/pkg/detectors/sendgrid/sendgrid_test.go @@ -126,7 +126,7 @@ func TestSendgrid_FromChunk(t *testing.T) { t.Errorf("Sendgrid.FromData() error = %v, wantErr %v", err, tt.wantErr) return } - ignoreOpts := cmpopts.IgnoreFields(detectors.Result{}, "Raw", "verificationError") + ignoreOpts := cmpopts.IgnoreFields(detectors.Result{}, "Raw", "verificationError", "AnalysisInfo", "ExtraData") if diff := cmp.Diff(got, tt.want, ignoreOpts); diff != "" { t.Errorf("Sendgrid.FromData() %s diff: (-got +want)\n%s", tt.name, diff) }