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);
}
}