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 }