kubesphere.io/api@v0.0.0-20231107125330-c9a03957060c/notification/v2beta2/config_conversion.go (about)

     1  /*
     2  
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package v2beta2
    18  
    19  import (
    20  	"kubesphere.io/api/notification/v2beta1"
    21  	"sigs.k8s.io/controller-runtime/pkg/conversion"
    22  )
    23  
    24  // ConvertTo converts this Config to the Hub version (v2beta1).
    25  func (src *Config) ConvertTo(dstRaw conversion.Hub) error {
    26  
    27  	dst := dstRaw.(*v2beta1.Config)
    28  	dst.ObjectMeta = src.ObjectMeta
    29  
    30  	if err := src.convertDingTalkTo(dst); err != nil {
    31  		return err
    32  	}
    33  
    34  	if err := src.convertEmailTo(dst); err != nil {
    35  		return err
    36  	}
    37  
    38  	if err := src.convertSlackTo(dst); err != nil {
    39  		return err
    40  	}
    41  
    42  	if err := src.convertWebhookTo(dst); err != nil {
    43  		return err
    44  	}
    45  
    46  	if err := src.convertWechatTo(dst); err != nil {
    47  		return err
    48  	}
    49  
    50  	return nil
    51  }
    52  
    53  // ConvertFrom converts from the Hub version (v2beta1) to this version.
    54  func (dst *Config) ConvertFrom(srcRaw conversion.Hub) error {
    55  
    56  	src := srcRaw.(*v2beta1.Config)
    57  	dst.ObjectMeta = src.ObjectMeta
    58  
    59  	if err := dst.convertDingTalkFrom(src); err != nil {
    60  		return err
    61  	}
    62  
    63  	if err := dst.convertEmailFrom(src); err != nil {
    64  		return err
    65  	}
    66  
    67  	if err := dst.convertSlackFrom(src); err != nil {
    68  		return err
    69  	}
    70  
    71  	if err := dst.convertWebhookFrom(src); err != nil {
    72  		return err
    73  	}
    74  
    75  	if err := dst.convertWechatFrom(src); err != nil {
    76  		return err
    77  	}
    78  
    79  	return nil
    80  }
    81  
    82  func (src *Config) convertDingTalkTo(dst *v2beta1.Config) error {
    83  
    84  	if src.Spec.DingTalk == nil {
    85  		return nil
    86  	}
    87  
    88  	dingtalk := src.Spec.DingTalk
    89  	dst.Spec.DingTalk = &v2beta1.DingTalkConfig{
    90  		Labels: dingtalk.Labels,
    91  	}
    92  
    93  	if dingtalk.Conversation != nil {
    94  		dst.Spec.DingTalk.Conversation = &v2beta1.DingTalkApplicationConfig{
    95  			AppKey:    credentialToSecretKeySelector(dingtalk.Conversation.AppKey),
    96  			AppSecret: credentialToSecretKeySelector(dingtalk.Conversation.AppSecret),
    97  		}
    98  	}
    99  
   100  	return nil
   101  }
   102  
   103  func (src *Config) convertEmailTo(dst *v2beta1.Config) error {
   104  
   105  	if src.Spec.Email == nil {
   106  		return nil
   107  	}
   108  
   109  	email := src.Spec.Email
   110  	dst.Spec.Email = &v2beta1.EmailConfig{
   111  		Labels: email.Labels,
   112  		From:   email.From,
   113  		SmartHost: v2beta1.HostPort{
   114  			Host: email.SmartHost.Host,
   115  			Port: email.SmartHost.Port,
   116  		},
   117  		Hello:        email.Hello,
   118  		AuthUsername: email.AuthUsername,
   119  		AuthPassword: credentialToSecretKeySelector(email.AuthPassword),
   120  		AuthSecret:   credentialToSecretKeySelector(email.AuthSecret),
   121  		AuthIdentify: email.AuthIdentify,
   122  		RequireTLS:   email.RequireTLS,
   123  		TLS:          convertTLSConfigTo(email.TLS),
   124  	}
   125  
   126  	return nil
   127  }
   128  
   129  func (src *Config) convertSlackTo(dst *v2beta1.Config) error {
   130  
   131  	if src.Spec.Slack == nil {
   132  		return nil
   133  	}
   134  
   135  	slack := src.Spec.Slack
   136  	dst.Spec.Slack = &v2beta1.SlackConfig{
   137  		Labels:           slack.Labels,
   138  		SlackTokenSecret: credentialToSecretKeySelector(slack.SlackTokenSecret),
   139  	}
   140  
   141  	return nil
   142  }
   143  
   144  func (src *Config) convertWebhookTo(dst *v2beta1.Config) error {
   145  
   146  	if src.Spec.Webhook == nil {
   147  		return nil
   148  	}
   149  
   150  	dst.Spec.Webhook = &v2beta1.WebhookConfig{
   151  		Labels: src.Spec.Webhook.Labels,
   152  	}
   153  
   154  	return nil
   155  }
   156  
   157  func (src *Config) convertWechatTo(dst *v2beta1.Config) error {
   158  
   159  	if src.Spec.Wechat == nil {
   160  		return nil
   161  	}
   162  
   163  	wechat := src.Spec.Wechat
   164  	dst.Spec.Wechat = &v2beta1.WechatConfig{
   165  		Labels:           wechat.Labels,
   166  		WechatApiUrl:     wechat.WechatApiUrl,
   167  		WechatApiCorpId:  wechat.WechatApiCorpId,
   168  		WechatApiAgentId: wechat.WechatApiAgentId,
   169  		WechatApiSecret:  credentialToSecretKeySelector(wechat.WechatApiSecret),
   170  	}
   171  
   172  	return nil
   173  }
   174  
   175  func (dst *Config) convertDingTalkFrom(src *v2beta1.Config) error {
   176  
   177  	if src.Spec.DingTalk == nil {
   178  		return nil
   179  	}
   180  
   181  	dingtalk := src.Spec.DingTalk
   182  	dst.Spec.DingTalk = &DingTalkConfig{
   183  		Labels: dingtalk.Labels,
   184  	}
   185  
   186  	if dingtalk.Conversation != nil {
   187  		dst.Spec.DingTalk.Conversation = &DingTalkApplicationConfig{
   188  			AppKey:    secretKeySelectorToCredential(dingtalk.Conversation.AppKey),
   189  			AppSecret: secretKeySelectorToCredential(dingtalk.Conversation.AppSecret),
   190  		}
   191  	}
   192  
   193  	return nil
   194  }
   195  
   196  func (dst *Config) convertEmailFrom(src *v2beta1.Config) error {
   197  
   198  	if src.Spec.Email == nil {
   199  		return nil
   200  	}
   201  
   202  	email := src.Spec.Email
   203  	dst.Spec.Email = &EmailConfig{
   204  		Labels: email.Labels,
   205  		From:   email.From,
   206  		SmartHost: HostPort{
   207  			Host: email.SmartHost.Host,
   208  			Port: email.SmartHost.Port,
   209  		},
   210  		Hello:        email.Hello,
   211  		AuthUsername: email.AuthUsername,
   212  		AuthPassword: secretKeySelectorToCredential(email.AuthPassword),
   213  		AuthSecret:   secretKeySelectorToCredential(email.AuthSecret),
   214  		AuthIdentify: email.AuthIdentify,
   215  		RequireTLS:   email.RequireTLS,
   216  		TLS:          convertTLSConfigFrom(email.TLS),
   217  	}
   218  
   219  	return nil
   220  }
   221  
   222  func (dst *Config) convertSlackFrom(src *v2beta1.Config) error {
   223  
   224  	if src.Spec.Slack == nil {
   225  		return nil
   226  	}
   227  
   228  	slack := src.Spec.Slack
   229  	dst.Spec.Slack = &SlackConfig{
   230  		Labels:           slack.Labels,
   231  		SlackTokenSecret: secretKeySelectorToCredential(slack.SlackTokenSecret),
   232  	}
   233  
   234  	return nil
   235  }
   236  
   237  func (dst *Config) convertWebhookFrom(src *v2beta1.Config) error {
   238  
   239  	if src.Spec.Webhook == nil {
   240  		return nil
   241  	}
   242  
   243  	dst.Spec.Webhook = &WebhookConfig{
   244  		Labels: src.Spec.Webhook.Labels,
   245  	}
   246  
   247  	return nil
   248  }
   249  
   250  func (dst *Config) convertWechatFrom(src *v2beta1.Config) error {
   251  
   252  	if src.Spec.Wechat == nil {
   253  		return nil
   254  	}
   255  
   256  	wechat := src.Spec.Wechat
   257  	dst.Spec.Wechat = &WechatConfig{
   258  		Labels:           wechat.Labels,
   259  		WechatApiUrl:     wechat.WechatApiUrl,
   260  		WechatApiCorpId:  wechat.WechatApiCorpId,
   261  		WechatApiAgentId: wechat.WechatApiAgentId,
   262  		WechatApiSecret:  secretKeySelectorToCredential(wechat.WechatApiSecret),
   263  	}
   264  
   265  	return nil
   266  }
   267  
   268  func convertTLSConfigTo(src *TLSConfig) *v2beta1.TLSConfig {
   269  
   270  	if src == nil {
   271  		return nil
   272  	}
   273  
   274  	dst := &v2beta1.TLSConfig{
   275  		RootCA:             credentialToSecretKeySelector(src.RootCA),
   276  		ServerName:         src.ServerName,
   277  		InsecureSkipVerify: src.InsecureSkipVerify,
   278  	}
   279  
   280  	if src.ClientCertificate != nil {
   281  		dst.ClientCertificate = &v2beta1.ClientCertificate{
   282  			Cert: credentialToSecretKeySelector(src.Cert),
   283  			Key:  credentialToSecretKeySelector(src.Key),
   284  		}
   285  	}
   286  
   287  	return dst
   288  }
   289  
   290  func convertTLSConfigFrom(src *v2beta1.TLSConfig) *TLSConfig {
   291  
   292  	if src == nil {
   293  		return nil
   294  	}
   295  
   296  	dst := &TLSConfig{
   297  		RootCA:             secretKeySelectorToCredential(src.RootCA),
   298  		ServerName:         src.ServerName,
   299  		InsecureSkipVerify: src.InsecureSkipVerify,
   300  	}
   301  
   302  	if src.ClientCertificate != nil {
   303  		dst.ClientCertificate = &ClientCertificate{
   304  			Cert: secretKeySelectorToCredential(src.Cert),
   305  			Key:  secretKeySelectorToCredential(src.Key),
   306  		}
   307  	}
   308  
   309  	return dst
   310  }
   311  
   312  func credentialToSecretKeySelector(src *Credential) *v2beta1.SecretKeySelector {
   313  
   314  	if src == nil || src.ValueFrom == nil || src.ValueFrom.SecretKeyRef == nil {
   315  		return nil
   316  	}
   317  
   318  	return &v2beta1.SecretKeySelector{
   319  		Key:       src.ValueFrom.SecretKeyRef.Key,
   320  		Name:      src.ValueFrom.SecretKeyRef.Name,
   321  		Namespace: src.ValueFrom.SecretKeyRef.Namespace,
   322  	}
   323  }
   324  
   325  func secretKeySelectorToCredential(selector *v2beta1.SecretKeySelector) *Credential {
   326  
   327  	if selector == nil {
   328  		return nil
   329  	}
   330  
   331  	return &Credential{
   332  		ValueFrom: &ValueSource{
   333  			SecretKeyRef: &SecretKeySelector{
   334  				Key:       selector.Key,
   335  				Name:      selector.Name,
   336  				Namespace: selector.Namespace,
   337  			},
   338  		},
   339  	}
   340  }