Skip to content

Commit 699c593

Browse files
author
Alexander
authored
Merge pull request #2 from Vlatombe/authentication-tokens
Complete implementation
2 parents e352848 + 56b557b commit 699c593

34 files changed

+555
-370
lines changed

src/main/java/org/jenkinsci/plugins/kubernetes/auth/AbstractKubernetesAuth.java

-34
This file was deleted.

src/main/java/org/jenkinsci/plugins/kubernetes/auth/KubernetesAuth.java

+18-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,24 @@
33
import com.fasterxml.jackson.core.JsonProcessingException;
44
import io.fabric8.kubernetes.client.ConfigBuilder;
55

6+
/**
7+
* Abstracts away a Kubernetes authentication either through kubeconfig format or {@link ConfigBuilder}.
8+
*/
69
public interface KubernetesAuth {
7-
ConfigBuilder decorate(ConfigBuilder builder) throws KubernetesAuthException;
10+
/**
11+
* Decorates a {@link ConfigBuilder} to connect using the current authentication object.
12+
* @param builder the configuration to decorate
13+
* @return the decorated configuration
14+
* @throws KubernetesAuthException if anything fails during the processing of the authentication configuration
15+
*/
16+
ConfigBuilder decorate(ConfigBuilder builder, KubernetesAuthConfig config) throws KubernetesAuthException;
817

9-
String buildKubeConfig(String serverUrl, String caCertificate) throws JsonProcessingException;
18+
/**
19+
* Builds a kube config file content based on the current authentication object.
20+
*
21+
* @return Kubeconfig file content corresponding to this authentication object.
22+
* @throws JsonProcessingException if something fails while generating the json document for kubeconfig
23+
* @throws KubernetesAuthException if something fails while dealing with credentials
24+
*/
25+
String buildKubeConfig(KubernetesAuthConfig config) throws JsonProcessingException, KubernetesAuthException;
1026
}

src/main/java/org/jenkinsci/plugins/kubernetes/auth/KubernetesAuthCertificate.java

-50
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package org.jenkinsci.plugins.kubernetes.auth;
2+
3+
/**
4+
* Configuration object for {@link KubernetesAuth} operations.
5+
*/
6+
public class KubernetesAuthConfig {
7+
/**
8+
* Server URL of the API endpoint
9+
*/
10+
private final String serverUrl;
11+
/**
12+
* Server certificate
13+
*/
14+
private final String caCertificate;
15+
/**
16+
* Set to true to skip TLS verification
17+
*/
18+
private final boolean skipTlsVerify;
19+
20+
public KubernetesAuthConfig(String serverUrl, String caCertificate, boolean skipTlsVerify) {
21+
this.serverUrl = serverUrl;
22+
this.caCertificate = caCertificate;
23+
this.skipTlsVerify = skipTlsVerify;
24+
}
25+
26+
public String getServerUrl() {
27+
return serverUrl;
28+
}
29+
30+
public String getCaCertificate() {
31+
return caCertificate;
32+
}
33+
34+
public boolean isSkipTlsVerify() {
35+
return skipTlsVerify;
36+
}
37+
}

src/main/java/org/jenkinsci/plugins/kubernetes/auth/KubernetesAuthKubeconfig.java

-33
This file was deleted.

src/main/java/org/jenkinsci/plugins/kubernetes/auth/KubernetesAuthToken.java

-27
This file was deleted.

src/main/java/org/jenkinsci/plugins/kubernetes/auth/KubernetesAuthUsernamePassword.java

-35
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package org.jenkinsci.plugins.kubernetes.auth.impl;
2+
3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import io.fabric8.kubernetes.api.model.AuthInfoBuilder;
5+
import io.fabric8.kubernetes.api.model.Cluster;
6+
import io.fabric8.kubernetes.client.internal.SerializationUtils;
7+
import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuth;
8+
import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuthConfig;
9+
import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuthException;
10+
import org.jenkinsci.plugins.kubernetes.credentials.Utils;
11+
12+
abstract class AbstractKubernetesAuth implements KubernetesAuth {
13+
abstract AuthInfoBuilder decorate(AuthInfoBuilder builder, KubernetesAuthConfig config) throws KubernetesAuthException;
14+
15+
public String buildKubeConfig(KubernetesAuthConfig config) throws JsonProcessingException, KubernetesAuthException {
16+
io.fabric8.kubernetes.api.model.ConfigBuilder configBuilder = new io.fabric8.kubernetes.api.model.ConfigBuilder();
17+
// setup cluster
18+
Cluster cluster = new Cluster();
19+
cluster.setServer(config.getServerUrl());
20+
String caCertificate = config.getCaCertificate();
21+
if (caCertificate != null && !caCertificate.isEmpty()) {
22+
cluster.setCertificateAuthorityData(Utils.encodeBase64(Utils.wrapCertificate(caCertificate)));
23+
}
24+
cluster.setInsecureSkipTlsVerify(config.isSkipTlsVerify());
25+
configBuilder
26+
.addNewCluster()
27+
.withName("k8s")
28+
.withCluster(cluster)
29+
.endCluster();
30+
31+
// setup user (class-specific)
32+
configBuilder
33+
.addNewUser()
34+
.withName("cluster-admin")
35+
.withUser(decorate(new AuthInfoBuilder(), config).build())
36+
.endUser();
37+
// setup context
38+
configBuilder
39+
.addNewContext()
40+
.withName("k8s")
41+
.withNewContext()
42+
.withCluster("k8s")
43+
.withUser("cluster-admin")
44+
.endContext()
45+
.endContext();
46+
return SerializationUtils.getMapper().writeValueAsString(configBuilder.build());
47+
}
48+
49+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.jenkinsci.plugins.kubernetes.auth.impl;
2+
3+
import io.fabric8.kubernetes.api.model.AuthInfoBuilder;
4+
import io.fabric8.kubernetes.client.ConfigBuilder;
5+
import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuth;
6+
import org.jenkinsci.plugins.kubernetes.auth.KubernetesAuthConfig;
7+
import org.jenkinsci.plugins.kubernetes.credentials.Utils;
8+
9+
public class KubernetesAuthCertificate extends AbstractKubernetesAuth implements KubernetesAuth {
10+
private final String certificate;
11+
12+
private final String key;
13+
14+
public KubernetesAuthCertificate(String certificate, String key) {
15+
this.certificate = certificate;
16+
this.key = key;
17+
}
18+
19+
@Override
20+
public AuthInfoBuilder decorate(AuthInfoBuilder builder, KubernetesAuthConfig config) {
21+
return builder
22+
.withClientCertificateData(Utils.encodeBase64(certificate))
23+
.withClientKeyData(Utils.encodeBase64(key));
24+
}
25+
26+
@Override
27+
public ConfigBuilder decorate(ConfigBuilder builder, KubernetesAuthConfig config) {
28+
return builder
29+
.withClientCertData(Utils.encodeBase64(certificate))
30+
.withClientKeyData(Utils.encodeBase64(key));
31+
}
32+
33+
public String getCertificate() {
34+
return certificate;
35+
}
36+
37+
public String getKey() {
38+
return key;
39+
}
40+
}

0 commit comments

Comments
 (0)