All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.taketoday.buildpack.platform.docker.configuration.DockerConfiguration Maven / Gradle / Ivy

There is a newer version: 4.0.0-Draft.6
Show newest version
/*
 * Copyright 2017 - 2023 the original author or authors.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see [http://www.gnu.org/licenses/]
 */

package cn.taketoday.buildpack.platform.docker.configuration;

import cn.taketoday.lang.Assert;

/**
 * Docker configuration options.
 *
 * @author Wei Jiang
 * @author Scott Frederick
 * @since 4.0
 */
public final class DockerConfiguration {

  private final DockerHostConfiguration host;

  private final DockerRegistryAuthentication builderAuthentication;

  private final DockerRegistryAuthentication publishAuthentication;

  private final boolean bindHostToBuilder;

  public DockerConfiguration() {
    this(null, null, null, false);
  }

  private DockerConfiguration(DockerHostConfiguration host, DockerRegistryAuthentication builderAuthentication,
          DockerRegistryAuthentication publishAuthentication, boolean bindHostToBuilder) {
    this.host = host;
    this.builderAuthentication = builderAuthentication;
    this.publishAuthentication = publishAuthentication;
    this.bindHostToBuilder = bindHostToBuilder;
  }

  public DockerHostConfiguration getHost() {
    return this.host;
  }

  public boolean isBindHostToBuilder() {
    return this.bindHostToBuilder;
  }

  public DockerRegistryAuthentication getBuilderRegistryAuthentication() {
    return this.builderAuthentication;
  }

  public DockerRegistryAuthentication getPublishRegistryAuthentication() {
    return this.publishAuthentication;
  }

  public DockerConfiguration withHost(String address, boolean secure, String certificatePath) {
    Assert.notNull(address, "Address is required");
    return new DockerConfiguration(DockerHostConfiguration.forAddress(address, secure, certificatePath),
            this.builderAuthentication, this.publishAuthentication, this.bindHostToBuilder);
  }

  public DockerConfiguration withContext(String context) {
    Assert.notNull(context, "Context is required");
    return new DockerConfiguration(DockerHostConfiguration.forContext(context), this.builderAuthentication,
            this.publishAuthentication, this.bindHostToBuilder);
  }

  public DockerConfiguration withBindHostToBuilder(boolean bindHostToBuilder) {
    return new DockerConfiguration(this.host, this.builderAuthentication, this.publishAuthentication,
            bindHostToBuilder);
  }

  public DockerConfiguration withBuilderRegistryTokenAuthentication(String token) {
    Assert.notNull(token, "Token is required");
    return new DockerConfiguration(this.host, new DockerRegistryTokenAuthentication(token),
            this.publishAuthentication, this.bindHostToBuilder);
  }

  public DockerConfiguration withBuilderRegistryUserAuthentication(String username, String password, String url,
          String email) {
    Assert.notNull(username, "Username is required");
    Assert.notNull(password, "Password is required");
    return new DockerConfiguration(this.host, new DockerRegistryUserAuthentication(username, password, url, email),
            this.publishAuthentication, this.bindHostToBuilder);
  }

  public DockerConfiguration withPublishRegistryTokenAuthentication(String token) {
    Assert.notNull(token, "Token is required");
    return new DockerConfiguration(this.host, this.builderAuthentication,
            new DockerRegistryTokenAuthentication(token), this.bindHostToBuilder);
  }

  public DockerConfiguration withPublishRegistryUserAuthentication(String username, String password, String url,
          String email) {
    Assert.notNull(username, "Username is required");
    Assert.notNull(password, "Password is required");
    return new DockerConfiguration(this.host, this.builderAuthentication,
            new DockerRegistryUserAuthentication(username, password, url, email), this.bindHostToBuilder);
  }

  public DockerConfiguration withEmptyPublishRegistryAuthentication() {
    return new DockerConfiguration(this.host, this.builderAuthentication,
            new DockerRegistryUserAuthentication("", "", "", ""), this.bindHostToBuilder);
  }

  public static class DockerHostConfiguration {

    private final String address;

    private final String context;

    private final boolean secure;

    private final String certificatePath;

    public DockerHostConfiguration(String address, String context, boolean secure, String certificatePath) {
      this.address = address;
      this.context = context;
      this.secure = secure;
      this.certificatePath = certificatePath;
    }

    public String getAddress() {
      return this.address;
    }

    public String getContext() {
      return this.context;
    }

    public boolean isSecure() {
      return this.secure;
    }

    public String getCertificatePath() {
      return this.certificatePath;
    }

    public static DockerHostConfiguration forAddress(String address) {
      return new DockerHostConfiguration(address, null, false, null);
    }

    public static DockerHostConfiguration forAddress(String address, boolean secure, String certificatePath) {
      return new DockerHostConfiguration(address, null, secure, certificatePath);
    }

    static DockerHostConfiguration forContext(String context) {
      return new DockerHostConfiguration(null, context, false, null);
    }

  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy