@@ -14,6 +14,7 @@ package controller
1414
1515import (
1616 "context"
17+ "encoding/pem"
1718 "errors"
1819 "fmt"
1920 "path"
@@ -164,14 +165,9 @@ func SetGatewayListenerConditionAccepted(gw *gatewayv1.Gateway, listenerName str
164165}
165166
166167func SetGatewayListenerConditionProgrammed (gw * gatewayv1.Gateway , listenerName string , status bool , message string ) (ok bool ) {
167- conditionStatus := metav1 .ConditionTrue
168- if ! status {
169- conditionStatus = metav1 .ConditionFalse
170- }
171-
172168 condition := metav1.Condition {
173169 Type : string (gatewayv1 .ListenerConditionProgrammed ),
174- Status : conditionStatus ,
170+ Status : ConditionStatus ( status ) ,
175171 Reason : string (gatewayv1 .ListenerReasonProgrammed ),
176172 ObservedGeneration : gw .GetGeneration (),
177173 Message : message ,
@@ -186,14 +182,9 @@ func SetGatewayListenerConditionProgrammed(gw *gatewayv1.Gateway, listenerName s
186182}
187183
188184func SetGatewayListenerConditionResolvedRefs (gw * gatewayv1.Gateway , listenerName string , status bool , message string ) (ok bool ) {
189- conditionStatus := metav1 .ConditionTrue
190- if ! status {
191- conditionStatus = metav1 .ConditionFalse
192- }
193-
194185 condition := metav1.Condition {
195186 Type : string (gatewayv1 .ListenerConditionResolvedRefs ),
196- Status : conditionStatus ,
187+ Status : ConditionStatus ( status ) ,
197188 Reason : string (gatewayv1 .ListenerReasonResolvedRefs ),
198189 ObservedGeneration : gw .GetGeneration (),
199190 Message : message ,
@@ -208,14 +199,9 @@ func SetGatewayListenerConditionResolvedRefs(gw *gatewayv1.Gateway, listenerName
208199}
209200
210201func SetGatewayConditionProgrammed (gw * gatewayv1.Gateway , status bool , message string ) (ok bool ) {
211- conditionStatus := metav1 .ConditionTrue
212- if ! status {
213- conditionStatus = metav1 .ConditionFalse
214- }
215-
216202 condition := metav1.Condition {
217203 Type : string (gatewayv1 .GatewayConditionProgrammed ),
218- Status : conditionStatus ,
204+ Status : ConditionStatus ( status ) ,
219205 Reason : string (gatewayv1 .GatewayReasonProgrammed ),
220206 ObservedGeneration : gw .GetGeneration (),
221207 Message : message ,
@@ -672,8 +658,9 @@ func getListenerStatus(
672658 return nil , err
673659 }
674660 var (
675- reasonResolvedRef = string (gatewayv1 .ListenerReasonResolvedRefs )
676- statusResolvedRef = metav1 .ConditionTrue
661+ reasonResolvedRef = string (gatewayv1 .ListenerReasonResolvedRefs )
662+ statusResolvedRef = metav1 .ConditionTrue
663+ messageResolvedRef string
677664
678665 reasonProgrammed = string (gatewayv1 .ListenerReasonProgrammed )
679666 statusProgrammed = metav1 .ConditionTrue
@@ -707,24 +694,40 @@ func getListenerStatus(
707694
708695 if listener .TLS != nil {
709696 // TODO: support TLS
710- secret := corev1.Secret {}
711- resolved := true
697+ var (
698+ secret corev1.Secret
699+ resolved = true
700+ )
712701 for _ , ref := range listener .TLS .CertificateRefs {
702+ if ref .Group != nil && * ref .Group != corev1 .GroupName {
703+ resolved = false
704+ messageResolvedRef = fmt .Sprintf (`Invalid Group, expect "", got "%s"` , * ref .Group )
705+ break
706+ }
707+ if ref .Kind != nil && * ref .Kind != "Secret" {
708+ resolved = false
709+ messageResolvedRef = fmt .Sprintf (`Invalid Kind, expect "Secret", got "%s"` , * ref .Kind )
710+ break
711+ }
713712 ns := gateway .Namespace
714713 if ref .Namespace != nil {
715714 ns = string (* ref .Namespace )
716715 }
717- if err := mrgc .Get (ctx , client.ObjectKey {
718- Namespace : ns ,
719- Name : string (ref .Name ),
720- }, & secret ); err != nil {
716+ if err := mrgc .Get (ctx , client.ObjectKey {Namespace : ns , Name : string (ref .Name )}, & secret ); err != nil {
721717 resolved = false
718+ messageResolvedRef = err .Error ()
719+ break
720+ }
721+ if reason , ok := isTLSSecretValid (& secret ); ! ok {
722+ resolved = false
723+ messageResolvedRef = fmt .Sprintf ("Malformed Secret referenced: %s" , reason )
722724 break
723725 }
724726 }
725727 if ! resolved {
726728 reasonResolvedRef = string (gatewayv1 .ListenerReasonInvalidCertificateRef )
727729 statusResolvedRef = metav1 .ConditionFalse
730+ reasonProgrammed = string (gatewayv1 .ListenerReasonInvalid )
728731 statusProgrammed = metav1 .ConditionFalse
729732 }
730733 }
@@ -757,6 +760,7 @@ func getListenerStatus(
757760 ObservedGeneration : gateway .Generation ,
758761 LastTransitionTime : metav1 .Now (),
759762 Reason : reasonResolvedRef ,
763+ Message : messageResolvedRef ,
760764 },
761765 }
762766
@@ -1030,3 +1034,21 @@ func isRouteAccepted(gateways []RouteParentRefContext) bool {
10301034 }
10311035 return false
10321036}
1037+
1038+ func isTLSSecretValid (secret * corev1.Secret ) (string , bool ) {
1039+ var ok bool
1040+ var crt , key []byte
1041+ if crt , ok = secret .Data ["tls.crt" ]; ! ok {
1042+ return "Missing tls.crt" , false
1043+ }
1044+ if key , ok = secret .Data ["tls.key" ]; ! ok {
1045+ return "Missing tls.key" , false
1046+ }
1047+ if p , _ := pem .Decode (crt ); p == nil {
1048+ return "Malformed PEM tls.crt" , false
1049+ }
1050+ if p , _ := pem .Decode (key ); p == nil {
1051+ return "Malformed PEM tls.key" , false
1052+ }
1053+ return "" , true
1054+ }
0 commit comments