/src/main/java/org/jfrog/bamboo/context/ArtifactoryBuildContext.java

https://github.com/JFrogDev/bamboo-artifactory-plugin · Java · 161 lines · 122 code · 22 blank · 17 comment · 7 complexity · e232d57c9fb843df2a42b059d668edf8 MD5 · raw file

  1. package org.jfrog.bamboo.context;
  2. import com.atlassian.bamboo.v2.build.BuildContext;
  3. import org.apache.commons.lang3.StringUtils;
  4. import org.jfrog.build.api.util.Log;
  5. import java.util.Map;
  6. import static org.jfrog.bamboo.configuration.AbstractArtifactoryConfiguration.*;
  7. import static org.jfrog.bamboo.security.provider.SharedCredentialsDataProvider.*;
  8. /**
  9. * Created by Bar Belity on 08/10/2020.
  10. */
  11. public abstract class ArtifactoryBuildContext {
  12. public static final String RESOLVER_OVERRIDE_CREDENTIALS_CHOICE = "resolver.overrideCredentialsChoice";
  13. public static final String DEPLOYER_OVERRIDE_CREDENTIALS_CHOICE = "deployer.overrideCredentialsChoice";
  14. public static final String RESOLVER_SHARED_CREDENTIALS = "resolver.sharedCredentials";
  15. public static final String DEPLOYER_SHARED_CREDENTIALS = "deployer.sharedCredentials";
  16. public static final String SERVER_ID_PARAM = "artifactoryServerId";
  17. public static final String USERNAME_PARAM = "username";
  18. public static final String PASSWORD_PARAM = "password";
  19. public static final String BUILD_NAME = "artifactory.task.buildName";
  20. public static final String BUILD_NUMBER = "artifactory.task.buildNumber";
  21. public static final String DEFAULT_BUILD_NAME = "${bamboo.buildPlanName}";
  22. public static final String DEFAULT_BUILD_NUMBER = "${bamboo.buildNumber}";
  23. protected final Map<String, String> env;
  24. protected String prefix;
  25. public ArtifactoryBuildContext(Map<String, String> env) {
  26. this.env = env;
  27. }
  28. public ArtifactoryBuildContext(String credentialsPrefix, Map<String, String> env) {
  29. this(env);
  30. this.prefix = credentialsPrefix;
  31. }
  32. public long getArtifactoryServerId() {
  33. String serverId = env.get(prefix + SERVER_ID_PARAM);
  34. if (org.apache.commons.lang.StringUtils.isBlank(serverId)) {
  35. return -1;
  36. }
  37. return Long.parseLong(serverId);
  38. }
  39. public String getResolverOverrideCredentialsChoice() {
  40. return env.get(RESOLVER_OVERRIDE_CREDENTIALS_CHOICE);
  41. }
  42. public String getDeployerOverrideCredentialsChoice() {
  43. return env.get(DEPLOYER_OVERRIDE_CREDENTIALS_CHOICE);
  44. }
  45. public String getResolverSharedCredentials() {
  46. return env.get(RESOLVER_SHARED_CREDENTIALS);
  47. }
  48. public String getDeployerSharedCredentials() {
  49. return env.get(DEPLOYER_SHARED_CREDENTIALS);
  50. }
  51. public String getUsername() {
  52. return env.get(prefix + USERNAME_PARAM);
  53. }
  54. public String getPassword() {
  55. return env.get(prefix + PASSWORD_PARAM);
  56. }
  57. public String getResolverUsername() {
  58. return getUsername();
  59. }
  60. public String getDeployerUsername() {
  61. return getUsername();
  62. }
  63. public String getResolverPassword() {
  64. return getPassword();
  65. }
  66. public String getDeployerPassword() {
  67. return getPassword();
  68. }
  69. /**
  70. * Get build name from context.
  71. * Empty build-name in context occurs when running a task which was configured prior to allowing customizable build name.
  72. * In this case, return the plan-name generated by Bamboo to allow backward compatibility.
  73. */
  74. public String getBuildName(BuildContext buildContext) {
  75. String buildName = env.get(BUILD_NAME);
  76. if (StringUtils.isNotBlank(buildName)) {
  77. return buildName;
  78. }
  79. // Extract backward compatible build-name.
  80. return buildContext.getPlanName();
  81. }
  82. /**
  83. * Get build number from context.
  84. * Empty build name in context occurs when running a task which was configured prior to allowing customizable build number.
  85. * In this case, return the build-number generated by Bamboo to allow backward compatibility.
  86. */
  87. public String getBuildNumber(BuildContext buildContext) {
  88. String buildNumber = env.get(BUILD_NUMBER);
  89. if (StringUtils.isNotBlank(buildNumber)) {
  90. return buildNumber;
  91. }
  92. // Extract backward compatible build-number.
  93. return String.valueOf(buildContext.getBuildNumber());
  94. }
  95. public String getOverriddenUsername(Map<String, String> runtimeTaskContext, Log log, boolean deployer) {
  96. switch (StringUtils.defaultString(deployer ? getDeployerOverrideCredentialsChoice() : getResolverOverrideCredentialsChoice())) {
  97. case CVG_CRED_NO_OVERRIDE:
  98. return "";
  99. case CVG_CRED_SHARED_CREDENTIALS:
  100. String username = runtimeTaskContext.get(deployer ? DEPLOYER_SHARED_CREDENTIALS_USER : RESOLVER_SHARED_CREDENTIALS_USER);
  101. String credentialsId = deployer ? getDeployerSharedCredentials() : getResolverSharedCredentials();
  102. log.info("Using Artifactory username '" + username + "' configured in credentials ID '" + credentialsId + "'");
  103. return username;
  104. case CVG_CRED_USERNAME_PASSWORD:
  105. username = deployer ? getDeployerUsername() : getResolverUsername();
  106. log.info("Using Artifactory username '" + username + "' configured in job");
  107. return username;
  108. default:
  109. // Backward compatibility
  110. username = deployer ? getDeployerUsername() : getResolverUsername();
  111. if (StringUtils.isNotBlank(username)) {
  112. log.info("Using Artifactory username '" + username + "' configured in job");
  113. return username;
  114. }
  115. return "";
  116. }
  117. }
  118. public String getOverriddenPassword(Map<String, String> runtimeTaskContext, Log log, boolean deployer) {
  119. switch (StringUtils.defaultString(deployer ? getDeployerOverrideCredentialsChoice() : getResolverOverrideCredentialsChoice())) {
  120. case CVG_CRED_NO_OVERRIDE:
  121. return "";
  122. case CVG_CRED_SHARED_CREDENTIALS:
  123. String credentialsId = deployer ? getDeployerSharedCredentials() : getResolverSharedCredentials();
  124. log.info("Using Artifactory password configured in credentials ID '" + credentialsId + "'");
  125. return runtimeTaskContext.get(deployer ? DEPLOYER_SHARED_CREDENTIALS_PASSWORD : RESOLVER_SHARED_CREDENTIALS_PASSWORD);
  126. case CVG_CRED_USERNAME_PASSWORD:
  127. log.info("Using Artifactory password configured in job");
  128. return deployer ? getDeployerPassword() : getResolverPassword();
  129. default:
  130. // Backward compatibility
  131. String password = deployer ? getDeployerPassword() : getResolverPassword();
  132. if (StringUtils.isNotBlank(password)) {
  133. log.info("Using Artifactory password configured in job");
  134. return password;
  135. }
  136. return "";
  137. }
  138. }
  139. }