@@ -14,6 +14,7 @@ package controller
14
14
15
15
import (
16
16
"context"
17
+ "encoding/pem"
17
18
"errors"
18
19
"fmt"
19
20
"path"
@@ -164,14 +165,9 @@ func SetGatewayListenerConditionAccepted(gw *gatewayv1.Gateway, listenerName str
164
165
}
165
166
166
167
func 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
-
172
168
condition := metav1.Condition {
173
169
Type : string (gatewayv1 .ListenerConditionProgrammed ),
174
- Status : conditionStatus ,
170
+ Status : ConditionStatus ( status ) ,
175
171
Reason : string (gatewayv1 .ListenerReasonProgrammed ),
176
172
ObservedGeneration : gw .GetGeneration (),
177
173
Message : message ,
@@ -186,14 +182,9 @@ func SetGatewayListenerConditionProgrammed(gw *gatewayv1.Gateway, listenerName s
186
182
}
187
183
188
184
func 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
-
194
185
condition := metav1.Condition {
195
186
Type : string (gatewayv1 .ListenerConditionResolvedRefs ),
196
- Status : conditionStatus ,
187
+ Status : ConditionStatus ( status ) ,
197
188
Reason : string (gatewayv1 .ListenerReasonResolvedRefs ),
198
189
ObservedGeneration : gw .GetGeneration (),
199
190
Message : message ,
@@ -208,14 +199,9 @@ func SetGatewayListenerConditionResolvedRefs(gw *gatewayv1.Gateway, listenerName
208
199
}
209
200
210
201
func SetGatewayConditionProgrammed (gw * gatewayv1.Gateway , status bool , message string ) (ok bool ) {
211
- conditionStatus := metav1 .ConditionTrue
212
- if ! status {
213
- conditionStatus = metav1 .ConditionFalse
214
- }
215
-
216
202
condition := metav1.Condition {
217
203
Type : string (gatewayv1 .GatewayConditionProgrammed ),
218
- Status : conditionStatus ,
204
+ Status : ConditionStatus ( status ) ,
219
205
Reason : string (gatewayv1 .GatewayReasonProgrammed ),
220
206
ObservedGeneration : gw .GetGeneration (),
221
207
Message : message ,
@@ -672,8 +658,9 @@ func getListenerStatus(
672
658
return nil , err
673
659
}
674
660
var (
675
- reasonResolvedRef = string (gatewayv1 .ListenerReasonResolvedRefs )
676
- statusResolvedRef = metav1 .ConditionTrue
661
+ reasonResolvedRef = string (gatewayv1 .ListenerReasonResolvedRefs )
662
+ statusResolvedRef = metav1 .ConditionTrue
663
+ messageResolvedRef string
677
664
678
665
reasonProgrammed = string (gatewayv1 .ListenerReasonProgrammed )
679
666
statusProgrammed = metav1 .ConditionTrue
@@ -707,24 +694,40 @@ func getListenerStatus(
707
694
708
695
if listener .TLS != nil {
709
696
// TODO: support TLS
710
- secret := corev1.Secret {}
711
- resolved := true
697
+ var (
698
+ secret corev1.Secret
699
+ resolved = true
700
+ )
712
701
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
+ }
713
712
ns := gateway .Namespace
714
713
if ref .Namespace != nil {
715
714
ns = string (* ref .Namespace )
716
715
}
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 {
721
717
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 )
722
724
break
723
725
}
724
726
}
725
727
if ! resolved {
726
728
reasonResolvedRef = string (gatewayv1 .ListenerReasonInvalidCertificateRef )
727
729
statusResolvedRef = metav1 .ConditionFalse
730
+ reasonProgrammed = string (gatewayv1 .ListenerReasonInvalid )
728
731
statusProgrammed = metav1 .ConditionFalse
729
732
}
730
733
}
@@ -757,6 +760,7 @@ func getListenerStatus(
757
760
ObservedGeneration : gateway .Generation ,
758
761
LastTransitionTime : metav1 .Now (),
759
762
Reason : reasonResolvedRef ,
763
+ Message : messageResolvedRef ,
760
764
},
761
765
}
762
766
@@ -1030,3 +1034,21 @@ func isRouteAccepted(gateways []RouteParentRefContext) bool {
1030
1034
}
1031
1035
return false
1032
1036
}
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