Overwork the plugin * extract the username encoding and URL replacing into a method * replace the username also in changeUrl (without logging, if no occurence of %s can be found)
diff --git a/src/main/java/org/typo3/gerrit/plugins/avatars/typo3org/ExternalUrlAvatarProvider.java b/src/main/java/org/typo3/gerrit/plugins/avatars/typo3org/ExternalUrlAvatarProvider.java index 8f29462..b0bbbc5 100644 --- a/src/main/java/org/typo3/gerrit/plugins/avatars/typo3org/ExternalUrlAvatarProvider.java +++ b/src/main/java/org/typo3/gerrit/plugins/avatars/typo3org/ExternalUrlAvatarProvider.java
@@ -39,9 +39,11 @@ @Singleton public class ExternalUrlAvatarProvider implements AvatarProvider { + private static final String REPLACE_MARKER = "%s"; + private final boolean ssl; private String externalAvatarUrl; - private final String avatarChangeUrl; + private String avatarChangeUrl; @Inject ExternalUrlAvatarProvider(@CanonicalWebUrl @Nullable String canonicalUrl, @@ -53,19 +55,6 @@ @Override public String getUrl(IdentifiedUser forUser, int imageSize) { - String username = forUser.getUserName(); - - if (username == null) { - return null; - } - - try { - username = URLEncoder.encode(username, "UTF-8"); - } catch (UnsupportedEncodingException e) { - Logger log = LoggerFactory.getLogger(ExternalUrlAvatarProvider.class); - log.warn("Weird thing, UTF-8 as encoding is not supported"); - return null; - } if (externalAvatarUrl == null) { Logger log = LoggerFactory.getLogger(ExternalUrlAvatarProvider.class); @@ -73,9 +62,9 @@ return null; } - if (!externalAvatarUrl.contains("%s")) { + if (!externalAvatarUrl.contains(REPLACE_MARKER)) { Logger log = LoggerFactory.getLogger(ExternalUrlAvatarProvider.class); - log.warn("Avatar provider url '" + externalAvatarUrl + "' does not contain %s, so cannot replace it with username"); + log.warn("Avatar provider url '" + externalAvatarUrl + "' does not contain " + REPLACE_MARKER + ", so cannot replace it with username"); return null; } @@ -83,14 +72,31 @@ externalAvatarUrl = externalAvatarUrl.replace("http://", "https://"); } - // replace the %s inside the URL with the username - String url = externalAvatarUrl.replaceFirst("%s", username); - - return url; + return replaceInUrl(externalAvatarUrl, forUser.getUserName()); } @Override public String getChangeAvatarUrl(IdentifiedUser forUser) { - return avatarChangeUrl; + + return replaceInUrl(avatarChangeUrl, forUser.getUserName()); + } + + + private String replaceInUrl(String url, String replacement) { + + if (replacement == null || url == null || url.contains(REPLACE_MARKER) == false) { + return url; + } + + String encodedReplacement = null; + try { + encodedReplacement = URLEncoder.encode(replacement, "UTF-8"); + } catch (UnsupportedEncodingException e) { + Logger log = LoggerFactory.getLogger(ExternalUrlAvatarProvider.class); + log.warn("Weird thing, UTF-8 as encoding is not supported"); + return null; + } + + return url.replace(REPLACE_MARKER, encodedReplacement); } }