notification-lark/config.go (148 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package lark import ( "context" "encoding/json" "github.com/apache/answer-plugins/notification-lark/i18n" "github.com/apache/answer/plugin" lark "github.com/larksuite/oapi-sdk-go/v3" larkCore "github.com/larksuite/oapi-sdk-go/v3/core" larkWebSocket "github.com/larksuite/oapi-sdk-go/v3/ws" "github.com/segmentfault/pacman/log" ) type NotificationConfig struct { Version string `json:"version"` AppID string `json:"app_id"` AppSecret string `json:"app_secret"` VerificationToken string `json:"verification_token"` EventEncryptKey string `json:"event_encrypt_key"` } func (n *NotificationConfig) GetVersion() string { if n == nil { return "" } return n.Version } func (n *NotificationConfig) GetAppID() string { if n == nil { return "" } return n.AppID } func (n *NotificationConfig) GetAppSecret() string { if n == nil { return "" } return n.AppSecret } func (n *NotificationConfig) GetVerificationToken() string { if n == nil { return "" } return n.VerificationToken } func (n *NotificationConfig) GetEventEncryptKey() string { if n == nil { return "" } return n.EventEncryptKey } func (n *Notification) ConfigFields() []plugin.ConfigField { return []plugin.ConfigField{ { Name: "version", Type: plugin.ConfigTypeSelect, Title: plugin.MakeTranslator(i18n.ConfigVersionTitle), Description: plugin.MakeTranslator(i18n.ConfigVersionDescription), Required: true, Value: n.config.GetVersion(), Options: []plugin.ConfigFieldOption{ { Label: plugin.MakeTranslator(i18n.ConfigVersionOptionsFeishu), Value: i18n.ConfigVersionOptionsFeishu, }, { Label: plugin.MakeTranslator(i18n.ConfigVersionOptionsLark), Value: i18n.ConfigVersionOptionsLark, }, }, }, { Name: "app_id", Type: plugin.ConfigTypeInput, Title: plugin.MakeTranslator(i18n.ConfigAppIdTitle), Description: plugin.MakeTranslator(i18n.ConfigAppIdDescription), Required: true, Value: n.config.GetAppID(), }, { Name: "app_secret", Type: plugin.ConfigTypeInput, Title: plugin.MakeTranslator(i18n.ConfigAppSecretTitle), Description: plugin.MakeTranslator(i18n.ConfigAppSecretDescription), Required: true, Value: n.config.GetAppSecret(), UIOptions: plugin.ConfigFieldUIOptions{ InputType: plugin.InputTypePassword, }, }, { Name: "event_encrypt_key", Type: plugin.ConfigTypeInput, Title: plugin.MakeTranslator(i18n.ConfigEventEncryptKeyTitle), Description: plugin.MakeTranslator(i18n.ConfigEventEncryptKeyDescription), Required: false, Value: n.config.GetEventEncryptKey(), UIOptions: plugin.ConfigFieldUIOptions{ InputType: plugin.InputTypePassword, }, }, { Name: "verification_token", Type: plugin.ConfigTypeInput, Title: plugin.MakeTranslator(i18n.ConfigVerificationTokenTitle), Description: plugin.MakeTranslator(i18n.ConfigVerificationTokenDescription), Required: false, Value: n.config.GetVerificationToken(), UIOptions: plugin.ConfigFieldUIOptions{ InputType: plugin.InputTypePassword, }, }, } } type LarkLogger struct{} func (l LarkLogger) Debug(ctx context.Context, args ...interface{}) { log.Debug(args...) } func (l LarkLogger) Info(ctx context.Context, args ...interface{}) { log.Info(args...) } func (l LarkLogger) Warn(ctx context.Context, args ...interface{}) { log.Warn(args...) } func (l LarkLogger) Error(ctx context.Context, args ...interface{}) { log.Error(args...) } func (n *Notification) ConfigReceiver(config []byte) error { c := &NotificationConfig{} if err := json.Unmarshal(config, c); err != nil { return err } n.config = c larkDomain := lark.FeishuBaseUrl if c.Version == i18n.ConfigVersionOptionsLark { larkDomain = lark.LarkBaseUrl } n.client = &LarkClient{ ws: larkWebSocket.NewClient( n.config.GetAppID(), n.config.GetAppSecret(), larkWebSocket.WithDomain(larkDomain), larkWebSocket.WithLogger(LarkLogger{}), larkWebSocket.WithLogLevel(larkCore.LogLevelDebug), larkWebSocket.WithEventHandler(n.LarkWsEventHub()), ), http: lark.NewClient(n.config.GetAppID(), n.config.GetAppSecret()), } go n.client.Start() return nil }