|
@@ -17,6 +17,7 @@ limitations under the License.
|
|
|
package esutils
|
|
package esutils
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
|
|
+ "context"
|
|
|
"encoding/json"
|
|
"encoding/json"
|
|
|
"errors"
|
|
"errors"
|
|
|
"reflect"
|
|
"reflect"
|
|
@@ -29,6 +30,7 @@ import (
|
|
|
v1 "k8s.io/api/core/v1"
|
|
v1 "k8s.io/api/core/v1"
|
|
|
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
|
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
|
|
|
+ clientfake "sigs.k8s.io/controller-runtime/pkg/client/fake"
|
|
|
|
|
|
|
|
esv1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1"
|
|
esv1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1"
|
|
|
esv1alpha1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1alpha1"
|
|
esv1alpha1 "github.com/external-secrets/external-secrets/apis/externalsecrets/v1alpha1"
|
|
@@ -1437,6 +1439,82 @@ func TestValidateReferentServiceAccountSelector(t *testing.T) {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+func TestFetchCACertFromSourceRejectsCrossNamespaceCAProviderConfigMapForSecretStore(t *testing.T) {
|
|
|
|
|
+ fakeClient := clientfake.NewClientBuilder().WithObjects(
|
|
|
|
|
+ &v1.ConfigMap{
|
|
|
|
|
+ ObjectMeta: metav1.ObjectMeta{
|
|
|
|
|
+ Name: "ca-cm",
|
|
|
|
|
+ Namespace: "default",
|
|
|
|
|
+ },
|
|
|
|
|
+ Data: map[string]string{
|
|
|
|
|
+ "ca.crt": "local-cert",
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ &v1.ConfigMap{
|
|
|
|
|
+ ObjectMeta: metav1.ObjectMeta{
|
|
|
|
|
+ Name: "ca-cm",
|
|
|
|
|
+ Namespace: "other",
|
|
|
|
|
+ },
|
|
|
|
|
+ Data: map[string]string{
|
|
|
|
|
+ "ca.crt": "other-cert",
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ ).Build()
|
|
|
|
|
+
|
|
|
|
|
+ cert, err := FetchCACertFromSource(context.Background(), CreateCertOpts{
|
|
|
|
|
+ CAProvider: &esv1.CAProvider{
|
|
|
|
|
+ Type: esv1.CAProviderTypeConfigMap,
|
|
|
|
|
+ Name: "ca-cm",
|
|
|
|
|
+ Key: "ca.crt",
|
|
|
|
|
+ Namespace: Ptr("other"),
|
|
|
|
|
+ },
|
|
|
|
|
+ StoreKind: esv1.SecretStoreKind,
|
|
|
|
|
+ Namespace: "default",
|
|
|
|
|
+ Client: fakeClient,
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ assert.ErrorIs(t, err, errNamespaceNotAllowed)
|
|
|
|
|
+ assert.Nil(t, cert)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func TestFetchCACertFromSourceRejectsCrossNamespaceCAProviderSecretForSecretStore(t *testing.T) {
|
|
|
|
|
+ fakeClient := clientfake.NewClientBuilder().WithObjects(
|
|
|
|
|
+ &v1.Secret{
|
|
|
|
|
+ ObjectMeta: metav1.ObjectMeta{
|
|
|
|
|
+ Name: "ca-secret",
|
|
|
|
|
+ Namespace: "default",
|
|
|
|
|
+ },
|
|
|
|
|
+ Data: map[string][]byte{
|
|
|
|
|
+ "tls.crt": []byte("local-cert"),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ &v1.Secret{
|
|
|
|
|
+ ObjectMeta: metav1.ObjectMeta{
|
|
|
|
|
+ Name: "ca-secret",
|
|
|
|
|
+ Namespace: "other",
|
|
|
|
|
+ },
|
|
|
|
|
+ Data: map[string][]byte{
|
|
|
|
|
+ "tls.crt": []byte("other-cert"),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
|
|
+ ).Build()
|
|
|
|
|
+
|
|
|
|
|
+ cert, err := FetchCACertFromSource(context.Background(), CreateCertOpts{
|
|
|
|
|
+ CAProvider: &esv1.CAProvider{
|
|
|
|
|
+ Type: esv1.CAProviderTypeSecret,
|
|
|
|
|
+ Name: "ca-secret",
|
|
|
|
|
+ Key: "tls.crt",
|
|
|
|
|
+ Namespace: Ptr("other"),
|
|
|
|
|
+ },
|
|
|
|
|
+ StoreKind: esv1.SecretStoreKind,
|
|
|
|
|
+ Namespace: "default",
|
|
|
|
|
+ Client: fakeClient,
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ assert.ErrorIs(t, err, errNamespaceNotAllowed)
|
|
|
|
|
+ assert.Nil(t, cert)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
const mockJWTToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.signature"
|
|
const mockJWTToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiZXhwIjoxNzAwMDAwMDAwfQ.signature"
|
|
|
|
|
|
|
|
func TestParseJWTClaims(t *testing.T) {
|
|
func TestParseJWTClaims(t *testing.T) {
|