diff options
author | Maxim Epishchev <epishev@garant.ru> | 2016-02-03 14:34:44 +0300 |
---|---|---|
committer | Maxim Epishchev <epishev@garant.ru> | 2016-02-03 14:34:44 +0300 |
commit | 340c1c44bad78992ec49746d3776c3cff1a96fbd (patch) | |
tree | 722b0cc5d457a02e4e8fd283216fcec1b3e16a5b /src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/bitbucket | |
parent | 4b880c7045ebf42974f833ffe9b11084c86c3408 (diff) | |
download | bbprb-340c1c44bad78992ec49746d3776c3cff1a96fbd.tar.gz |
Limit size "key" field in BitBucket POST API
Refactoring method ApiClient::computeAPIKey() to check maximum size of computed key.
Now field size contolled by special constant ApiClient::MAX_KEY_SIZE_BB_API.
This changes will resolve, in my opinion, issue with continuously rebuilding: method ApiClient::hasBuildStatus() fail and PR's are always trigger new builds.
Diffstat (limited to 'src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/bitbucket')
-rw-r--r-- | src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/bitbucket/ApiClient.java | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/bitbucket/ApiClient.java b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/bitbucket/ApiClient.java index 509dfaf..047bf5a 100644 --- a/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/bitbucket/ApiClient.java +++ b/src/main/java/bitbucketpullrequestbuilder/bitbucketpullrequestbuilder/bitbucket/ApiClient.java @@ -16,6 +16,11 @@ import java.util.logging.Logger; import jenkins.model.Jenkins; import hudson.ProxyConfiguration; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import org.apache.commons.codec.binary.Hex; import org.apache.commons.httpclient.methods.PutMethod; import org.apache.commons.httpclient.util.EncodingUtil; @@ -26,13 +31,15 @@ public class ApiClient { private static final Logger logger = Logger.getLogger(ApiClient.class.getName()); private static final String V1_API_BASE_URL = "https://bitbucket.org/api/1.0/repositories/"; private static final String V2_API_BASE_URL = "https://bitbucket.org/api/2.0/repositories/"; - private static final String COMPUTED_KEY_FORMAT = "%s-%s"; + private static final String COMPUTED_KEY_FORMAT = "%s-%s"; private String owner; private String repositoryName; private Credentials credentials; private String key; private String name; private HttpClientFactory factory; + + public static final byte MAX_KEY_SIZE_BB_API = 40; public static class HttpClientFactory { public static final HttpClientFactory INSTANCE = new HttpClientFactory(); @@ -107,8 +114,29 @@ public class ApiClient { return this.name; } + private static MessageDigest SHA1 = null; + + /** + * Retrun + * @param keyExPart + * @return key parameter for call BitBucket API + */ private String computeAPIKey(String keyExPart) { - return String.format(COMPUTED_KEY_FORMAT, this.key, keyExPart); + String computedKey = String.format(COMPUTED_KEY_FORMAT, this.key, keyExPart); + + if (computedKey.length() > MAX_KEY_SIZE_BB_API) { + try { + if (SHA1 == null) SHA1 = MessageDigest.getInstance("SHA1"); + return new String(Hex.encodeHex(SHA1.digest(computedKey.getBytes("UTF-8")))); + } catch(NoSuchAlgorithmException e) { + logger.log(Level.WARNING, "Failed to create hash provider", e); + e.printStackTrace(); + } catch (UnsupportedEncodingException e) { + logger.log(Level.WARNING, "Failed to create hash provider", e); + e.printStackTrace(); + } + } + return (computedKey.length() <= MAX_KEY_SIZE_BB_API) ? computedKey : computedKey.substring(0, MAX_KEY_SIZE_BB_API); } public String buildStatusKey(String bsKey) { |