use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project che-server by eclipse-che.
the class ImagePullSecretProvisioner method provision.
@Override
@Traced
public void provision(KubernetesEnvironment k8sEnv, RuntimeIdentity identity) throws InfrastructureException {
TracingTags.WORKSPACE_ID.set(identity::getWorkspaceId);
DockerAuthConfigs credentials = credentialsProvider.getCredentials();
if (credentials == null) {
return;
}
Map<String, DockerAuthConfig> authConfigs = credentials.getConfigs();
if (authConfigs == null || authConfigs.isEmpty()) {
return;
}
String encodedConfig = Base64.getEncoder().encodeToString(generateDockerCfg(authConfigs).getBytes());
Secret secret = new SecretBuilder().addToData(".dockercfg", encodedConfig).withType("kubernetes.io/dockercfg").withNewMetadata().withName(identity.getWorkspaceId() + SECRET_NAME_SUFFIX).endMetadata().build();
k8sEnv.getSecrets().put(secret.getMetadata().getName(), secret);
k8sEnv.getPodsData().values().forEach(p -> addImagePullSecret(secret.getMetadata().getName(), p.getSpec()));
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project che-server by eclipse-che.
the class UserSpecificDockerRegistryCredentialsProviderTest method shouldParseCredentialsFromUserPreferences.
@Test
public void shouldParseCredentialsFromUserPreferences() throws ServerException {
String base64encodedCredentials = "eyJyZWdpc3RyeS5jb206NTAwMCI6eyJ1c2VybmFtZSI6ImxvZ2luIiwicGFzc3dvcmQiOiJwYXNzIn19";
setCredentialsIntoPreferences(base64encodedCredentials);
String registry = "registry.com:5000";
DockerAuthConfig dockerAuthConfig = DtoFactory.newDto(DockerAuthConfig.class).withUsername("login").withPassword("pass");
DockerAuthConfigs parsedDockerAuthConfigs = dockerCredentials.getCredentials();
DockerAuthConfig parsedDockerAuthConfig = parsedDockerAuthConfigs.getConfigs().get(registry);
assertNotNull(parsedDockerAuthConfig);
assertEquals(parsedDockerAuthConfig.getUsername(), dockerAuthConfig.getUsername());
assertEquals(parsedDockerAuthConfig.getPassword(), dockerAuthConfig.getPassword());
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project che-server by eclipse-che.
the class ImagePullSecretProvisioner method generateDockerCfg.
/**
* Generates a dockercfg file with the authentication information contained in the given {@code
* authConfigs} parameter.
*
* <p>The syntax of the produced <code>dockercfg</code> file is as follow:
*
* <pre><code>
* {
* "private.repo.1" : {
* "username": "theUsername1",
* "password": "thePassword1",
* "email": "theEmail1",
* "auth": "<base64 encoding of username:password>",
* },
* "private.repo.2" : {
* "username": "theUsername2",
* "password": "thePassword2",
* "email": "theEmail2",
* "auth": "<base64 encoding of username:password>",
* }
* }
* </code></pre>
*/
private String generateDockerCfg(Map<String, DockerAuthConfig> authConfigs) throws InfrastructureException {
try (StringWriter strWriter = new StringWriter();
JsonWriter jsonWriter = new Gson().newJsonWriter(strWriter)) {
Base64.Encoder encoder = Base64.getEncoder();
jsonWriter.beginObject();
for (Map.Entry<String, DockerAuthConfig> entry : authConfigs.entrySet()) {
String name = entry.getKey();
DockerAuthConfig dockerAuthConfig = entry.getValue();
try {
if (!name.startsWith("https://") && !name.startsWith("http://")) {
name = "https://" + name;
}
jsonWriter.name(name);
jsonWriter.beginObject();
jsonWriter.name("username");
jsonWriter.value(dockerAuthConfig.getUsername());
jsonWriter.name("password");
jsonWriter.value(dockerAuthConfig.getPassword());
jsonWriter.name("email");
jsonWriter.value("email@email");
String auth = dockerAuthConfig.getUsername() + ':' + dockerAuthConfig.getPassword();
jsonWriter.name("auth");
jsonWriter.value(encoder.encodeToString(auth.getBytes()));
jsonWriter.endObject();
} catch (IOException e) {
throw new InfrastructureException("Unexpected exception occurred while building the 'ImagePullSecret' from private docker registry user preferences", e);
}
}
jsonWriter.endObject();
jsonWriter.flush();
return strWriter.toString();
} catch (IOException e) {
throw new InfrastructureException(e);
}
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project devspaces-images by redhat-developer.
the class UserSpecificDockerRegistryCredentialsProviderTest method shouldParseCredentialsFromUserPreferences.
@Test
public void shouldParseCredentialsFromUserPreferences() throws ServerException {
String base64encodedCredentials = "eyJyZWdpc3RyeS5jb206NTAwMCI6eyJ1c2VybmFtZSI6ImxvZ2luIiwicGFzc3dvcmQiOiJwYXNzIn19";
setCredentialsIntoPreferences(base64encodedCredentials);
String registry = "registry.com:5000";
DockerAuthConfig dockerAuthConfig = DtoFactory.newDto(DockerAuthConfig.class).withUsername("login").withPassword("pass");
DockerAuthConfigs parsedDockerAuthConfigs = dockerCredentials.getCredentials();
DockerAuthConfig parsedDockerAuthConfig = parsedDockerAuthConfigs.getConfigs().get(registry);
assertNotNull(parsedDockerAuthConfig);
assertEquals(parsedDockerAuthConfig.getUsername(), dockerAuthConfig.getUsername());
assertEquals(parsedDockerAuthConfig.getPassword(), dockerAuthConfig.getPassword());
}
use of org.eclipse.che.workspace.infrastructure.kubernetes.api.shared.dto.DockerAuthConfig in project devspaces-images by redhat-developer.
the class ImagePullSecretProvisioner method provision.
@Override
@Traced
public void provision(KubernetesEnvironment k8sEnv, RuntimeIdentity identity) throws InfrastructureException {
TracingTags.WORKSPACE_ID.set(identity::getWorkspaceId);
DockerAuthConfigs credentials = credentialsProvider.getCredentials();
if (credentials == null) {
return;
}
Map<String, DockerAuthConfig> authConfigs = credentials.getConfigs();
if (authConfigs == null || authConfigs.isEmpty()) {
return;
}
String encodedConfig = Base64.getEncoder().encodeToString(generateDockerCfg(authConfigs).getBytes());
Secret secret = new SecretBuilder().addToData(".dockercfg", encodedConfig).withType("kubernetes.io/dockercfg").withNewMetadata().withName(identity.getWorkspaceId() + SECRET_NAME_SUFFIX).endMetadata().build();
k8sEnv.getSecrets().put(secret.getMetadata().getName(), secret);
k8sEnv.getPodsData().values().forEach(p -> addImagePullSecret(secret.getMetadata().getName(), p.getSpec()));
}
Aggregations