From c36b2ae191550a0110937f95dda6795a912487f6 Mon Sep 17 00:00:00 2001 From: Yuri Tseretyan Date: Wed, 17 Sep 2025 09:25:56 -0400 Subject: [PATCH] Alerting: v0 schema for integrations (mimir) (#110908) * generate schema for mimir integrations from schema on front-end * review and fix the settings * Update GetAvailableNotifiersV2 to return mimir as v0 * add version argument to GetSecretKeysForContactPointType * update TestGetSecretKeysForContactPointType to include v0 * add type alias field to contain alternate types that different from Grafana's * add support for msteamsv2 * update ConfigForIntegrationType to look for alternate type * update IntegrationConfigFromType to use new result of ConfigForIntegrationType * add reference to parent plugin to NotifierPluginVersion to allow getting plugin type by it's alias * add tests to ensure consistency * make API response stable * add tests against snapshot + omit optional fields --- pkg/api/alerting.go | 6 +- pkg/services/ngalert/models/receivers.go | 18 +- pkg/services/ngalert/models/receivers_test.go | 8 +- .../channels_config/available_channels.go | 96 +- .../available_channels_mimir.go | 1572 ++ .../available_channels_test.go | 240 +- .../notifier/channels_config/plugin.go | 26 +- pkg/services/ngalert/notifier/crypto.go | 2 +- .../ngalert/provisioning/contactpoints.go | 4 +- .../provisioning/contactpoints_test.go | 2 +- .../alerting/api_available_channel_test.go | 64 +- .../alert-notifiers-v2-snapshot.json | 15182 ++++++++++++++++ .../notifications/receivers/receiver_test.go | 2 +- 13 files changed, 17112 insertions(+), 110 deletions(-) create mode 100644 pkg/services/ngalert/notifier/channels_config/available_channels_mimir.go create mode 100644 pkg/tests/api/alerting/test-data/alert-notifiers-v2-snapshot.json diff --git a/pkg/api/alerting.go b/pkg/api/alerting.go index abe0c5bf177..2656ea3e1f0 100644 --- a/pkg/api/alerting.go +++ b/pkg/api/alerting.go @@ -3,6 +3,7 @@ package api import ( "net/http" "slices" + "strings" "github.com/grafana/grafana/pkg/api/response" contextmodel "github.com/grafana/grafana/pkg/services/contexthandler/model" @@ -12,7 +13,10 @@ import ( func (hs *HTTPServer) GetAlertNotifiers() func(*contextmodel.ReqContext) response.Response { return func(r *contextmodel.ReqContext) response.Response { if r.Query("version") == "2" { - return response.JSON(http.StatusOK, slices.Collect(channels_config.GetAvailableNotifiersV2())) + v2 := slices.SortedFunc(channels_config.GetAvailableNotifiersV2(), func(a, b *channels_config.VersionedNotifierPlugin) int { + return strings.Compare(a.Type, b.Type) + }) + return response.JSON(http.StatusOK, v2) } return response.JSON(http.StatusOK, channels_config.GetAvailableNotifiers()) } diff --git a/pkg/services/ngalert/models/receivers.go b/pkg/services/ngalert/models/receivers.go index 5f56f7a137a..8d942975b5e 100644 --- a/pkg/services/ngalert/models/receivers.go +++ b/pkg/services/ngalert/models/receivers.go @@ -228,23 +228,21 @@ func (f IntegrationFieldPath) With(segment string) IntegrationFieldPath { // IntegrationConfig - The integration configuration // error - Error if integration type not found or invalid version specified func IntegrationConfigFromType(integrationType string, version *string) (IntegrationConfig, error) { - config, err := channels_config.ConfigForIntegrationType(integrationType) + versionConfig, err := channels_config.ConfigForIntegrationType(integrationType) if err != nil { return IntegrationConfig{}, err } - var versionConfig channels_config.NotifierPluginVersion - if version == nil { - versionConfig = config.GetCurrentVersion() - } else { - var ok bool - versionConfig, ok = config.GetVersion(*version) - if !ok { + // if particular version is requested and the version returned does not match, try to get the correct version + if version != nil && *version != string(versionConfig.Version) { + exists := false + versionConfig, exists = versionConfig.Plugin.GetVersion(channels_config.NotifierVersion(*version)) + if !exists { return IntegrationConfig{}, fmt.Errorf("version %s not found in config", *version) } } integrationConfig := IntegrationConfig{ - Type: config.Type, - Version: versionConfig.Version, + Type: versionConfig.Plugin.Type, + Version: string(versionConfig.Version), Fields: make(map[string]IntegrationField, len(versionConfig.Options)), } for _, option := range versionConfig.Options { diff --git a/pkg/services/ngalert/models/receivers_test.go b/pkg/services/ngalert/models/receivers_test.go index 4f5ae6cc90b..3b691953edd 100644 --- a/pkg/services/ngalert/models/receivers_test.go +++ b/pkg/services/ngalert/models/receivers_test.go @@ -46,7 +46,7 @@ func TestReceiver_EncryptDecrypt(t *testing.T) { decrypedIntegration := IntegrationGen(IntegrationMuts.WithValidConfig(integrationType))() encrypted := decrypedIntegration.Clone() - secrets, err := channels_config.GetSecretKeysForContactPointType(integrationType) + secrets, err := channels_config.GetSecretKeysForContactPointType(integrationType, channels_config.V1) assert.NoError(t, err) for _, key := range secrets { val, ok, err := extractField(encrypted.Settings, NewIntegrationFieldPath(key)) @@ -82,7 +82,7 @@ func TestIntegration_Redact(t *testing.T) { validIntegration := IntegrationGen(IntegrationMuts.WithValidConfig(integrationType))() expected := validIntegration.Clone() - secrets, err := channels_config.GetSecretKeysForContactPointType(integrationType) + secrets, err := channels_config.GetSecretKeysForContactPointType(integrationType, channels_config.V1) assert.NoError(t, err) for _, key := range secrets { err := setField(expected.Settings, NewIntegrationFieldPath(key), func(current any) any { @@ -247,12 +247,12 @@ func TestSecretsIntegrationConfig(t *testing.T) { assert.NoError(t, err) t.Run("v1 is current", func(t *testing.T) { - configv1, err := IntegrationConfigFromType(integrationType, util.Pointer("v1")) + configv1, err := IntegrationConfigFromType(integrationType, util.Pointer(string(channels_config.V1))) assert.NoError(t, err) assert.Equal(t, config, configv1) }) - secrets, err := channels_config.GetSecretKeysForContactPointType(integrationType) + secrets, err := channels_config.GetSecretKeysForContactPointType(integrationType, channels_config.V1) assert.NoError(t, err) allSecrets := make(map[string]struct{}, len(secrets)) for _, key := range secrets { diff --git a/pkg/services/ngalert/notifier/channels_config/available_channels.go b/pkg/services/ngalert/notifier/channels_config/available_channels.go index 6e7182e1f10..d16efb0348a 100644 --- a/pkg/services/ngalert/notifier/channels_config/available_channels.go +++ b/pkg/services/ngalert/notifier/channels_config/available_channels.go @@ -4,7 +4,6 @@ import ( "fmt" "iter" "maps" - "os" "strings" "github.com/grafana/alerting/receivers/jira" @@ -14,10 +13,20 @@ import ( alertingTemplates "github.com/grafana/alerting/templates" ) +type NotifierVersion string + +const ( + // versions that contain the "mimir" tag in their name are dedicated to integrations supported by Mimir. + // By default, all mimir integrations should use the V0mimir1 version. + // Exceptions are Mimir integrations that have multiple configurations for the same Grafana type. + + V0mimir1 NotifierVersion = "v0mimir1" + V0mimir2 NotifierVersion = "v0mimir2" + V1 NotifierVersion = "v1" +) + // GetAvailableNotifiers returns the metadata of all the notification channels that can be configured. func GetAvailableNotifiers() []*NotifierPlugin { - hostname, _ := os.Hostname() - pushoverSoundOptions := []SelectOption{ { Value: "default", @@ -500,7 +509,7 @@ func GetAvailableNotifiers() []*NotifierPlugin { Description: "The unique location of the affected system, preferably a hostname or FQDN. You can use templates", Element: ElementTypeInput, InputType: InputTypeText, - Placeholder: hostname, + Placeholder: "grafana.local", PropertyName: "source", }, { // New in 9.4. @@ -2055,14 +2064,23 @@ func GetAvailableNotifiers() []*NotifierPlugin { } // GetSecretKeysForContactPointType returns settings keys of contact point of the given type that are expected to be secrets. Returns error is contact point type is not known. -func GetSecretKeysForContactPointType(contactPointType string) ([]string, error) { - notifiers := GetAvailableNotifiers() +func GetSecretKeysForContactPointType(contactPointType string, version NotifierVersion) ([]string, error) { + var notifiers []*NotifierPlugin + if version == V1 { + notifiers = GetAvailableNotifiers() + } + if version == V0mimir1 { + notifiers = getAvailableV0mimir1Notifiers() + } + if version == V0mimir2 { + notifiers = getAvailableV0mimir2Notifiers() + } for _, n := range notifiers { if strings.EqualFold(n.Type, contactPointType) { return getSecretFields("", n.Options), nil } } - return nil, fmt.Errorf("no secrets configured for type '%s'", contactPointType) + return nil, fmt.Errorf("no secrets configured for type '%s' of version %s", contactPointType, version) } func getSecretFields(parentPath string, options []NotifierOption) []string { @@ -2084,37 +2102,53 @@ func getSecretFields(parentPath string, options []NotifierOption) []string { } // ConfigForIntegrationType returns the config for the given integration type. Returns error is integration type is not known. -func ConfigForIntegrationType(contactPointType string) (VersionedNotifierPlugin, error) { +func ConfigForIntegrationType(contactPointTypeOrAlternateType string) (NotifierPluginVersion, error) { notifiers := GetAvailableNotifiersV2() for n := range notifiers { - if strings.EqualFold(n.Type, contactPointType) { - return n, nil + if strings.EqualFold(n.Type, contactPointTypeOrAlternateType) { + return n.GetCurrentVersion(), nil + } + for _, version := range n.Versions { + if version.TypeAlias == "" { + continue + } + if strings.EqualFold(version.TypeAlias, contactPointTypeOrAlternateType) { + return version, nil + } } } - return VersionedNotifierPlugin{}, fmt.Errorf("unknown integration type '%s'", contactPointType) + return NotifierPluginVersion{}, fmt.Errorf("unknown integration type '%s'", contactPointTypeOrAlternateType) } -func GetAvailableNotifiersV2() iter.Seq[VersionedNotifierPlugin] { - v1 := GetAvailableNotifiers() - m := make(map[string]VersionedNotifierPlugin, len(v1)) - for _, n := range v1 { - pl := VersionedNotifierPlugin{ - Type: n.Type, - Name: n.Name, - Description: n.Description, - Heading: n.Heading, - Info: n.Info, - CurrentVersion: "v1", - Versions: []NotifierPluginVersion{ - { - Version: "v1", - CanCreate: true, - Options: n.Options, - Info: "", - }, - }, +func GetAvailableNotifiersV2() iter.Seq[*VersionedNotifierPlugin] { + m := make(map[string]*VersionedNotifierPlugin, 24) // we support 24 notifier types + add := func(n []*NotifierPlugin, version NotifierVersion) { + for _, n := range n { + pl, ok := m[n.Type] + if !ok { + pl = &VersionedNotifierPlugin{ + Type: n.Type, + Name: n.Name, + Description: n.Description, + Heading: n.Heading, + Info: n.Info, + CurrentVersion: version, + Versions: make([]NotifierPluginVersion, 0, 2), // usually, there are 2 versions per type + } + m[n.Type] = pl + } + pl.Versions = append(pl.Versions, NotifierPluginVersion{ + Version: version, + // we allow users to create only v1 notifiers + CanCreate: version == V1, + Options: n.Options, + TypeAlias: n.TypeAlias, + Plugin: pl, + }) } - m[n.Type] = pl } + add(GetAvailableNotifiers(), V1) + add(getAvailableV0mimir2Notifiers(), V0mimir2) + add(getAvailableV0mimir1Notifiers(), V0mimir1) return maps.Values(m) } diff --git a/pkg/services/ngalert/notifier/channels_config/available_channels_mimir.go b/pkg/services/ngalert/notifier/channels_config/available_channels_mimir.go new file mode 100644 index 00000000000..e8c89659f57 --- /dev/null +++ b/pkg/services/ngalert/notifier/channels_config/available_channels_mimir.go @@ -0,0 +1,1572 @@ +package channels_config + +import ( + promCfg "github.com/prometheus/alertmanager/config" +) + +func getAvailableV0mimir1Notifiers() []*NotifierPlugin { + return []*NotifierPlugin{ + getDiscordMimirNotifier(), + getEmailMimirNotifier(), + getPagerDutyMimirNotifier(), + getSlackMimirNotifier(), + getWebhookMimirNotifier(), + getOpsGenieMimirNotifier(), + getWeChatMimirNotifier(), + getPushoverMimirNotifier(), + getVictorOpsMimirNotifier(), + getAmazonSNSMimirNotifier(), + getTelegramMimirNotifier(), + getWebexMimirNotifier(), + getMicrosoftTeamsMimirNotifier(), + getJiraMimirNotifier(), + } +} + +func getAvailableV0mimir2Notifiers() []*NotifierPlugin { + return []*NotifierPlugin{ + getMicrosoftTeamsV2MimirNotifier(), + } +} + +func getDiscordMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "discord", + Name: "Discord", + Description: "Sends notifications to Discord", + Heading: "Discord settings", + Options: []NotifierOption{ + { + Label: "Webhook URL", + Placeholder: "Discord webhook URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "webhook_url", + Required: true, + Secure: true, + }, + { + Label: "Title", + Description: "Templated title of the message", + Placeholder: promCfg.DefaultDiscordConfig.Title, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "title", + }, + { + Label: "Message Content", + Description: "Mention a group using @ or a user using <@ID> when notifying in a channel", + Placeholder: promCfg.DefaultDiscordConfig.Message, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "message", + }, + v0HttpConfigOption(), + }, + } +} + +func getEmailMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "email", + Name: "Email", + Description: "Send notification over SMTP", + Heading: "Email settings", + Info: "This integration does not use Grafana template", + Options: []NotifierOption{ + { + Label: "To", + Description: "The email address to send notifications to. You can enter multiple addresses using a \",\" separator. You can use templates to customize this field.", + Element: ElementTypeTextArea, + PropertyName: "to", + Required: true, + }, + { + Label: "From", + Description: "The sender address.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "from", + }, + { + Label: "SMTP host", + Description: "The SMTP host and port through which emails are sent.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "smarthost", + }, + { + Label: "Hello", + Description: "The hostname to identify to the SMTP server.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "hello", + }, + { + Label: "Username", + Description: "SMTP authentication information", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "auth_username", + }, + { + Label: "Password", + Description: "SMTP authentication information", + Element: ElementTypeInput, + InputType: InputTypePassword, + PropertyName: "auth_password", + Secure: true, + }, + { + Label: "Secret", + Description: "SMTP authentication information", + Element: ElementTypeInput, + InputType: InputTypePassword, + PropertyName: "auth_secret", + Secure: true, + }, + { + Label: "Identity", + Description: "SMTP authentication information", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "auth_identity", + }, + { + Label: "Require TLS", + Description: "The SMTP TLS requirement", + Element: ElementTypeCheckbox, + PropertyName: "require_tls", + }, + { + Label: "Email HTML body", + Description: "The HTML body of the email notification.", + Placeholder: promCfg.DefaultEmailConfig.HTML, + Element: ElementTypeTextArea, + PropertyName: "html", + }, + { + Label: "Email text body", + Description: "The text body of the email notification.", + Placeholder: promCfg.DefaultEmailConfig.Text, + Element: ElementTypeTextArea, + PropertyName: "text", + }, + { + Label: "Headers", + Description: "Further headers email header key/value pairs. Overrides any headers previously set by the notification implementation.", + Element: ElementTypeKeyValueMap, + PropertyName: "headers", + }, + v0TLSConfigOption("tls_config"), + }, + } +} + +func getPagerDutyMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "pagerduty", + Name: "PagerDuty", + Description: "Send notifications to PagerDuty", + Heading: "PagerDuty settings", + Info: "", + Options: []NotifierOption{ + { + Label: "URL", + Description: "The URL to send API requests to", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "url", + Required: true, + }, + { + Label: "Routing key", + Description: "The PagerDuty integration key (when using PagerDuty integration type `Events API v2`)", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "routing_key", + Secure: true, + Required: true, + }, + { + Label: "Service key", + Description: "The PagerDuty integration key (when using PagerDuty integration type `Prometheus`).", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "service_key", + Secure: true, + Required: true, + }, + { + Label: "Client", + Description: "The client identification of the Alertmanager.", + Placeholder: promCfg.DefaultPagerdutyConfig.Client, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "client", + }, + { + Label: "Client URL", + Description: "A backlink to the sender of the notification.", + Placeholder: promCfg.DefaultPagerdutyConfig.ClientURL, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "client_url", + }, + { + Label: "Description", + Description: "A description of the incident.", + Placeholder: promCfg.DefaultPagerdutyConfig.Description, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "description", + }, + { + Label: "Details", + Description: "A set of arbitrary key/value pairs that provide further detail about the incident.", + Element: ElementTypeKeyValueMap, + PropertyName: "details", + }, + { + Label: "Images", + Description: "Images to attach to the incident.", + Element: ElementSubformArray, + PropertyName: "images", + SubformOptions: []NotifierOption{ + { + Label: "URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "href", + }, + { + Label: "Source", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "source", + }, + { + Label: "Alt", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "alt", + }, + }, + }, + { + Label: "Links", + Description: "Links to attach to the incident.", + Element: ElementSubformArray, + PropertyName: "links", + SubformOptions: []NotifierOption{ + { + Label: "URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "href", + }, + { + Label: "Text", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "text", + }, + }, + }, + { + Label: "Source", + Description: "Unique location of the affected system.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "source", + }, + { + Label: "Severity", + Description: "Severity of the incident.", + Placeholder: "error", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "severity", + }, + { + Label: "Class", + Description: "The class/type of the event.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "class", + }, + { + Label: "Component", + Description: "The part or component of the affected system that is broken.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "component", + }, + { + Label: "Group", + Description: "A cluster or grouping of sources.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "group", + }, + v0HttpConfigOption(), + }, + } +} + +func getSlackMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "slack", + Name: "Slack", + Description: "Send notifications to Slack", + Heading: "Slack settings", + Info: "", + Options: []NotifierOption{ + { + Label: "Webhook URL", + Description: "The Slack webhook URL.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_url", + Secure: true, + Required: true, + }, + { + Label: "Channel", + Description: "The #channel or @user to send notifications to.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "channel", + }, + { + Label: "Username", + Placeholder: promCfg.DefaultSlackConfig.Username, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "username", + }, + { + Label: "Emoji icon", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "icon_emoji", + }, + { + Label: "Icon URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "icon_url", + }, + { + Label: "Names link", + Element: ElementTypeCheckbox, + PropertyName: "link_names", + }, + { + Label: "Callback ID", + Placeholder: promCfg.DefaultSlackConfig.CallbackID, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "callback_id", + }, + { + Label: "Color", + Placeholder: promCfg.DefaultSlackConfig.Color, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "color", + }, + { + Label: "Fallback", + Placeholder: promCfg.DefaultSlackConfig.Fallback, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "fallback", + }, + { + Label: "Footer", + Placeholder: promCfg.DefaultSlackConfig.Footer, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "footer", + }, + { + Label: "Markdown Fields", + Description: "An array of field names that should be formatted by markdown syntax.", + Element: ElementStringArray, + PropertyName: "mrkdwn_in", + }, + { + Label: "Pre-text", + Placeholder: promCfg.DefaultSlackConfig.Pretext, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "pretext", + }, + { + Label: "Short Fields", + Element: ElementTypeCheckbox, + PropertyName: "short_fields", + }, + { + Label: "Message body", + Placeholder: promCfg.DefaultSlackConfig.Text, + Element: ElementTypeTextArea, + PropertyName: "text", + }, + { + Label: "Title", + Placeholder: promCfg.DefaultSlackConfig.Title, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "title", + }, + { + Label: "Title Link", + Placeholder: promCfg.DefaultSlackConfig.TitleLink, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "title_link", + }, + { + Label: "Image URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "image_url", + }, + { + Label: "Thumbnail URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "thumb_url", + }, + { + Label: "Actions", + Element: ElementSubformArray, + PropertyName: "actions", + SubformOptions: []NotifierOption{ + { + Label: "Text", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "text", + Required: true, + }, + { + Label: "Type", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "type", + Required: true, + }, + { + Label: "URL", + Description: "Either url or name and value are mandatory.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "url", + }, + { + Label: "Name", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "name", + }, + { + Label: "Value", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "value", + }, + { + Label: "Confirm", + Element: ElementTypeSubform, + PropertyName: "confirm", + SubformOptions: []NotifierOption{ + { + Label: "Text", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "text", + Required: true, + }, + { + Label: "Dismiss text", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "dismiss_text", + }, + { + Label: "OK text", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "ok_text", + }, + { + Label: "Title", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "title", + }, + }, + }, + { + Label: "Style", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "style", + }, + }, + }, + { + Label: "Fields", + Element: ElementSubformArray, + PropertyName: "fields", + SubformOptions: []NotifierOption{ + { + Label: "Title", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "title", + Required: true, + }, + { + Label: "Value", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "value", + Required: true, + }, + { + Label: "Short", + Element: ElementTypeCheckbox, + PropertyName: "short", + }, + }, + }, + v0HttpConfigOption(), + }, + } +} + +func getWebhookMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "webhook", + Name: "Webhook", + Description: "Send notifications to a webhook", + Heading: "Webhook settings", + Info: "", + Options: []NotifierOption{ + { + Label: "URL", + Description: "The endpoint to send HTTP POST requests to.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "url", + Secure: true, + Required: true, + }, + { + Label: "Max alerts", + Description: "The maximum number of alerts to include in a single webhook message. Alerts above this threshold are truncated. When leaving this at its default value of 0, all alerts are included.", + Element: ElementTypeInput, + InputType: "number", + PropertyName: "max_alerts", + ValidationRule: "(^\\d+$|^$)", + }, + { + Label: "Timeout", + Description: "The maximum time to wait for a webhook request to complete, before failing the request and allowing it to be retried. The default value of 0s indicates that no timeout should be applied. NOTE: This will have no effect if set higher than the group_interval.", + Placeholder: "Use duration format, for example: 1.2s, 100ms", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "timeout", + }, + v0HttpConfigOption(), + }, + } +} + +func getOpsGenieMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "opsgenie", + Name: "OpsGenie", + Description: "Send notifications to OpsGenie", + Heading: "OpsGenie settings", + Info: "", + Options: []NotifierOption{ + { + Label: "API key", + Description: "The API key to use when talking to the OpsGenie API.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_key", + Secure: true, + Required: true, + }, + { + Label: "API URL", + Description: "The host to send OpsGenie API requests to.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_url", + Required: true, + }, + { + Label: "Message", + Description: "Alert text limited to 130 characters.", + Placeholder: promCfg.DefaultOpsGenieConfig.Message, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "message", + }, + { + Label: "Description", + Description: "A description of the incident.", + Placeholder: promCfg.DefaultOpsGenieConfig.Description, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "description", + }, + { + Label: "Source", + Description: "A backlink to the sender of the notification.", + Placeholder: promCfg.DefaultOpsGenieConfig.Source, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "source", + }, + { + Label: "Details", + Description: "A set of arbitrary key/value pairs that provide further detail about the incident.", + Element: ElementTypeKeyValueMap, + PropertyName: "details", + }, + { + Label: "Entity", + Description: "Optional field that can be used to specify which domain alert is related to.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "entity", + }, + { + Label: "Actions", + Description: "Comma separated list of actions that will be available for the alert.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "actions", + }, + { + Label: "Tags", + Description: "Comma separated list of tags attached to the notifications.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "tags", + }, + { + Label: "Note", + Description: "Additional alert note.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "note", + }, + { + Label: "Priority", + Description: "Priority level of alert. Possible values are P1, P2, P3, P4, and P5.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "priority", + }, + { + Label: "Update Alerts", + Description: "Whether to update message and description of the alert in OpsGenie if it already exists. By default, the alert is never updated in OpsGenie, the new message only appears in activity log.", + Element: ElementTypeCheckbox, + PropertyName: "update_alerts", + }, + { + Label: "Responders", + Description: "List of responders responsible for notifications.", + Element: ElementSubformArray, + PropertyName: "responders", + SubformOptions: []NotifierOption{ + { + Label: "Type", + Description: "\"team\", \"user\", \"escalation\" or schedule\".", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "type", + }, + { + Label: "ID", + Description: "Exactly one of these fields should be defined.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "id", + }, + { + Label: "Name", + Description: "Exactly one of these fields should be defined.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "name", + }, + { + Label: "Username", + Description: "Exactly one of these fields should be defined.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "username", + }, + }, + }, + v0HttpConfigOption(), + }, + } +} + +func getWeChatMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "wechat", + Name: "WeChat", + Description: "Sends notifications to WeChat", + Heading: "WeChat settings", + Options: []NotifierOption{ + { + Label: "API URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_url", + }, + { + Label: "API Secret", + Description: "The API key to use when talking to the WeChat API", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_secret", + Secure: true, + }, + { + Label: "Corp ID", + Description: "The corp id for authentication", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "corp_id", + }, + { + Label: "Message", + Description: "API request data as defined by the WeChat API", + Placeholder: promCfg.DefaultWechatConfig.Message, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "message", + }, + { + Label: "Message type", + Description: "Type of the message type", + Element: ElementTypeSelect, + PropertyName: "message_type", + Placeholder: "text", + SelectOptions: []SelectOption{ + {Value: "text", Label: "Text"}, + {Value: "markdown", Label: "Markdown"}, + }, + }, + { + Label: "Agent ID", + Placeholder: promCfg.DefaultWechatConfig.AgentID, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "agent_id", + }, + { + Label: "To User", + Placeholder: promCfg.DefaultWechatConfig.ToUser, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "to_user", + }, + { + Label: "To Party", + Placeholder: promCfg.DefaultWechatConfig.ToParty, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "to_party", + }, + { + Label: "To Tag", + Placeholder: promCfg.DefaultWechatConfig.ToTag, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "to_tag", + }, + v0HttpConfigOption(), + }, + } +} + +func getPushoverMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "pushover", + Name: "Pushover", + Description: "Send notifications to Pushover", + Heading: "Pushover settings", + Info: "", + Options: []NotifierOption{ + { + Label: "User key", + Description: "The recipient user’s user key.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "user_key", + Required: true, + Secure: true, + }, + { + Label: "Token", + Description: "Your registered application’s API token, see https://pushover.net/app", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "token", + Required: true, + Secure: true, + }, + { + Label: "Title", + Description: "Notification title.", + Placeholder: promCfg.DefaultPushoverConfig.Title, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "title", + }, + { + Label: "Message", + Description: "Notification message.", + Placeholder: promCfg.DefaultPushoverConfig.Message, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "message", + }, + { + Label: "URL", + Description: "A supplementary URL shown alongside the message.", + Placeholder: promCfg.DefaultPushoverConfig.URL, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "url", + }, + { + Label: "URL Title", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "url_title", + }, + { + Label: "Device", + Description: "Optional device to send notification to, see https://pushover.net/api#device", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "device", + }, + { + Label: "Sound", + Description: "Optional sound to use for notification, see https://pushover.net/api#sound", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "sound", + }, + { + Label: "Priority", + Description: "Priority, see https://pushover.net/api#priority", + Placeholder: promCfg.DefaultPushoverConfig.Priority, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "priority", + }, + { + Label: "Retry", + Description: "How often the Pushover servers will send the same notification to the user. Must be at least 30 seconds.", + Placeholder: "1m", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "retry", + }, + { + Label: "Expire", + Description: "How long your notification will continue to be retried for, unless the user acknowledges the notification.", + Placeholder: "1h", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "expire", + }, + { + Label: "TTL", + Description: "The number of seconds before a message expires and is deleted automatically. Examples: 10s, 5m30s, 8h.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "ttl", + }, + { + Label: "HTML", + Description: "Enables HTML formatting of the message.", + Element: ElementTypeCheckbox, + PropertyName: "html", + }, + v0HttpConfigOption(), + }, + } +} + +func getVictorOpsMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "victorops", + Name: "VictorOps", + Description: "Send notifications to VictorOps", + Heading: "VictorOps settings", + Info: "", + Options: []NotifierOption{ + { + Label: "API key", + Description: "The API key to use when talking to the VictorOps API.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_key", + Secure: true, + }, + { + Label: "API URL", + Description: "The VictorOps API URL.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_url", + }, + { + Label: "Routing key", + Description: "A key used to map the alert to a team.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "routing_key", + Required: true, + }, + { + Label: "Message type", + Description: "Describes the behavior of the alert (CRITICAL, WARNING, INFO).", + Placeholder: promCfg.DefaultVictorOpsConfig.MessageType, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "message_type", + }, + { + Label: "Entity display name", + Description: "Contains summary of the alerted problem.", + Placeholder: promCfg.DefaultVictorOpsConfig.EntityDisplayName, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "entity_display_name", + }, + { + Label: "State message", + Description: "Contains long explanation of the alerted problem.", + Placeholder: promCfg.DefaultVictorOpsConfig.StateMessage, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "state_message", + }, + { + Label: "Monitoring tool", + Description: "The monitoring tool the state message is from.", + Placeholder: promCfg.DefaultVictorOpsConfig.MonitoringTool, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "monitoring_tool", + }, + { + Label: "Custom Fields", + Description: "A set of arbitrary key/value pairs that provide further detail about the alert.", + Element: ElementTypeKeyValueMap, + PropertyName: "custom_fields", + }, + v0HttpConfigOption(), + }, + } +} + +func getAmazonSNSMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "sns", + Name: "Amazon SNS", + Description: "Sends notifications to Amazon SNS", + Heading: "Amazon SNS settings", + Info: "", + Options: []NotifierOption{ + { + Label: "API URL", + Description: "The Amazon SNS API URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_url", + }, + { + Label: "SigV4 authentication", + Description: "Configures AWS's Signature Verification 4 signing process to sign requests", + Element: ElementTypeSubform, + PropertyName: "sigv4", + SubformOptions: []NotifierOption{ + { + Label: "Region", + Description: "The AWS region. If blank, the region from the default credentials chain is used", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "Region", + }, + { + Label: "Access key", + Description: "The AWS API access_key. If blank the environment variable \"AWS_ACCESS_KEY_ID\" is used", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "AccessKey", + Secure: false, + }, + { + Label: "Secret key", + Description: "The AWS API secret_key. If blank the environment variable \"AWS_ACCESS_SECRET_ID\" is used", + Element: ElementTypeInput, + InputType: InputTypePassword, + PropertyName: "SecretKey", + Secure: true, + }, + { + Label: "Profile", + Description: "Named AWS profile used to authenticate", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "Profile", + }, + { + Label: "Role ARN", + Description: "AWS Role ARN, an alternative to using AWS API keys", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "RoleARN", + }, + }, + }, + { + Label: "SNS topic ARN", + Description: "If you don't specify this value, you must specify a value for the phone_number or target_arn. If you are using a FIFO SNS topic you should set a message group interval longer than 5 minutes to prevent messages with the same group key being deduplicated by the SNS default deduplication window", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "topic_arn", + }, + { + Label: "Phone number", + Description: "Phone number if message is delivered via SMS in E.164 format. If you don't specify this value, you must specify a value for the topic_arn or target_arn", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "phone_number", + }, + { + Label: "Target ARN", + Description: "The mobile platform endpoint ARN if message is delivered via mobile notifications. If you don't specify this value, you must specify a value for the topic_arn or phone_number", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "target_arn", + }, + { + Label: "Subject", + Description: "Subject line when the message is delivered", + Placeholder: promCfg.DefaultSNSConfig.Subject, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "subject", + }, + { + Label: "Message", + Description: "The message content of the SNS notification", + Placeholder: promCfg.DefaultSNSConfig.Message, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "message", + }, + { + Label: "Attributes", + Description: "SNS message attributes", + Element: ElementTypeKeyValueMap, + PropertyName: "attributes", + }, + v0HttpConfigOption(), + }, + } +} + +func getTelegramMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "telegram", + Name: "Telegram", + Description: "Sends notifications to Telegram", + Heading: "Telegram settings", + Options: []NotifierOption{ + { + Label: "API URL", + Description: "The Telegram API URL", + Placeholder: "https://api.telegram.org", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_url", + }, + { + Label: "Bot token", + Description: "Telegram bot token", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "token", + Required: true, + Secure: true, + }, + { + Label: "Chat ID", + Description: "ID of the chat where to send the messages", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "chat_id", + Required: true, + }, + { + Label: "Message", + Description: "Message template", + Placeholder: promCfg.DefaultTelegramConfig.Message, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "message", + }, + { + Label: "Disable notifications", + Description: "Disable telegram notifications", + Element: ElementTypeCheckbox, + PropertyName: "disable_notifications", + }, + { + Label: "Parse mode", + Description: "Parse mode for telegram message", + Element: ElementTypeSelect, + PropertyName: "parse_mode", + SelectOptions: []SelectOption{ + {Value: "", Label: "None"}, + {Value: "MarkdownV2", Label: "MarkdownV2"}, + {Value: "Markdown", Label: "Markdown"}, + {Value: "HTML", Label: "HTML"}, + }, + }, + v0HttpConfigOption(), + }, + } +} + +func getWebexMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "webex", + Name: "Cisco Webex Teams", + Description: "Sends notifications to Cisco Webex Teams", + Heading: "Cisco Webex Teams settings", + Info: "", + Options: []NotifierOption{ + { + Label: "API URL", + Description: "The Webex Teams API URL", + Placeholder: "https://webexapis.com/v1/messages", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_url", + }, + { + Label: "Room ID", + Description: "ID of the Webex Teams room where to send the messages", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "room_id", + Required: true, + }, + { + Label: "Message", + Description: "Message template", + Placeholder: promCfg.DefaultWebexConfig.Message, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "message", + }, + v0HttpConfigOption(), + }, + } +} + +func getMicrosoftTeamsMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "teams", + TypeAlias: "msteams", + Name: "Microsoft Teams", + Description: "Sends notifications to Microsoft Teams", + Heading: "Microsoft Teams settings", + Options: []NotifierOption{ + { + Label: "Webhook URL", + Description: "The incoming webhook URL.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "webhook_url", + Secure: true, + Required: true, + }, + { + Label: "Title", + Description: "Message title template.", + Placeholder: promCfg.DefaultMSTeamsConfig.Title, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "title", + }, + { + Label: "Summary", + Description: "Message summary template.", + Placeholder: promCfg.DefaultMSTeamsConfig.Summary, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "summary", + }, + { + Label: "Text", + Description: "Message body template.", + Placeholder: promCfg.DefaultMSTeamsConfig.Text, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "text", + }, + v0HttpConfigOption(), + }, + } +} + +func getMicrosoftTeamsV2MimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "teams", + TypeAlias: "msteamsv2", + Name: "Microsoft Teams", + Description: "Sends notifications to Microsoft Teams using new format of adaptive cards", + Heading: "Microsoft Teams settings", + Options: []NotifierOption{ + { + Label: "Webhook URL", + Description: "The incoming webhook URL.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "webhook_url", + Secure: true, + Required: true, + }, + { + Label: "Title", + Description: "Message title template.", + Placeholder: promCfg.DefaultMSTeamsV2Config.Title, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "title", + }, + { + Label: "Text", + Description: "Message body template.", + Placeholder: promCfg.DefaultMSTeamsConfig.Text, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "text", + }, + v0HttpConfigOption(), + }, + } +} + +func getJiraMimirNotifier() *NotifierPlugin { + return &NotifierPlugin{ + Type: "jira", + Name: "Jira", + Description: "Send notifications to Jira Service Management", + Heading: "Jira settings", + Options: []NotifierOption{ + { + Label: "API URL", + Description: "The host to send Jira API requests to", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "api_url", + Required: true, + }, + { + Label: "Project Key", + Description: "The project key where issues are created", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "project", + Required: true, + }, + { + Label: "Issue Type", + Description: "Type of the issue (e.g. Bug)", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "issue_type", + Required: true, + }, + { + Label: "Summary", + Description: "Issue summary template", + Placeholder: promCfg.DefaultJiraConfig.Summary, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "summary", + }, + { + Label: "Description", + Description: "Issue description template", + Placeholder: promCfg.DefaultJiraConfig.Description, + Element: ElementTypeTextArea, + PropertyName: "description", + }, + { + Label: "Labels", + Description: " Labels to be added to the issue", + Element: ElementStringArray, + PropertyName: "labels", + }, + { + Label: "Priority", + Description: "Priority of the issue", + Placeholder: promCfg.DefaultJiraConfig.Priority, + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "priority", + }, + { + Label: "Reopen transition", + Description: "Name of the workflow transition to reopen an issue. The target status should not have the category \"done\"", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "reopen_transition", + }, + { + Label: "Resolve transition", + Description: "Name of the workflow transition to resolve an issue. The target status must have the category \"done\"", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "resolve_transition", + }, + { + Label: "Won't fix resolution", + Description: "If \"Reopen transition\" is defined, ignore issues with that resolution", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "wont_fix_resolution", + }, + { + Label: "Reopen duration", + Description: "If \"Reopen transition\" is defined, reopen the issue when it is not older than this value (rounded down to the nearest minute)", + Placeholder: "Use duration format, for example: 1.2s, 100ms", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "reopen_duration", + }, + { + Label: "Fields", + Description: "Other issue and custom fields", + Element: ElementTypeKeyValueMap, + PropertyName: "fields", + }, + v0HttpConfigOption(), + }, + } +} + +func v0ProxyConfigOptions() []NotifierOption { + return []NotifierOption{ + { + Label: "Proxy URL", + Description: "HTTP proxy server to use to connect to the targets.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "proxy_url", + }, + { + Label: "No Proxy", + Description: "Comma-separated list of domains for which the proxy should not be used.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "no_proxy", + }, + { + Label: "Proxy From Environment", + Description: "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + Element: ElementTypeCheckbox, + PropertyName: "proxy_from_environment", + }, + { + Label: "Proxy Header Environment", + Description: "Headers to send to proxies during CONNECT requests.", + Element: ElementTypeKeyValueMap, + PropertyName: "proxy_connect_header", + }, + } +} + +func v0TLSConfigOption(propertyName string) NotifierOption { + return NotifierOption{ + Label: "TLS config", + Description: "Configures the TLS settings.", + PropertyName: propertyName, + Element: ElementTypeSubform, + SubformOptions: []NotifierOption{ + { + Label: "Server name", + Description: "ServerName extension to indicate the name of the server.", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "server_name", + }, + { + Label: "Skip verify", + Description: "Disable validation of the server certificate.", + Element: ElementTypeCheckbox, + PropertyName: "insecure_skip_verify", + }, + { + Label: "Min TLS Version", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "min_version", + }, + { + Label: "Max TLS Version", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "max_version", + }, + }, + } +} + +func v0HttpConfigOption() NotifierOption { + oauth2ConfigOption := func() NotifierOption { + return NotifierOption{ + Label: "OAuth2", + Description: "Configures the OAuth2 settings.", + PropertyName: "oauth2", + Element: ElementTypeSubform, + SubformOptions: []NotifierOption{ + { + Label: "Client ID", + Description: "The OAuth2 client ID", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "client_id", + Required: true, + }, + { + Label: "Client secret", + Description: "The OAuth2 client secret", + Element: ElementTypeInput, + InputType: InputTypePassword, + PropertyName: "client_secret", + Required: true, + Secure: true, + }, + { + Label: "Token URL", + Description: "The OAuth2 token exchange URL", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "token_url", + Required: true, + }, + { + Label: "Scopes", + Description: "Comma-separated list of scopes", + Element: ElementStringArray, + PropertyName: "scopes", + }, + { + Label: "Additional parameters", + Element: ElementTypeKeyValueMap, + PropertyName: "endpoint_params", + }, + v0TLSConfigOption("TLSConfig"), + }, + } + } + return NotifierOption{ + Label: "HTTP Config", + Description: "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + PropertyName: "http_config", + Element: ElementTypeSubform, + SubformOptions: append([]NotifierOption{ + { + Label: "Basic auth", + Description: "Sets the `Authorization` header with the configured username and password.", + PropertyName: "basic_auth", + Element: ElementTypeSubform, + SubformOptions: []NotifierOption{ + { + Label: "Username", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "username", + }, + { + Label: "Password", + Element: ElementTypeInput, + InputType: InputTypePassword, + PropertyName: "password", + Secure: true, + }, + }, + }, + { + Label: "Authorization", + Description: "The HTTP authorization credentials for the targets.", + Element: ElementTypeSubform, + PropertyName: "authorization", + SubformOptions: []NotifierOption{ + { + Label: "Type", + Element: ElementTypeInput, + InputType: InputTypeText, + PropertyName: "type", + }, + { + Label: "Credentials", + Element: ElementTypeInput, + InputType: InputTypePassword, + PropertyName: "credentials", + Secure: true, + }, + }, + }, + { + Label: "Follow redirects", + Description: "Whether the client should follow HTTP 3xx redirects.", + Element: ElementTypeCheckbox, + PropertyName: "follow_redirects", + }, + { + Label: "Enable HTTP2", + Description: "Whether the client should configure HTTP2.", + Element: ElementTypeCheckbox, + PropertyName: "enable_http2", + }, + { + Label: "HTTP Headers", + Description: "Headers to inject in the requests.", + Element: ElementTypeKeyValueMap, + PropertyName: "http_headers", + }, + }, append( + v0ProxyConfigOptions(), + v0TLSConfigOption("tls_config"), + oauth2ConfigOption())..., + ), + } +} diff --git a/pkg/services/ngalert/notifier/channels_config/available_channels_test.go b/pkg/services/ngalert/notifier/channels_config/available_channels_test.go index 4377e1d542d..0d3532b99a3 100644 --- a/pkg/services/ngalert/notifier/channels_config/available_channels_test.go +++ b/pkg/services/ngalert/notifier/channels_config/available_channels_test.go @@ -1,28 +1,38 @@ package channels_config import ( + "encoding/json" + "fmt" + "maps" + "reflect" + "slices" + "strings" "testing" + "github.com/grafana/alerting/notify/notifytest" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func TestGetSecretKeysForContactPointType(t *testing.T) { + httpConfigSecrets := []string{"http_config.authorization.credentials", "http_config.basic_auth.password", "http_config.oauth2.client_secret"} testCases := []struct { receiverType string + version NotifierVersion expectedSecretFields []string }{ - {receiverType: "dingding", expectedSecretFields: []string{"url"}}, - {receiverType: "kafka", expectedSecretFields: []string{"password"}}, - {receiverType: "email", expectedSecretFields: []string{}}, - {receiverType: "pagerduty", expectedSecretFields: []string{"integrationKey"}}, - {receiverType: "victorops", expectedSecretFields: []string{"url"}}, - {receiverType: "oncall", expectedSecretFields: []string{"password", "authorization_credentials"}}, - {receiverType: "pushover", expectedSecretFields: []string{"apiToken", "userKey"}}, - {receiverType: "slack", expectedSecretFields: []string{"token", "url"}}, - {receiverType: "sensugo", expectedSecretFields: []string{"apikey"}}, - {receiverType: "teams", expectedSecretFields: []string{}}, - {receiverType: "telegram", expectedSecretFields: []string{"bottoken"}}, - {receiverType: "webhook", expectedSecretFields: []string{ + {receiverType: "dingding", version: V1, expectedSecretFields: []string{"url"}}, + {receiverType: "kafka", version: V1, expectedSecretFields: []string{"password"}}, + {receiverType: "email", version: V1, expectedSecretFields: []string{}}, + {receiverType: "pagerduty", version: V1, expectedSecretFields: []string{"integrationKey"}}, + {receiverType: "victorops", version: V1, expectedSecretFields: []string{"url"}}, + {receiverType: "oncall", version: V1, expectedSecretFields: []string{"password", "authorization_credentials"}}, + {receiverType: "pushover", version: V1, expectedSecretFields: []string{"apiToken", "userKey"}}, + {receiverType: "slack", version: V1, expectedSecretFields: []string{"token", "url"}}, + {receiverType: "sensugo", version: V1, expectedSecretFields: []string{"apikey"}}, + {receiverType: "teams", version: V1, expectedSecretFields: []string{}}, + {receiverType: "telegram", version: V1, expectedSecretFields: []string{"bottoken"}}, + {receiverType: "webhook", version: V1, expectedSecretFields: []string{ "password", "authorization_credentials", "tlsConfig.caCertificate", @@ -34,44 +44,147 @@ func TestGetSecretKeysForContactPointType(t *testing.T) { "http_config.oauth2.tls_config.clientCertificate", "http_config.oauth2.tls_config.clientKey", }}, - {receiverType: "wecom", expectedSecretFields: []string{"url", "secret"}}, - {receiverType: "prometheus-alertmanager", expectedSecretFields: []string{"basicAuthPassword"}}, - {receiverType: "discord", expectedSecretFields: []string{"url"}}, - {receiverType: "googlechat", expectedSecretFields: []string{"url"}}, - {receiverType: "LINE", expectedSecretFields: []string{"token"}}, - {receiverType: "threema", expectedSecretFields: []string{"api_secret"}}, - {receiverType: "opsgenie", expectedSecretFields: []string{"apiKey"}}, - {receiverType: "webex", expectedSecretFields: []string{"bot_token"}}, - {receiverType: "sns", expectedSecretFields: []string{"sigv4.access_key", "sigv4.secret_key"}}, - {receiverType: "mqtt", expectedSecretFields: []string{"password", "tlsConfig.caCertificate", "tlsConfig.clientCertificate", "tlsConfig.clientKey"}}, - {receiverType: "jira", expectedSecretFields: []string{"user", "password", "api_token"}}, + {receiverType: "wecom", version: V1, expectedSecretFields: []string{"url", "secret"}}, + {receiverType: "prometheus-alertmanager", version: V1, expectedSecretFields: []string{"basicAuthPassword"}}, + {receiverType: "discord", version: V1, expectedSecretFields: []string{"url"}}, + {receiverType: "googlechat", version: V1, expectedSecretFields: []string{"url"}}, + {receiverType: "LINE", version: V1, expectedSecretFields: []string{"token"}}, + {receiverType: "threema", version: V1, expectedSecretFields: []string{"api_secret"}}, + {receiverType: "opsgenie", version: V1, expectedSecretFields: []string{"apiKey"}}, + {receiverType: "webex", version: V1, expectedSecretFields: []string{"bot_token"}}, + {receiverType: "sns", version: V1, expectedSecretFields: []string{"sigv4.access_key", "sigv4.secret_key"}}, + {receiverType: "mqtt", version: V1, expectedSecretFields: []string{"password", "tlsConfig.caCertificate", "tlsConfig.clientCertificate", "tlsConfig.clientKey"}}, + {receiverType: "jira", version: V1, expectedSecretFields: []string{"user", "password", "api_token"}}, + {receiverType: "victorops", version: V0mimir1, expectedSecretFields: append([]string{"api_key"}, httpConfigSecrets...)}, + {receiverType: "sns", version: V0mimir1, expectedSecretFields: append([]string{"sigv4.SecretKey"}, httpConfigSecrets...)}, + {receiverType: "telegram", version: V0mimir1, expectedSecretFields: append([]string{"token"}, httpConfigSecrets...)}, + {receiverType: "discord", version: V0mimir1, expectedSecretFields: append([]string{"webhook_url"}, httpConfigSecrets...)}, + {receiverType: "pagerduty", version: V0mimir1, expectedSecretFields: append([]string{"routing_key", "service_key"}, httpConfigSecrets...)}, + {receiverType: "pushover", version: V0mimir1, expectedSecretFields: append([]string{"user_key", "token"}, httpConfigSecrets...)}, + {receiverType: "jira", version: V0mimir1, expectedSecretFields: httpConfigSecrets}, + {receiverType: "opsgenie", version: V0mimir1, expectedSecretFields: append([]string{"api_key"}, httpConfigSecrets...)}, + {receiverType: "teams", version: V0mimir1, expectedSecretFields: append([]string{"webhook_url"}, httpConfigSecrets...)}, + {receiverType: "teams", version: V0mimir2, expectedSecretFields: append([]string{"webhook_url"}, httpConfigSecrets...)}, + {receiverType: "email", version: V0mimir1, expectedSecretFields: []string{"auth_password", "auth_secret"}}, + {receiverType: "slack", version: V0mimir1, expectedSecretFields: append([]string{"api_url"}, httpConfigSecrets...)}, + {receiverType: "webex", version: V0mimir1, expectedSecretFields: httpConfigSecrets}, + {receiverType: "wechat", version: V0mimir1, expectedSecretFields: append([]string{"api_secret"}, httpConfigSecrets...)}, + {receiverType: "webhook", version: V0mimir1, expectedSecretFields: append([]string{"url"}, httpConfigSecrets...)}, } - n := GetAvailableNotifiers() - allTypes := make(map[string]struct{}, len(n)) - for _, plugin := range n { - allTypes[plugin.Type] = struct{}{} + n := slices.Collect(GetAvailableNotifiersV2()) + type typeWithVersion struct { + Type string + Version NotifierVersion + } + allTypes := make(map[typeWithVersion]struct{}, len(n)) + getKey := func(pluginType string, version NotifierVersion) typeWithVersion { + return typeWithVersion{pluginType, version} + } + for _, p := range n { + for _, v := range p.Versions { + allTypes[getKey(p.Type, v.Version)] = struct{}{} + } } for _, testCase := range testCases { - delete(allTypes, testCase.receiverType) - t.Run(testCase.receiverType, func(t *testing.T) { - got, err := GetSecretKeysForContactPointType(testCase.receiverType) + delete(allTypes, getKey(testCase.receiverType, testCase.version)) + t.Run(fmt.Sprintf("%s-%s", testCase.receiverType, testCase.version), func(t *testing.T) { + got, err := GetSecretKeysForContactPointType(testCase.receiverType, testCase.version) require.NoError(t, err) require.ElementsMatch(t, testCase.expectedSecretFields, got) }) } - for integrationType := range allTypes { - t.Run(integrationType, func(t *testing.T) { - got, err := GetSecretKeysForContactPointType(integrationType) + for it := range allTypes { + t.Run(fmt.Sprintf("%s-%s", it.Type, it.Version), func(t *testing.T) { + got, err := GetSecretKeysForContactPointType(it.Type, it.Version) require.NoError(t, err) - require.Emptyf(t, got, "secret keys for %s should be empty", integrationType) + require.Emptyf(t, got, "secret keys for version %s of %s should be empty", it.Version, it.Type) }) } require.Emptyf(t, allTypes, "not all types are covered: %s", allTypes) } +func TestGetAvailableNotifiersV2(t *testing.T) { + n := slices.Collect(GetAvailableNotifiersV2()) + require.NotEmpty(t, n) + for _, notifier := range n { + t.Run(fmt.Sprintf("integration %s [%s]", notifier.Type, notifier.Name), func(t *testing.T) { + currentVersion := V1 + if notifier.Type == "wechat" { + currentVersion = V0mimir1 + } + t.Run(fmt.Sprintf("current version is %s", currentVersion), func(t *testing.T) { + require.Equal(t, currentVersion, notifier.GetCurrentVersion().Version) + }) + t.Run("should be able to create only v1", func(t *testing.T) { + for _, version := range notifier.Versions { + if version.Version == V1 { + require.True(t, version.CanCreate, "v1 should be able to create") + continue + } + require.False(t, version.CanCreate, "v0 should not be able to create") + } + }) + }) + } +} + +func TestConfigForIntegrationType(t *testing.T) { + t.Run("should return current version for all common types", func(t *testing.T) { + for plugin := range GetAvailableNotifiersV2() { + t.Run(plugin.Type, func(t *testing.T) { + version, err := ConfigForIntegrationType(plugin.Type) + require.NoErrorf(t, err, "expected config but got error for plugin type %s", plugin.Type) + assert.Equal(t, version.Plugin, plugin) + assert.Equal(t, version, plugin.GetCurrentVersion()) + }) + } + }) + + t.Run("should return specific version if matched by alias", func(t *testing.T) { + for plugin := range GetAvailableNotifiersV2() { + for _, version := range plugin.Versions { + if version.TypeAlias == "" { + continue + } + t.Run(version.TypeAlias, func(t *testing.T) { + actualVersion, err := ConfigForIntegrationType(version.TypeAlias) + require.NoErrorf(t, err, "expected config but got error for plugin type %s", plugin.Type) + assert.Equal(t, version, actualVersion) + }) + } + } + }) + + t.Run("should return error if not known type", func(t *testing.T) { + _, err := ConfigForIntegrationType("unknown") + require.Error(t, err) + }) +} + +func TestTypeUniqueness(t *testing.T) { + knownTypes := make(map[string]struct{}) + for plugin := range GetAvailableNotifiersV2() { + iType := strings.ToLower(plugin.Type) + if _, ok := knownTypes[iType]; ok { + assert.Failf(t, "duplicate plugin type", "plugin type %s", plugin.Type) + } + knownTypes[iType] = struct{}{} + for _, version := range plugin.Versions { + if version.TypeAlias == "" { + continue + } + iType = strings.ToLower(version.TypeAlias) + if _, ok := knownTypes[iType]; ok { + assert.Failf(t, "mimir type duplicates Grafana plugin type", "plugin type %s", iType) + } + knownTypes[iType] = struct{}{} + } + } +} + func Test_getSecretFields(t *testing.T) { testCases := []struct { name string @@ -116,3 +229,62 @@ func Test_getSecretFields(t *testing.T) { }) } } + +func TestV0IntegrationsSecrets(t *testing.T) { + // This test ensures that all known integrations' secrets are listed in the schema definition. + notifytest.ForEachIntegrationType(t, func(configType reflect.Type) { + t.Run(configType.Name(), func(t *testing.T) { + integrationType := strings.ToLower(strings.TrimSuffix(configType.Name(), "Config")) + pluginVersion, err := ConfigForIntegrationType(integrationType) + require.NoError(t, err) + if pluginVersion.Version == V1 { + var ok bool + pluginVersion, ok = pluginVersion.Plugin.GetVersion(V0mimir1) + require.True(t, ok) + } + expectedSecrets := pluginVersion.GetSecretFieldsPaths() + var secrets []string + for option := range maps.Keys(notifytest.ValidMimirHTTPConfigs) { + cfg, err := notifytest.GetMimirIntegrationForType(configType, option) + require.NoError(t, err) + data, err := json.Marshal(cfg) + require.NoError(t, err) + m := map[string]any{} + err = json.Unmarshal(data, &m) + require.NoError(t, err) + secrets = append(secrets, getSecrets(m, "")...) + } + secrets = unique(secrets) + t.Log(secrets) + require.ElementsMatch(t, expectedSecrets, secrets) + }) + }) +} + +func unique(slice []string) []string { + keys := make(map[string]struct{}, len(slice)) + list := make([]string, 0, len(slice)) + for _, entry := range slice { + if _, value := keys[entry]; !value { + keys[entry] = struct{}{} + list = append(list, entry) + } + } + return list +} + +func getSecrets(m map[string]any, parent string) []string { + var result []string + for key, val := range m { + str, ok := val.(string) + if ok && str == "" { + result = append(result, parent+key) + } + m, ok := val.(map[string]any) + if ok { + subSecrets := getSecrets(m, parent+key+".") + result = append(result, subSecrets...) + } + } + return result +} diff --git a/pkg/services/ngalert/notifier/channels_config/plugin.go b/pkg/services/ngalert/notifier/channels_config/plugin.go index f7332bdcfd2..a38244989d5 100644 --- a/pkg/services/ngalert/notifier/channels_config/plugin.go +++ b/pkg/services/ngalert/notifier/channels_config/plugin.go @@ -3,6 +3,7 @@ package channels_config // NotifierPlugin holds meta information about a notifier. type NotifierPlugin struct { Type string `json:"type"` + TypeAlias string `json:"typeAlias,omitempty"` Name string `json:"name"` Heading string `json:"heading"` Description string `json:"description"` @@ -14,16 +15,16 @@ type NotifierPlugin struct { // It includes metadata such as type, name, description, and version-specific details. type VersionedNotifierPlugin struct { Type string `json:"type"` - CurrentVersion string `json:"currentVersion"` + CurrentVersion NotifierVersion `json:"currentVersion"` Name string `json:"name"` - Heading string `json:"heading"` - Description string `json:"description"` - Info string `json:"info"` + Heading string `json:"heading,omitempty"` + Description string `json:"description,omitempty"` + Info string `json:"info,omitempty"` Versions []NotifierPluginVersion `json:"versions"` } // GetVersion retrieves a specific version of the notifier plugin by its version string. Returns the version and a boolean indicating success. -func (p VersionedNotifierPlugin) GetVersion(v string) (NotifierPluginVersion, bool) { +func (p VersionedNotifierPlugin) GetVersion(v NotifierVersion) (NotifierPluginVersion, bool) { for _, version := range p.Versions { if version.Version == v { return version, true @@ -44,10 +45,17 @@ func (p VersionedNotifierPlugin) GetCurrentVersion() NotifierPluginVersion { // NotifierPluginVersion represents a version of a notifier plugin, including configuration options and metadata. type NotifierPluginVersion struct { - Version string `json:"version"` - CanCreate bool `json:"canCreate"` - Options []NotifierOption `json:"options"` - Info string `json:"info"` + TypeAlias string `json:"typeAlias,omitempty"` + Version NotifierVersion `json:"version"` + CanCreate bool `json:"canCreate"` + Options []NotifierOption `json:"options"` + Info string `json:"info,omitempty"` + Plugin *VersionedNotifierPlugin `json:"-"` +} + +// GetSecretFieldsPaths returns a list of paths for fields marked as secure within the NotifierPluginVersion's options. +func (v NotifierPluginVersion) GetSecretFieldsPaths() []string { + return getSecretFields("", v.Options) } // NotifierOption holds information about options specific for the NotifierPlugin. diff --git a/pkg/services/ngalert/notifier/crypto.go b/pkg/services/ngalert/notifier/crypto.go index 5d682ad8f62..9d1551417cc 100644 --- a/pkg/services/ngalert/notifier/crypto.go +++ b/pkg/services/ngalert/notifier/crypto.go @@ -107,7 +107,7 @@ func encryptReceiverConfigs(c []*definitions.PostableApiReceiver, encrypt defini return fmt.Errorf("integration '%s' of receiver '%s' has settings that cannot be parsed as JSON: %w", gr.Type, gr.Name, err) } - secretKeys, err := channels_config.GetSecretKeysForContactPointType(gr.Type) + secretKeys, err := channels_config.GetSecretKeysForContactPointType(gr.Type, channels_config.V1) if err != nil { return fmt.Errorf("failed to get secret keys for contact point type %s: %w", gr.Type, err) } diff --git a/pkg/services/ngalert/provisioning/contactpoints.go b/pkg/services/ngalert/provisioning/contactpoints.go index 88be77fe0c5..c7ceadad3c8 100644 --- a/pkg/services/ngalert/provisioning/contactpoints.go +++ b/pkg/services/ngalert/provisioning/contactpoints.go @@ -247,7 +247,7 @@ func (ecp *ContactPointService) UpdateContactPoint(ctx context.Context, orgID in if err != nil { return err } - secretKeys, err := channels_config.GetSecretKeysForContactPointType(contactPoint.Type) + secretKeys, err := channels_config.GetSecretKeysForContactPointType(contactPoint.Type, channels_config.V1) if err != nil { return fmt.Errorf("%w: %s", ErrValidation, err.Error()) } @@ -522,7 +522,7 @@ func ValidateContactPoint(ctx context.Context, e apimodels.EmbeddedContactPoint, // RemoveSecretsForContactPoint removes all secrets from the contact point's settings and returns them as a map. Returns error if contact point type is not known. func RemoveSecretsForContactPoint(e *apimodels.EmbeddedContactPoint) (map[string]string, error) { s := map[string]string{} - secretKeys, err := channels_config.GetSecretKeysForContactPointType(e.Type) + secretKeys, err := channels_config.GetSecretKeysForContactPointType(e.Type, channels_config.V1) if err != nil { return nil, err } diff --git a/pkg/services/ngalert/provisioning/contactpoints_test.go b/pkg/services/ngalert/provisioning/contactpoints_test.go index ec25c139e86..120c90fe4ba 100644 --- a/pkg/services/ngalert/provisioning/contactpoints_test.go +++ b/pkg/services/ngalert/provisioning/contactpoints_test.go @@ -448,7 +448,7 @@ func TestRemoveSecretsForContactPoint(t *testing.T) { settingsRaw, err := json.Marshal(integration.Settings) require.NoError(t, err) - expectedFields, err := channels_config.GetSecretKeysForContactPointType(integrationType) + expectedFields, err := channels_config.GetSecretKeysForContactPointType(integrationType, channels_config.V1) require.NoError(t, err) t.Run(integrationType, func(t *testing.T) { diff --git a/pkg/tests/api/alerting/api_available_channel_test.go b/pkg/tests/api/alerting/api_available_channel_test.go index 5c21355d08b..b0b3751299e 100644 --- a/pkg/tests/api/alerting/api_available_channel_test.go +++ b/pkg/tests/api/alerting/api_available_channel_test.go @@ -1,12 +1,16 @@ package alerting import ( + "bytes" "encoding/json" "fmt" "io" "net/http" + "os" + "path" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/grafana/grafana/pkg/services/ngalert/notifier/channels_config" @@ -21,14 +25,14 @@ func TestIntegrationAvailableChannels(t *testing.T) { testinfra.SQLiteIntegrationTest(t) - dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{ + dir, p := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{ DisableLegacyAlerting: true, EnableUnifiedAlerting: true, DisableAnonymous: true, AppModeProduction: true, }) - grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, path) + grafanaListedAddr, env := testinfra.StartGrafanaEnv(t, dir, p) // Create a user to make authenticated requests createUser(t, env.SQLStore, env.Cfg, user.CreateUserCommand{ @@ -37,20 +41,48 @@ func TestIntegrationAvailableChannels(t *testing.T) { Login: "grafana", }) - alertsURL := fmt.Sprintf("http://grafana:password@%s/api/alert-notifiers", grafanaListedAddr) - // nolint:gosec - resp, err := http.Get(alertsURL) - require.NoError(t, err) - t.Cleanup(func() { - err := resp.Body.Close() + t.Run("should return all available notifiers", func(t *testing.T) { + alertsURL := fmt.Sprintf("http://grafana:password@%s/api/alert-notifiers", grafanaListedAddr) + // nolint:gosec + resp, err := http.Get(alertsURL) require.NoError(t, err) - }) - b, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, 200, resp.StatusCode) + t.Cleanup(func() { + err := resp.Body.Close() + require.NoError(t, err) + }) + b, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, 200, resp.StatusCode) - expNotifiers := channels_config.GetAvailableNotifiers() - expJson, err := json.Marshal(expNotifiers) - require.NoError(t, err) - require.Equal(t, string(expJson), string(b)) + expNotifiers := channels_config.GetAvailableNotifiers() + expJson, err := json.Marshal(expNotifiers) + require.NoError(t, err) + require.Equal(t, string(expJson), string(b)) + }) + + t.Run("should return versioned notifiers", func(t *testing.T) { + alertsURL := fmt.Sprintf("http://grafana:password@%s/api/alert-notifiers?version=2", grafanaListedAddr) + // nolint:gosec + resp, err := http.Get(alertsURL) + require.NoError(t, err) + t.Cleanup(func() { + err := resp.Body.Close() + require.NoError(t, err) + }) + b, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, 200, resp.StatusCode) + + expectedBytes, err := os.ReadFile(path.Join("test-data", "alert-notifiers-v2-snapshot.json")) + require.NoError(t, err) + + require.NoError(t, err) + if !assert.JSONEq(t, string(expectedBytes), string(b)) { + var prettyJSON bytes.Buffer + err := json.Indent(&prettyJSON, b, "", " ") + require.NoError(t, err) + err = os.WriteFile(path.Join("test-data", "alert-notifiers-v2-snapshot.json"), prettyJSON.Bytes(), 0o644) + require.NoError(t, err) + } + }) } diff --git a/pkg/tests/api/alerting/test-data/alert-notifiers-v2-snapshot.json b/pkg/tests/api/alerting/test-data/alert-notifiers-v2-snapshot.json new file mode 100644 index 00000000000..fbf9e0fad82 --- /dev/null +++ b/pkg/tests/api/alerting/test-data/alert-notifiers-v2-snapshot.json @@ -0,0 +1,15182 @@ +[ + { + "type": "LINE", + "currentVersion": "v1", + "name": "LINE", + "heading": "LINE notify settings", + "description": "Send notifications to LINE notify", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Token", + "description": "", + "placeholder": "LINE notify token key", + "propertyName": "token", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Description", + "description": "Templated description of the message", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "type": "dingding", + "currentVersion": "v1", + "name": "DingDing", + "heading": "DingDing settings", + "description": "Sends HTTP POST request to DingDing", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxx", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Message Type", + "description": "", + "placeholder": "", + "propertyName": "msgType", + "selectOptions": [ + { + "value": "link", + "label": "Link" + }, + { + "value": "actionCard", + "label": "ActionCard" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "Custom DingDing message. You can use template variables.", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "type": "discord", + "currentVersion": "v1", + "name": "Discord", + "heading": "Discord settings", + "description": "Sends notifications to Discord", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Message Content", + "description": "Mention a group using @ or a user using \u003c@ID\u003e when notifying in a channel", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Webhook URL", + "description": "", + "placeholder": "Discord webhook URL", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Avatar URL", + "description": "", + "placeholder": "", + "propertyName": "avatar_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Use Discord's Webhook Username", + "description": "Use the username configured in Discord's webhook settings. Otherwise, the username will be 'Grafana'", + "placeholder": "", + "propertyName": "use_discord_username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Webhook URL", + "description": "", + "placeholder": "Discord webhook URL", + "propertyName": "webhook_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message", + "placeholder": "{{ template \"discord.default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message Content", + "description": "Mention a group using @ or a user using \u003c@ID\u003e when notifying in a channel", + "placeholder": "{{ template \"discord.default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "email", + "currentVersion": "v1", + "name": "Email", + "heading": "Email settings", + "description": "Sends notifications using Grafana server configured SMTP settings", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "checkbox", + "inputType": "", + "label": "Single email", + "description": "Send a single email to all recipients", + "placeholder": "", + "propertyName": "singleEmail", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Addresses", + "description": "You can enter multiple email addresses using a \";\", \"\\n\" or \",\" separator", + "placeholder": "", + "propertyName": "addresses", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "Optional message. You can use templates to customize this field. Using a custom message will replace the default message", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Subject", + "description": "Optional subject. You can use templates to customize this field", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "subject", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "textarea", + "inputType": "", + "label": "To", + "description": "The email address to send notifications to. You can enter multiple addresses using a \",\" separator. You can use templates to customize this field.", + "placeholder": "", + "propertyName": "to", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "From", + "description": "The sender address.", + "placeholder": "", + "propertyName": "from", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "SMTP host", + "description": "The SMTP host and port through which emails are sent.", + "placeholder": "", + "propertyName": "smarthost", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Hello", + "description": "The hostname to identify to the SMTP server.", + "placeholder": "", + "propertyName": "hello", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "SMTP authentication information", + "placeholder": "", + "propertyName": "auth_username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "SMTP authentication information", + "placeholder": "", + "propertyName": "auth_password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Secret", + "description": "SMTP authentication information", + "placeholder": "", + "propertyName": "auth_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Identity", + "description": "SMTP authentication information", + "placeholder": "", + "propertyName": "auth_identity", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Require TLS", + "description": "The SMTP TLS requirement", + "placeholder": "", + "propertyName": "require_tls", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Email HTML body", + "description": "The HTML body of the email notification.", + "placeholder": "{{ template \"email.default.html\" . }}", + "propertyName": "html", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Email text body", + "description": "The text body of the email notification.", + "placeholder": "", + "propertyName": "text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Headers", + "description": "Further headers email header key/value pairs. Overrides any headers previously set by the notification implementation.", + "placeholder": "", + "propertyName": "headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + }, + { + "type": "googlechat", + "currentVersion": "v1", + "name": "Google Chat", + "heading": "Google Chat settings", + "description": "Sends notifications to Google Chat via webhooks based on the official JSON message format", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "Google Chat incoming webhook url", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "type": "jira", + "currentVersion": "v1", + "name": "Jira", + "heading": "Jira settings", + "description": "Creates Jira issues from alerts", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API URL of Jira instance, including version of API", + "description": "Supported v2 or v3 APIs", + "placeholder": "https://grafana.atlassian.net/rest/api/3", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "HTTP Basic Authentication - Username", + "description": "Username to use for Jira authentication.", + "placeholder": "", + "propertyName": "user", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "HTTP Basic Authentication - Password", + "description": "Password to use for Jira authentication.", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Authorization Header - Personal Access Token", + "description": "Personal Access Token that is used as a bearer authorization header.", + "placeholder": "", + "propertyName": "api_token", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Project Key", + "description": "The project key associated with the relevant Jira project", + "placeholder": "Grafana", + "propertyName": "project", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Issue Type", + "description": "The type of the Jira issue (e.g., Bug, Task, Story). You can use templates to customize this field.", + "placeholder": "Task", + "propertyName": "issue_type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Summary", + "description": "The summary of the Jira issue. You can use templates to customize this field. Maximum length is 255 characters.", + "placeholder": "{{ template \"jira.default.summary\" . }}", + "propertyName": "summary", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Description", + "description": "The description of the Jira issue. You can use templates to customize this field. Maximum length is 32767 characters.", + "placeholder": "{{ template \"jira.default.description\" . }}", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Labels", + "description": "Labels to assign to the Jira issue. You can use templates to customize this field.", + "placeholder": "", + "propertyName": "labels", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Priority", + "description": "The priority of the Jira issue (e.g., High, Medium, Low). You can use templates to customize this field.", + "placeholder": "{{ template \"jira.default.priority\" . }}", + "propertyName": "priority", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Resolve Transition", + "description": "Name of the workflow transition to resolve an issue. The target status must have the category \"done\". If not set, the issue will not be resolved.", + "placeholder": "", + "propertyName": "resolve_transition", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Reopen Transition", + "description": "Name of the workflow transition to resolve an issue. The target status must not have the category \"done\". If not set, the issue will not be reopened.", + "placeholder": "", + "propertyName": "reopen_transition", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Reopen Duration", + "description": "Reopen the issue when it is not older than this value in minutes. Otherwise, create a new issue.", + "placeholder": "10m", + "propertyName": "reopen_duration", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "\"Won't fix\" Transition", + "description": "If reopen transition is defined, ignore issues with that resolution.", + "placeholder": "", + "propertyName": "wont_fix_resolution", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Custom field ID for deduplication", + "description": "Id of the custom field where the deduplication key should be stored. Otherwise, it is added to labels in format 'ALERT($KEY).'", + "placeholder": "10000", + "propertyName": "dedup_key_field", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "^[0-9]+$", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "text", + "label": "Custom Field Data", + "description": "Custom field data to set on the Jira issue.", + "placeholder": "", + "propertyName": "fields", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API URL", + "description": "The host to send Jira API requests to", + "placeholder": "", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Project Key", + "description": "The project key where issues are created", + "placeholder": "", + "propertyName": "project", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Issue Type", + "description": "Type of the issue (e.g. Bug)", + "placeholder": "", + "propertyName": "issue_type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Summary", + "description": "Issue summary template", + "placeholder": "{{ template \"jira.default.summary\" . }}", + "propertyName": "summary", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Description", + "description": "Issue description template", + "placeholder": "{{ template \"jira.default.description\" . }}", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Labels", + "description": " Labels to be added to the issue", + "placeholder": "", + "propertyName": "labels", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Priority", + "description": "Priority of the issue", + "placeholder": "{{ template \"jira.default.priority\" . }}", + "propertyName": "priority", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Reopen transition", + "description": "Name of the workflow transition to reopen an issue. The target status should not have the category \"done\"", + "placeholder": "", + "propertyName": "reopen_transition", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Resolve transition", + "description": "Name of the workflow transition to resolve an issue. The target status must have the category \"done\"", + "placeholder": "", + "propertyName": "resolve_transition", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Won't fix resolution", + "description": "If \"Reopen transition\" is defined, ignore issues with that resolution", + "placeholder": "", + "propertyName": "wont_fix_resolution", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Reopen duration", + "description": "If \"Reopen transition\" is defined, reopen the issue when it is not older than this value (rounded down to the nearest minute)", + "placeholder": "Use duration format, for example: 1.2s, 100ms", + "propertyName": "reopen_duration", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Fields", + "description": "Other issue and custom fields", + "placeholder": "", + "propertyName": "fields", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "kafka", + "currentVersion": "v1", + "name": "Kafka REST Proxy", + "heading": "Kafka settings", + "description": "Sends notifications to Kafka Rest Proxy", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Kafka REST Proxy", + "description": "Hint: If you are directly using v3 APIs hosted on a Confluent Kafka Server, you must append /kafka to the URL here. Example: https://localhost:8082/kafka", + "placeholder": "http://localhost:8082", + "propertyName": "kafkaRestProxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Topic", + "description": "", + "placeholder": "topic1", + "propertyName": "kafkaTopic", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "The password to use when making a call to the Kafka REST Proxy", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "text", + "label": "API version", + "description": "The API version to use when contacting the Kafka REST Server. By default v2 will be used.", + "placeholder": "", + "propertyName": "apiVersion", + "selectOptions": [ + { + "value": "v2", + "label": "v2" + }, + { + "value": "v3", + "label": "v3" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Cluster ID", + "description": "v3 APIs require a clusterID to be specified.", + "placeholder": "lkc-abcde", + "propertyName": "kafkaClusterId", + "selectOptions": null, + "showWhen": { + "field": "apiVersion", + "is": "v3" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Description", + "description": "Templated description of the Kafka message", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Details", + "description": "Custom details to include with the message. You can use template variables.", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "details", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "type": "mqtt", + "currentVersion": "v1", + "name": "MQTT", + "heading": "MQTT settings", + "description": "Sends notifications to an MQTT broker", + "info": "The MQTT notifier sends messages to an MQTT broker. The message is sent to the topic specified in the configuration. ", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Broker URL", + "description": "The URL of the MQTT broker.", + "placeholder": "tcp://localhost:1883", + "propertyName": "brokerUrl", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Topic", + "description": "The topic to which the message will be sent.", + "placeholder": "grafana/alerts", + "propertyName": "topic", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "text", + "label": "Message format", + "description": "If set to 'json', the notification message is the default JSON payload, and the Message field sets only the message field in the payload. If set to 'text', the Message field defines the entire payload. The default is 'json'.", + "placeholder": "json", + "propertyName": "messageFormat", + "selectOptions": [ + { + "value": "json", + "label": "json" + }, + { + "value": "text", + "label": "text" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The client ID to use when connecting to the MQTT broker. If blank, a random client ID is used.", + "placeholder": "", + "propertyName": "clientId", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "In 'json' Message format, sets the message field of the default JSON payload. In 'text' Message format, defines the entire payload.", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "The username to use when connecting to the MQTT broker.", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Password", + "description": "The password to use when connecting to the MQTT broker.", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "QoS", + "description": "The quality of service to use when sending the message.", + "placeholder": "", + "propertyName": "qos", + "selectOptions": [ + { + "value": "0", + "label": "At most once (0)" + }, + { + "value": "1", + "label": "At least once (1)" + }, + { + "value": "2", + "label": "Exactly once (2)" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Retain", + "description": "If set to true, the message will be retained by the broker.", + "placeholder": "", + "propertyName": "retain", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS", + "description": "TLS configuration options", + "placeholder": "", + "propertyName": "tlsConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "checkbox", + "inputType": "", + "label": "Disable certificate verification", + "description": "Do not verify the broker's certificate chain and host name.", + "placeholder": "", + "propertyName": "insecureSkipVerify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "CA Certificate", + "description": "Certificate in PEM format to use when verifying the broker's certificate chain.", + "placeholder": "", + "propertyName": "caCertificate", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Client Certificate", + "description": "Client certificate in PEM format to use when connecting to the broker.", + "placeholder": "", + "propertyName": "clientCertificate", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Client Key", + "description": "Client key in PEM format to use when connecting to the broker.", + "placeholder": "", + "propertyName": "clientKey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + }, + { + "type": "oncall", + "currentVersion": "v1", + "name": "Grafana IRM", + "heading": "Grafana IRM settings", + "description": "Sends alerts to Grafana IRM", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "HTTP Method", + "description": "", + "placeholder": "", + "propertyName": "httpMethod", + "selectOptions": [ + { + "value": "POST", + "label": "POST" + }, + { + "value": "PUT", + "label": "PUT" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "HTTP Basic Authentication - Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "HTTP Basic Authentication - Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Authorization Header - Scheme", + "description": "Optionally provide a scheme for the Authorization Request Header. Default is Bearer.", + "placeholder": "Bearer", + "propertyName": "authorization_scheme", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Authorization Header - Credentials", + "description": "Credentials for the Authorization Request header. Only one of HTTP Basic Authentication or Authorization Request Header can be set.", + "placeholder": "", + "propertyName": "authorization_credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max Alerts", + "description": "Max alerts to include in a notification. Remaining alerts in the same batch will be ignored above this number. 0 means no limit.", + "placeholder": "", + "propertyName": "maxAlerts", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message.", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "Custom message. You can use template variables.", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "type": "opsgenie", + "currentVersion": "v1", + "name": "OpsGenie", + "heading": "OpsGenie settings", + "description": "Sends notifications to OpsGenie", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API Key", + "description": "", + "placeholder": "OpsGenie API Key", + "propertyName": "apiKey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Alert API URL", + "description": "", + "placeholder": "https://api.opsgenie.com/v2/alerts", + "propertyName": "apiUrl", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Message", + "description": "Alert text limited to 130 characters.", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Description", + "description": "A description of the incident.", + "placeholder": "", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Auto close incidents", + "description": "Automatically close alerts in OpsGenie once the alert goes back to ok.", + "placeholder": "", + "propertyName": "autoClose", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Override priority", + "description": "Allow the alert priority to be set using the og_priority label.", + "placeholder": "", + "propertyName": "overridePriority", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Send notification tags as", + "description": "Send the common annotations to Opsgenie as either Extra Properties, Tags or both", + "placeholder": "", + "propertyName": "sendTagsAs", + "selectOptions": [ + { + "value": "tags", + "label": "Tags" + }, + { + "value": "details", + "label": "Extra Properties" + }, + { + "value": "both", + "label": "Tags \u0026 Extra Properties" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform_array", + "inputType": "", + "label": "Responders", + "description": "If the API key belongs to a team, this field is ignored.", + "placeholder": "", + "propertyName": "responders", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "", + "label": "Type", + "description": "team, teams, user, escalation, schedule or a template", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "", + "label": "Name", + "description": "Name of the responder. Must be specified if ID and Username are empty or if the type is 'teams'.", + "placeholder": "", + "propertyName": "name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "", + "label": "ID", + "description": "ID of the responder. Must be specified if name and Username are empty.", + "placeholder": "", + "propertyName": "id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "", + "label": "Username", + "description": "User name of the responder. Must be specified if ID and Name are empty.", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API key", + "description": "The API key to use when talking to the OpsGenie API.", + "placeholder": "", + "propertyName": "api_key", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "API URL", + "description": "The host to send OpsGenie API requests to.", + "placeholder": "", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message", + "description": "Alert text limited to 130 characters.", + "placeholder": "{{ template \"opsgenie.default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Description", + "description": "A description of the incident.", + "placeholder": "{{ template \"opsgenie.default.description\" . }}", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Source", + "description": "A backlink to the sender of the notification.", + "placeholder": "{{ template \"opsgenie.default.source\" . }}", + "propertyName": "source", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Details", + "description": "A set of arbitrary key/value pairs that provide further detail about the incident.", + "placeholder": "", + "propertyName": "details", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Entity", + "description": "Optional field that can be used to specify which domain alert is related to.", + "placeholder": "", + "propertyName": "entity", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Actions", + "description": "Comma separated list of actions that will be available for the alert.", + "placeholder": "", + "propertyName": "actions", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Tags", + "description": "Comma separated list of tags attached to the notifications.", + "placeholder": "", + "propertyName": "tags", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Note", + "description": "Additional alert note.", + "placeholder": "", + "propertyName": "note", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Priority", + "description": "Priority level of alert. Possible values are P1, P2, P3, P4, and P5.", + "placeholder": "", + "propertyName": "priority", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Update Alerts", + "description": "Whether to update message and description of the alert in OpsGenie if it already exists. By default, the alert is never updated in OpsGenie, the new message only appears in activity log.", + "placeholder": "", + "propertyName": "update_alerts", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform_array", + "inputType": "", + "label": "Responders", + "description": "List of responders responsible for notifications.", + "placeholder": "", + "propertyName": "responders", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "\"team\", \"user\", \"escalation\" or schedule\".", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "ID", + "description": "Exactly one of these fields should be defined.", + "placeholder": "", + "propertyName": "id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Name", + "description": "Exactly one of these fields should be defined.", + "placeholder": "", + "propertyName": "name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "Exactly one of these fields should be defined.", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "pagerduty", + "currentVersion": "v1", + "name": "PagerDuty", + "heading": "PagerDuty settings", + "description": "Sends notifications to PagerDuty", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Integration Key", + "description": "", + "placeholder": "Pagerduty Integration Key", + "propertyName": "integrationKey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Severity", + "description": "Severity of the event. It must be critical, error, warning, info - otherwise, the default is set which is critical. You can use templates", + "placeholder": "critical", + "propertyName": "severity", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Class", + "description": "The class/type of the event, for example 'ping failure' or 'cpu load'", + "placeholder": "", + "propertyName": "class", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Component", + "description": "Component of the source machine that is responsible for the event, for example mysql or eth0", + "placeholder": "Grafana", + "propertyName": "component", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Group", + "description": "Logical grouping of components of a service, for example 'app-stack'", + "placeholder": "", + "propertyName": "group", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Summary", + "description": "You can use templates for summary", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "summary", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Source", + "description": "The unique location of the affected system, preferably a hostname or FQDN. You can use templates", + "placeholder": "grafana.local", + "propertyName": "source", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Client", + "description": "The name of the monitoring client that is triggering this event. You can use templates", + "placeholder": "Grafana", + "propertyName": "client", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Client URL", + "description": "The URL of the monitoring client that is triggering this event. You can use templates", + "placeholder": "{{ .ExternalURL }}", + "propertyName": "client_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "text", + "label": "Details", + "description": "A set of arbitrary key/value pairs that provide further detail about the incident.", + "placeholder": "", + "propertyName": "details", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "The URL to send API requests to", + "placeholder": "https://events.pagerduty.com/v2/enqueue", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "The URL to send API requests to", + "placeholder": "", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Routing key", + "description": "The PagerDuty integration key (when using PagerDuty integration type `Events API v2`)", + "placeholder": "", + "propertyName": "routing_key", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Service key", + "description": "The PagerDuty integration key (when using PagerDuty integration type `Prometheus`).", + "placeholder": "", + "propertyName": "service_key", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Client", + "description": "The client identification of the Alertmanager.", + "placeholder": "{{ template \"pagerduty.default.client\" . }}", + "propertyName": "client", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Client URL", + "description": "A backlink to the sender of the notification.", + "placeholder": "{{ template \"pagerduty.default.clientURL\" . }}", + "propertyName": "client_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Description", + "description": "A description of the incident.", + "placeholder": "{{ template \"pagerduty.default.description\" .}}", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Details", + "description": "A set of arbitrary key/value pairs that provide further detail about the incident.", + "placeholder": "", + "propertyName": "details", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform_array", + "inputType": "", + "label": "Images", + "description": "Images to attach to the incident.", + "placeholder": "", + "propertyName": "images", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "", + "propertyName": "href", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Source", + "description": "", + "placeholder": "", + "propertyName": "source", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Alt", + "description": "", + "placeholder": "", + "propertyName": "alt", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform_array", + "inputType": "", + "label": "Links", + "description": "Links to attach to the incident.", + "placeholder": "", + "propertyName": "links", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "", + "propertyName": "href", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Text", + "description": "", + "placeholder": "", + "propertyName": "text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "input", + "inputType": "text", + "label": "Source", + "description": "Unique location of the affected system.", + "placeholder": "", + "propertyName": "source", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Severity", + "description": "Severity of the incident.", + "placeholder": "error", + "propertyName": "severity", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Class", + "description": "The class/type of the event.", + "placeholder": "", + "propertyName": "class", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Component", + "description": "The part or component of the affected system that is broken.", + "placeholder": "", + "propertyName": "component", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Group", + "description": "A cluster or grouping of sources.", + "placeholder": "", + "propertyName": "group", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "prometheus-alertmanager", + "currentVersion": "v1", + "name": "Alertmanager", + "heading": "Alertmanager Settings", + "description": "Sends notifications to Alertmanager", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "http://localhost:9093", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Basic Auth User", + "description": "", + "placeholder": "", + "propertyName": "basicAuthUser", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Basic Auth Password", + "description": "", + "placeholder": "", + "propertyName": "basicAuthPassword", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "type": "pushover", + "currentVersion": "v1", + "name": "Pushover", + "heading": "Pushover settings", + "description": "Sends HTTP POST request to the Pushover API", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API Token", + "description": "", + "placeholder": "Application token", + "propertyName": "apiToken", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "User key(s)", + "description": "", + "placeholder": "comma-separated list", + "propertyName": "userKey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Device(s) (optional)", + "description": "", + "placeholder": "comma-separated list; leave empty to send to all devices", + "propertyName": "device", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Alerting priority", + "description": "", + "placeholder": "", + "propertyName": "priority", + "selectOptions": [ + { + "value": "2", + "label": "Emergency" + }, + { + "value": "1", + "label": "High" + }, + { + "value": "0", + "label": "Normal" + }, + { + "value": "-1", + "label": "Low" + }, + { + "value": "-2", + "label": "Lowest" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "OK priority", + "description": "", + "placeholder": "", + "propertyName": "okPriority", + "selectOptions": [ + { + "value": "2", + "label": "Emergency" + }, + { + "value": "1", + "label": "High" + }, + { + "value": "0", + "label": "Normal" + }, + { + "value": "-1", + "label": "Low" + }, + { + "value": "-2", + "label": "Lowest" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Retry (Only used for Emergency Priority)", + "description": "How often (in seconds) the Pushover servers will send the same alerting or OK notification to the user.", + "placeholder": "minimum 30 seconds", + "propertyName": "retry", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Expire (Only used for Emergency Priority)", + "description": "How many seconds the alerting or OK notification will continue to be retried.", + "placeholder": "maximum 10800 seconds", + "propertyName": "expire", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Alerting sound", + "description": "", + "placeholder": "", + "propertyName": "sound", + "selectOptions": [ + { + "value": "default", + "label": "Default" + }, + { + "value": "pushover", + "label": "Pushover" + }, + { + "value": "bike", + "label": "Bike" + }, + { + "value": "bugle", + "label": "Bugle" + }, + { + "value": "cashregister", + "label": "Cashregister" + }, + { + "value": "classical", + "label": "Classical" + }, + { + "value": "cosmic", + "label": "Cosmic" + }, + { + "value": "falling", + "label": "Falling" + }, + { + "value": "gamelan", + "label": "Gamelan" + }, + { + "value": "incoming", + "label": "Incoming" + }, + { + "value": "intermission", + "label": "Intermission" + }, + { + "value": "magic", + "label": "Magic" + }, + { + "value": "mechanical", + "label": "Mechanical" + }, + { + "value": "pianobar", + "label": "Pianobar" + }, + { + "value": "siren", + "label": "Siren" + }, + { + "value": "spacealarm", + "label": "Spacealarm" + }, + { + "value": "tugboat", + "label": "Tugboat" + }, + { + "value": "alien", + "label": "Alien" + }, + { + "value": "climb", + "label": "Climb" + }, + { + "value": "persistent", + "label": "Persistent" + }, + { + "value": "echo", + "label": "Echo" + }, + { + "value": "updown", + "label": "Updown" + }, + { + "value": "none", + "label": "None" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "OK sound", + "description": "", + "placeholder": "", + "propertyName": "okSound", + "selectOptions": [ + { + "value": "default", + "label": "Default" + }, + { + "value": "pushover", + "label": "Pushover" + }, + { + "value": "bike", + "label": "Bike" + }, + { + "value": "bugle", + "label": "Bugle" + }, + { + "value": "cashregister", + "label": "Cashregister" + }, + { + "value": "classical", + "label": "Classical" + }, + { + "value": "cosmic", + "label": "Cosmic" + }, + { + "value": "falling", + "label": "Falling" + }, + { + "value": "gamelan", + "label": "Gamelan" + }, + { + "value": "incoming", + "label": "Incoming" + }, + { + "value": "intermission", + "label": "Intermission" + }, + { + "value": "magic", + "label": "Magic" + }, + { + "value": "mechanical", + "label": "Mechanical" + }, + { + "value": "pianobar", + "label": "Pianobar" + }, + { + "value": "siren", + "label": "Siren" + }, + { + "value": "spacealarm", + "label": "Spacealarm" + }, + { + "value": "tugboat", + "label": "Tugboat" + }, + { + "value": "alien", + "label": "Alien" + }, + { + "value": "climb", + "label": "Climb" + }, + { + "value": "persistent", + "label": "Persistent" + }, + { + "value": "echo", + "label": "Echo" + }, + { + "value": "updown", + "label": "Updown" + }, + { + "value": "none", + "label": "None" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "User key", + "description": "The recipient user’s user key.", + "placeholder": "", + "propertyName": "user_key", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token", + "description": "Your registered application’s API token, see https://pushover.net/app", + "placeholder": "", + "propertyName": "token", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "Notification title.", + "placeholder": "{{ template \"pushover.default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message", + "description": "Notification message.", + "placeholder": "{{ template \"pushover.default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "A supplementary URL shown alongside the message.", + "placeholder": "{{ template \"pushover.default.url\" . }}", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "URL Title", + "description": "", + "placeholder": "", + "propertyName": "url_title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Device", + "description": "Optional device to send notification to, see https://pushover.net/api#device", + "placeholder": "", + "propertyName": "device", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Sound", + "description": "Optional sound to use for notification, see https://pushover.net/api#sound", + "placeholder": "", + "propertyName": "sound", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Priority", + "description": "Priority, see https://pushover.net/api#priority", + "placeholder": "{{ if eq .Status \"firing\" }}2{{ else }}0{{ end }}", + "propertyName": "priority", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Retry", + "description": "How often the Pushover servers will send the same notification to the user. Must be at least 30 seconds.", + "placeholder": "1m", + "propertyName": "retry", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Expire", + "description": "How long your notification will continue to be retried for, unless the user acknowledges the notification.", + "placeholder": "1h", + "propertyName": "expire", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "TTL", + "description": "The number of seconds before a message expires and is deleted automatically. Examples: 10s, 5m30s, 8h.", + "placeholder": "", + "propertyName": "ttl", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "HTML", + "description": "Enables HTML formatting of the message.", + "placeholder": "", + "propertyName": "html", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "sensugo", + "currentVersion": "v1", + "name": "Sensu Go", + "heading": "Sensu Go Settings", + "description": "Sends HTTP POST request to a Sensu Go API", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Backend URL", + "description": "", + "placeholder": "http://sensu-api.local:8080", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "API Key", + "description": "API key to auth to Sensu Go backend", + "placeholder": "", + "propertyName": "apikey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy entity name", + "description": "", + "placeholder": "default", + "propertyName": "entity", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Check name", + "description": "", + "placeholder": "default", + "propertyName": "check", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Handler", + "description": "", + "placeholder": "", + "propertyName": "handler", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Namespace", + "description": "", + "placeholder": "default", + "propertyName": "namespace", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "type": "slack", + "currentVersion": "v1", + "name": "Slack", + "heading": "Slack settings", + "description": "Sends notifications to Slack", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Recipient", + "description": "Specify channel, private group, or IM channel (can be an encoded ID or a name) - required unless you provide a webhook", + "placeholder": "", + "propertyName": "recipient", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "url", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token", + "description": "Provide a Slack API token (starts with \"xoxb\") - required unless you provide a webhook", + "placeholder": "", + "propertyName": "token", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "url", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "Set the username for the bot's message", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Icon emoji", + "description": "Provide an emoji to use as the icon for the bot's message. Overrides the icon URL.", + "placeholder": "", + "propertyName": "icon_emoji", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Icon URL", + "description": "Provide a URL to an image to use as the icon for the bot's message", + "placeholder": "", + "propertyName": "icon_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Mention Users", + "description": "Mention one or more users (comma separated) when notifying in a channel, by ID (you can copy this from the user's Slack profile)", + "placeholder": "", + "propertyName": "mentionUsers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Mention Groups", + "description": "Mention one or more groups (comma separated) when notifying in a channel (you can copy this from the group's Slack profile URL)", + "placeholder": "", + "propertyName": "mentionGroups", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Mention Channel", + "description": "Mention whole channel or just active members when notifying", + "placeholder": "", + "propertyName": "mentionChannel", + "selectOptions": [ + { + "value": "", + "label": "Disabled" + }, + { + "value": "here", + "label": "Every active channel member" + }, + { + "value": "channel", + "label": "Every channel member" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Webhook URL", + "description": "Optionally provide a Slack incoming webhook URL for sending messages, in this case the token isn't necessary", + "placeholder": "Slack incoming webhook URL", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "token", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Endpoint URL", + "description": "Optionally provide a custom Slack message API endpoint for non-webhook requests, default is https://slack.com/api/chat.postMessage", + "placeholder": "Slack endpoint url", + "propertyName": "endpointUrl", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Color", + "description": "Templated color of the slack message", + "placeholder": "{{ if eq .Status \"firing\" }}#D63232{{ else }}#36a64f{{ end }}", + "propertyName": "color", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "Templated title of the slack message", + "placeholder": "{{ template \"slack.default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Text Body", + "description": "Body of the slack message", + "placeholder": "{{ template \"slack.default.text\" . }}", + "propertyName": "text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Webhook URL", + "description": "The Slack webhook URL.", + "placeholder": "", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Channel", + "description": "The #channel or @user to send notifications to.", + "placeholder": "", + "propertyName": "channel", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "{{ template \"slack.default.username\" . }}", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Emoji icon", + "description": "", + "placeholder": "", + "propertyName": "icon_emoji", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Icon URL", + "description": "", + "placeholder": "", + "propertyName": "icon_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Names link", + "description": "", + "placeholder": "", + "propertyName": "link_names", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Callback ID", + "description": "", + "placeholder": "{{ template \"slack.default.callbackid\" . }}", + "propertyName": "callback_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Color", + "description": "", + "placeholder": "{{ if eq .Status \"firing\" }}danger{{ else }}good{{ end }}", + "propertyName": "color", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Fallback", + "description": "", + "placeholder": "{{ template \"slack.default.fallback\" . }}", + "propertyName": "fallback", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Footer", + "description": "", + "placeholder": "{{ template \"slack.default.footer\" . }}", + "propertyName": "footer", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Markdown Fields", + "description": "An array of field names that should be formatted by markdown syntax.", + "placeholder": "", + "propertyName": "mrkdwn_in", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Pre-text", + "description": "", + "placeholder": "{{ template \"slack.default.pretext\" . }}", + "propertyName": "pretext", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Short Fields", + "description": "", + "placeholder": "", + "propertyName": "short_fields", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message body", + "description": "", + "placeholder": "{{ template \"slack.default.text\" . }}", + "propertyName": "text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "", + "placeholder": "{{ template \"slack.default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title Link", + "description": "", + "placeholder": "{{ template \"slack.default.titlelink\" . }}", + "propertyName": "title_link", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Image URL", + "description": "", + "placeholder": "", + "propertyName": "image_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Thumbnail URL", + "description": "", + "placeholder": "", + "propertyName": "thumb_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform_array", + "inputType": "", + "label": "Actions", + "description": "", + "placeholder": "", + "propertyName": "actions", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Text", + "description": "", + "placeholder": "", + "propertyName": "text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "Either url or name and value are mandatory.", + "placeholder": "", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Name", + "description": "", + "placeholder": "", + "propertyName": "name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Value", + "description": "", + "placeholder": "", + "propertyName": "value", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "Confirm", + "description": "", + "placeholder": "", + "propertyName": "confirm", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Text", + "description": "", + "placeholder": "", + "propertyName": "text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Dismiss text", + "description": "", + "placeholder": "", + "propertyName": "dismiss_text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "OK text", + "description": "", + "placeholder": "", + "propertyName": "ok_text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "", + "placeholder": "", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "input", + "inputType": "text", + "label": "Style", + "description": "", + "placeholder": "", + "propertyName": "style", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform_array", + "inputType": "", + "label": "Fields", + "description": "", + "placeholder": "", + "propertyName": "fields", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "", + "placeholder": "", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Value", + "description": "", + "placeholder": "", + "propertyName": "value", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Short", + "description": "", + "placeholder": "", + "propertyName": "short", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "sns", + "currentVersion": "v1", + "name": "AWS SNS", + "heading": "Webex settings", + "description": "Sends notifications to AWS Simple Notification Service", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "The Amazon SNS API URL", + "description": "", + "placeholder": "", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "SigV4 Authentication", + "description": "Configures AWS's Signature Verification 4 signing process to sign requests", + "placeholder": "", + "propertyName": "sigv4", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Region", + "description": "The AWS region. If blank, the region from the default credentials chain is used.", + "placeholder": "", + "propertyName": "region", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Access Key", + "description": "The AWS API access key.", + "placeholder": "", + "propertyName": "access_key", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Secret Key", + "description": "The AWS API secret key.", + "placeholder": "", + "propertyName": "secret_key", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Profile", + "description": "Named AWS profile used to authenticate", + "placeholder": "", + "propertyName": "profile", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Role ARN", + "description": "AWS Role ARN, an alternative to using AWS API keys", + "placeholder": "", + "propertyName": "role_arn", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "input", + "inputType": "text", + "label": "SNS topic ARN", + "description": "If you don't specify this value, you must specify a value for the phone_number or target_arn. If you are using a FIFO SNS topic you should set a message group interval longer than 5 minutes to prevent messages with the same group key being deduplicated by the SNS default deduplication window.", + "placeholder": "", + "propertyName": "topic_arn", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Phone number", + "description": "Phone number if message is delivered via SMS in E.164 format. If you don't specify this value, you must specify a value for the topic_arn or target_arn", + "placeholder": "", + "propertyName": "phone_number", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Target ARN", + "description": "The mobile platform endpoint ARN if message is delivered via mobile notifications. If you don't specify this value, you must specify a value for the topic_arn or phone_number", + "placeholder": "", + "propertyName": "target_arn", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Subject", + "description": "Optional subject. By default, this field uses the default title template and can be customized with templates and custom messages. It cannot be an empty string", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "subject", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "Optional message. By default, this field uses the default message template and can be customized with templates and custom messages", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "text", + "label": "Attributes", + "description": "SNS message attributes", + "placeholder": "", + "propertyName": "attributes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API URL", + "description": "The Amazon SNS API URL", + "placeholder": "", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "SigV4 authentication", + "description": "Configures AWS's Signature Verification 4 signing process to sign requests", + "placeholder": "", + "propertyName": "sigv4", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Region", + "description": "The AWS region. If blank, the region from the default credentials chain is used", + "placeholder": "", + "propertyName": "Region", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Access key", + "description": "The AWS API access_key. If blank the environment variable \"AWS_ACCESS_KEY_ID\" is used", + "placeholder": "", + "propertyName": "AccessKey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Secret key", + "description": "The AWS API secret_key. If blank the environment variable \"AWS_ACCESS_SECRET_ID\" is used", + "placeholder": "", + "propertyName": "SecretKey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Profile", + "description": "Named AWS profile used to authenticate", + "placeholder": "", + "propertyName": "Profile", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Role ARN", + "description": "AWS Role ARN, an alternative to using AWS API keys", + "placeholder": "", + "propertyName": "RoleARN", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "input", + "inputType": "text", + "label": "SNS topic ARN", + "description": "If you don't specify this value, you must specify a value for the phone_number or target_arn. If you are using a FIFO SNS topic you should set a message group interval longer than 5 minutes to prevent messages with the same group key being deduplicated by the SNS default deduplication window", + "placeholder": "", + "propertyName": "topic_arn", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Phone number", + "description": "Phone number if message is delivered via SMS in E.164 format. If you don't specify this value, you must specify a value for the topic_arn or target_arn", + "placeholder": "", + "propertyName": "phone_number", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Target ARN", + "description": "The mobile platform endpoint ARN if message is delivered via mobile notifications. If you don't specify this value, you must specify a value for the topic_arn or phone_number", + "placeholder": "", + "propertyName": "target_arn", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Subject", + "description": "Subject line when the message is delivered", + "placeholder": "{{ template \"sns.default.subject\" . }}", + "propertyName": "subject", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message", + "description": "The message content of the SNS notification", + "placeholder": "{{ template \"sns.default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Attributes", + "description": "SNS message attributes", + "placeholder": "", + "propertyName": "attributes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "teams", + "currentVersion": "v1", + "name": "Microsoft Teams", + "heading": "Teams settings", + "description": "Sends notifications using Incoming Webhook connector to Microsoft Teams", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "Teams incoming webhook url", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title of the Teams message.", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Section Title", + "description": "Section title for the Teams message. Leave blank for none.", + "placeholder": "", + "propertyName": "sectiontitle", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "typeAlias": "msteamsv2", + "version": "v0mimir2", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Webhook URL", + "description": "The incoming webhook URL.", + "placeholder": "", + "propertyName": "webhook_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "Message title template.", + "placeholder": "{{ template \"msteamsv2.default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Text", + "description": "Message body template.", + "placeholder": "{{ template \"msteams.default.text\" . }}", + "propertyName": "text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + }, + { + "typeAlias": "msteams", + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Webhook URL", + "description": "The incoming webhook URL.", + "placeholder": "", + "propertyName": "webhook_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Title", + "description": "Message title template.", + "placeholder": "{{ template \"msteams.default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Summary", + "description": "Message summary template.", + "placeholder": "{{ template \"msteams.default.summary\" . }}", + "propertyName": "summary", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Text", + "description": "Message body template.", + "placeholder": "{{ template \"msteams.default.text\" . }}", + "propertyName": "text", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "telegram", + "currentVersion": "v1", + "name": "Telegram", + "heading": "Telegram API settings", + "description": "Sends notifications to Telegram", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "BOT API Token", + "description": "", + "placeholder": "Telegram BOT API Token", + "propertyName": "bottoken", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Chat ID", + "description": "Integer Telegram Chat Identifier", + "placeholder": "", + "propertyName": "chatid", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message Thread ID", + "description": "Integer Telegram Message Thread Identifier", + "placeholder": "", + "propertyName": "message_thread_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "-?[0-9]{1,10}", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Parse Mode", + "description": "Mode for parsing entities in the message text. Default is 'HTML'", + "placeholder": "", + "propertyName": "parse_mode", + "selectOptions": [ + { + "value": "None", + "label": "None" + }, + { + "value": "HTML", + "label": "HTML" + }, + { + "value": "Markdown", + "label": "Markdown" + }, + { + "value": "MarkdownV2", + "label": "Markdown V2" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Disable Web Page Preview", + "description": "Disables link previews for links in this message", + "placeholder": "", + "propertyName": "disable_web_page_preview", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Protect Content", + "description": "Protects the contents of the sent message from forwarding and saving", + "placeholder": "", + "propertyName": "protect_content", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Disable Notification", + "description": "Sends the message silently. Users will receive a notification with no sound.", + "placeholder": "", + "propertyName": "disable_notification", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API URL", + "description": "The Telegram API URL", + "placeholder": "https://api.telegram.org", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Bot token", + "description": "Telegram bot token", + "placeholder": "", + "propertyName": "token", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Chat ID", + "description": "ID of the chat where to send the messages", + "placeholder": "", + "propertyName": "chat_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message", + "description": "Message template", + "placeholder": "{{ template \"telegram.default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Disable notifications", + "description": "Disable telegram notifications", + "placeholder": "", + "propertyName": "disable_notifications", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Parse mode", + "description": "Parse mode for telegram message", + "placeholder": "", + "propertyName": "parse_mode", + "selectOptions": [ + { + "value": "", + "label": "None" + }, + { + "value": "MarkdownV2", + "label": "MarkdownV2" + }, + { + "value": "Markdown", + "label": "Markdown" + }, + { + "value": "HTML", + "label": "HTML" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "threema", + "currentVersion": "v1", + "name": "Threema Gateway", + "heading": "Threema Gateway settings", + "description": "Sends notifications to Threema using Threema Gateway (Basic IDs)", + "info": "Notifications can be configured for any Threema Gateway ID of type \"Basic\". End-to-End IDs are not currently supported.The Threema Gateway ID can be set up at https://gateway.threema.ch/.", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Gateway ID", + "description": "Your 8 character Threema Gateway Basic ID (starting with a *).", + "placeholder": "*3MAGWID", + "propertyName": "gateway_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "\\*[0-9A-Z]{7}", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Recipient ID", + "description": "The 8 character Threema ID that should receive the alerts.", + "placeholder": "YOUR3MID", + "propertyName": "recipient_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "[0-9A-Z]{8}", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "API Secret", + "description": "Your Threema Gateway API secret.", + "placeholder": "", + "propertyName": "api_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message.", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Description", + "description": "Templated description of the message.", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + }, + { + "type": "victorops", + "currentVersion": "v1", + "name": "VictorOps", + "heading": "VictorOps settings", + "description": "Sends notifications to VictorOps", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "VictorOps url", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Message Type", + "description": "", + "placeholder": "", + "propertyName": "messageType", + "selectOptions": [ + { + "value": "CRITICAL", + "label": "CRITICAL" + }, + { + "value": "WARNING", + "label": "WARNING" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title to display", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Description", + "description": "Templated description of the message", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "description", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API key", + "description": "The API key to use when talking to the VictorOps API.", + "placeholder": "", + "propertyName": "api_key", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "API URL", + "description": "The VictorOps API URL.", + "placeholder": "", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Routing key", + "description": "A key used to map the alert to a team.", + "placeholder": "", + "propertyName": "routing_key", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message type", + "description": "Describes the behavior of the alert (CRITICAL, WARNING, INFO).", + "placeholder": "CRITICAL", + "propertyName": "message_type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Entity display name", + "description": "Contains summary of the alerted problem.", + "placeholder": "{{ template \"victorops.default.entity_display_name\" . }}", + "propertyName": "entity_display_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "State message", + "description": "Contains long explanation of the alerted problem.", + "placeholder": "{{ template \"victorops.default.state_message\" . }}", + "propertyName": "state_message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Monitoring tool", + "description": "The monitoring tool the state message is from.", + "placeholder": "{{ template \"victorops.default.monitoring_tool\" . }}", + "propertyName": "monitoring_tool", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Custom Fields", + "description": "A set of arbitrary key/value pairs that provide further detail about the alert.", + "placeholder": "", + "propertyName": "custom_fields", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "webex", + "currentVersion": "v1", + "name": "Cisco Webex Teams", + "heading": "Webex settings", + "description": "Sends notifications to Cisco Webex Teams", + "info": "Notifications can be configured for any Cisco Webex Teams", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Cisco Webex API URL", + "description": "API endpoint at which we'll send webhooks to.", + "placeholder": "https://api.ciscospark.com/v1/messages", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Room ID", + "description": "The room ID to send messages to.", + "placeholder": "GMtOWY0ZGJkNzMyMGFl", + "propertyName": "room_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Bot Token", + "description": "Non-expiring access token of the bot that will post messages on our behalf.", + "placeholder": "GMtOWY0ZGJkNzMyMGFl-12535454-123213", + "propertyName": "bot_token", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Notification Template", + "description": "Notification template to use. Markdown is supported.", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API URL", + "description": "The Webex Teams API URL", + "placeholder": "https://webexapis.com/v1/messages", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Room ID", + "description": "ID of the Webex Teams room where to send the messages", + "placeholder": "", + "propertyName": "room_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message", + "description": "Message template", + "placeholder": "{{ template \"webex.default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "webhook", + "currentVersion": "v1", + "name": "Webhook", + "heading": "Webhook settings", + "description": "Sends HTTP POST request to a URL", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "", + "placeholder": "", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "HTTP Method", + "description": "", + "placeholder": "", + "propertyName": "httpMethod", + "selectOptions": [ + { + "value": "POST", + "label": "POST" + }, + { + "value": "PUT", + "label": "PUT" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "HTTP Basic Authentication - Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "HTTP Basic Authentication - Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Authorization Header - Scheme", + "description": "Optionally provide a scheme for the Authorization Request Header. Default is Bearer.", + "placeholder": "Bearer", + "propertyName": "authorization_scheme", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Authorization Header - Credentials", + "description": "Credentials for the Authorization Request header. Only one of HTTP Basic Authentication or Authorization Request Header can be set.", + "placeholder": "", + "propertyName": "authorization_credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "text", + "label": "Extra Headers", + "description": "Optionally provide extra headers to be used in the request.", + "placeholder": "", + "propertyName": "headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max Alerts", + "description": "Max alerts to include in a notification. Remaining alerts in the same batch will be ignored above this number. 0 means no limit.", + "placeholder": "", + "propertyName": "maxAlerts", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message.", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "Templated message to be used in the payload's \"message\" field.", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "Custom Payload", + "description": "Optionally provide a templated payload. Overrides 'Message' and 'Title' field.", + "placeholder": "", + "propertyName": "payload", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "textarea", + "inputType": "", + "label": "Payload Template", + "description": "Custom payload template.", + "placeholder": "{{ template \"webhook.default.payload\" . }}", + "propertyName": "template", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "text", + "label": "Payload Variables", + "description": "Optionally provide a variables to be used in the payload template. They will be available in the template as `.Vars.\u003cvariable_name\u003e`.", + "placeholder": "", + "propertyName": "vars", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "TLS", + "description": "TLS configuration options", + "placeholder": "", + "propertyName": "tlsConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "checkbox", + "inputType": "", + "label": "Disable certificate verification", + "description": "Do not verify the server's certificate chain and host name.", + "placeholder": "", + "propertyName": "insecureSkipVerify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "CA Certificate", + "description": "Certificate in PEM format to use when verifying the server's certificate chain.", + "placeholder": "", + "propertyName": "caCertificate", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Client Certificate", + "description": "Client certificate in PEM format to use when connecting to the server.", + "placeholder": "", + "propertyName": "clientCertificate", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Client Key", + "description": "Client key in PEM format to use when connecting to the server.", + "placeholder": "", + "propertyName": "clientKey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "HMAC Signature", + "description": "HMAC signature configuration options", + "placeholder": "", + "propertyName": "hmacConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Secret", + "description": "", + "placeholder": "", + "propertyName": "secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Header", + "description": "The header in which the HMAC signature will be included.", + "placeholder": "X-Grafana-Alerting-Signature", + "propertyName": "header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Timestamp header", + "description": "If set, the timestamp will be included in the HMAC signature. The value should be the name of the header to use.", + "placeholder": "", + "propertyName": "timestampHeader", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Common HTTP client options.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "OAuth2 configuration options", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "URL for the access token endpoint.", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "Client ID to use when authenticating.", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Client Secret", + "description": "Client secret to use when authenticating.", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Optional scopes to request when obtaining an access token.", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Endpoint Parameters", + "description": "Optional parameters to append to the access token request.", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS", + "description": "Optional TLS configuration options for OAuth2 requests.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "checkbox", + "inputType": "", + "label": "Disable certificate verification", + "description": "Do not verify the server's certificate chain and host name.", + "placeholder": "", + "propertyName": "insecureSkipVerify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "CA Certificate", + "description": "Certificate in PEM format to use when verifying the server's certificate chain.", + "placeholder": "", + "propertyName": "caCertificate", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Client Certificate", + "description": "Client certificate in PEM format to use when connecting to the server.", + "placeholder": "", + "propertyName": "clientCertificate", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Client Key", + "description": "Client key in PEM format to use when connecting to the server.", + "placeholder": "", + "propertyName": "clientKey", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Proxy Config", + "description": "Optional proxy configuration.", + "placeholder": "", + "propertyName": "proxy_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "https://proxy.example.com", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy from environment", + "description": "Use environment HTTP_PROXY, HTTPS_PROXY and NO_PROXY to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of addresses that should not use a proxy.", + "placeholder": "example.com,1.2.3.4", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "text", + "label": "Proxy Connect Header", + "description": "Optional headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + }, + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "URL", + "description": "The endpoint to send HTTP POST requests to.", + "placeholder": "", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "number", + "label": "Max alerts", + "description": "The maximum number of alerts to include in a single webhook message. Alerts above this threshold are truncated. When leaving this at its default value of 0, all alerts are included.", + "placeholder": "", + "propertyName": "max_alerts", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "(^\\d+$|^$)", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Timeout", + "description": "The maximum time to wait for a webhook request to complete, before failing the request and allowing it to be retried. The default value of 0s indicates that no timeout should be applied. NOTE: This will have no effect if set higher than the group_interval.", + "placeholder": "Use duration format, for example: 1.2s, 100ms", + "propertyName": "timeout", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "wechat", + "currentVersion": "v0mimir1", + "name": "WeChat", + "heading": "WeChat settings", + "description": "Sends notifications to WeChat", + "versions": [ + { + "version": "v0mimir1", + "canCreate": false, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "API URL", + "description": "", + "placeholder": "", + "propertyName": "api_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "API Secret", + "description": "The API key to use when talking to the WeChat API", + "placeholder": "", + "propertyName": "api_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Corp ID", + "description": "The corp id for authentication", + "placeholder": "", + "propertyName": "corp_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Message", + "description": "API request data as defined by the WeChat API", + "placeholder": "{{ template \"wechat.default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Message type", + "description": "Type of the message type", + "placeholder": "text", + "propertyName": "message_type", + "selectOptions": [ + { + "value": "text", + "label": "Text" + }, + { + "value": "markdown", + "label": "Markdown" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Agent ID", + "description": "", + "placeholder": "{{ template \"wechat.default.agent_id\" . }}", + "propertyName": "agent_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "To User", + "description": "", + "placeholder": "{{ template \"wechat.default.to_user\" . }}", + "propertyName": "to_user", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "To Party", + "description": "", + "placeholder": "{{ template \"wechat.default.to_party\" . }}", + "propertyName": "to_party", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "To Tag", + "description": "", + "placeholder": "{{ template \"wechat.default.to_tag\" . }}", + "propertyName": "to_tag", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "HTTP Config", + "description": "Note that `basic_auth` and `bearer_token` options are mutually exclusive.", + "placeholder": "", + "propertyName": "http_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "subform", + "inputType": "", + "label": "Basic auth", + "description": "Sets the `Authorization` header with the configured username and password.", + "placeholder": "", + "propertyName": "basic_auth", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Username", + "description": "", + "placeholder": "", + "propertyName": "username", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Password", + "description": "", + "placeholder": "", + "propertyName": "password", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "Authorization", + "description": "The HTTP authorization credentials for the targets.", + "placeholder": "", + "propertyName": "authorization", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Type", + "description": "", + "placeholder": "", + "propertyName": "type", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Credentials", + "description": "", + "placeholder": "", + "propertyName": "credentials", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "checkbox", + "inputType": "", + "label": "Follow redirects", + "description": "Whether the client should follow HTTP 3xx redirects.", + "placeholder": "", + "propertyName": "follow_redirects", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Enable HTTP2", + "description": "Whether the client should configure HTTP2.", + "placeholder": "", + "propertyName": "enable_http2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "HTTP Headers", + "description": "Headers to inject in the requests.", + "placeholder": "", + "propertyName": "http_headers", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Proxy URL", + "description": "HTTP proxy server to use to connect to the targets.", + "placeholder": "", + "propertyName": "proxy_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "No Proxy", + "description": "Comma-separated list of domains for which the proxy should not be used.", + "placeholder": "", + "propertyName": "no_proxy", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Proxy From Environment", + "description": "Makes use of net/http ProxyFromEnvironment function to determine proxies.", + "placeholder": "", + "propertyName": "proxy_from_environment", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Proxy Header Environment", + "description": "Headers to send to proxies during CONNECT requests.", + "placeholder": "", + "propertyName": "proxy_connect_header", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "tls_config", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + }, + { + "element": "subform", + "inputType": "", + "label": "OAuth2", + "description": "Configures the OAuth2 settings.", + "placeholder": "", + "propertyName": "oauth2", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Client ID", + "description": "The OAuth2 client ID", + "placeholder": "", + "propertyName": "client_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Client secret", + "description": "The OAuth2 client secret", + "placeholder": "", + "propertyName": "client_secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Token URL", + "description": "The OAuth2 token exchange URL", + "placeholder": "", + "propertyName": "token_url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "string_array", + "inputType": "", + "label": "Scopes", + "description": "Comma-separated list of scopes", + "placeholder": "", + "propertyName": "scopes", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "key_value_map", + "inputType": "", + "label": "Additional parameters", + "description": "", + "placeholder": "", + "propertyName": "endpoint_params", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "subform", + "inputType": "", + "label": "TLS config", + "description": "Configures the TLS settings.", + "placeholder": "", + "propertyName": "TLSConfig", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": [ + { + "element": "input", + "inputType": "text", + "label": "Server name", + "description": "ServerName extension to indicate the name of the server.", + "placeholder": "", + "propertyName": "server_name", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "checkbox", + "inputType": "", + "label": "Skip verify", + "description": "Disable validation of the server certificate.", + "placeholder": "", + "propertyName": "insecure_skip_verify", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Min TLS Version", + "description": "", + "placeholder": "", + "propertyName": "min_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Max TLS Version", + "description": "", + "placeholder": "", + "propertyName": "max_version", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "wecom", + "currentVersion": "v1", + "name": "WeCom", + "heading": "WeCom settings", + "description": "Send alerts generated by Grafana to WeCom", + "versions": [ + { + "version": "v1", + "canCreate": true, + "options": [ + { + "element": "input", + "inputType": "text", + "label": "Webhook URL", + "description": "Required if using GroupRobot", + "placeholder": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxxx", + "propertyName": "url", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "secret", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Agent ID", + "description": "Required if using APIAPP, see https://work.weixin.qq.com/wework_admin/frame#apps create ApiApp", + "placeholder": "1000002", + "propertyName": "agent_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "url", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "Corp ID", + "description": "Required if using APIAPP, see https://work.weixin.qq.com/wework_admin/frame#profile", + "placeholder": "wwxxxxxxxxx", + "propertyName": "corp_id", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": false, + "dependsOn": "url", + "subformOptions": null + }, + { + "element": "input", + "inputType": "password", + "label": "Secret", + "description": "Required if using APIAPP", + "placeholder": "secret", + "propertyName": "secret", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": true, + "validationRule": "", + "secure": true, + "dependsOn": "url", + "subformOptions": null + }, + { + "element": "select", + "inputType": "", + "label": "Message Type", + "description": "", + "placeholder": "Text", + "propertyName": "msgtype", + "selectOptions": [ + { + "value": "text", + "label": "Text" + }, + { + "value": "markdown", + "label": "Markdown" + } + ], + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "", + "label": "Message", + "description": "Custom WeCom message. You can use template variables.", + "placeholder": "{{ template \"default.message\" . }}", + "propertyName": "message", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "textarea", + "inputType": "text", + "label": "Title", + "description": "Templated title of the message", + "placeholder": "{{ template \"default.title\" . }}", + "propertyName": "title", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + }, + { + "element": "input", + "inputType": "text", + "label": "To User", + "description": "", + "placeholder": "@all", + "propertyName": "touser", + "selectOptions": null, + "showWhen": { + "field": "", + "is": "" + }, + "required": false, + "validationRule": "", + "secure": false, + "dependsOn": "", + "subformOptions": null + } + ] + } + ] + } +] \ No newline at end of file diff --git a/pkg/tests/apis/alerting/notifications/receivers/receiver_test.go b/pkg/tests/apis/alerting/notifications/receivers/receiver_test.go index 9c01e08ae26..b025f5b8074 100644 --- a/pkg/tests/apis/alerting/notifications/receivers/receiver_test.go +++ b/pkg/tests/apis/alerting/notifications/receivers/receiver_test.go @@ -1318,7 +1318,7 @@ func TestIntegrationCRUD(t *testing.T) { expected := notify.AllKnownConfigsForTesting[strings.ToLower(integration.Type)] var fields map[string]any require.NoError(t, json.Unmarshal([]byte(expected.Config), &fields)) - secretFields, err := channels_config.GetSecretKeysForContactPointType(integration.Type) + secretFields, err := channels_config.GetSecretKeysForContactPointType(integration.Type, channels_config.V1) require.NoError(t, err) for _, field := range secretFields { if _, ok := fields[field]; !ok { // skip field that is not in the original setting