From 62a7ebd4dde57ae86d19caf3f4b6905c9c23b2a4 Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Thu, 29 Oct 2020 19:51:40 +0100 Subject: [PATCH 1/7] user agents are not longer set to be browsers by default --- .../main/java/sonia/scm/web/UserAgent.java | 45 ++++++++++++++++++- .../sonia/scm/web/UserAgentParserTest.java | 2 +- .../sonia/scm/web/GitUserAgentProvider.java | 4 ++ .../sonia/scm/web/HgUserAgentProvider.java | 2 +- .../sonia/scm/web/SvnUserAgentProvider.java | 4 +- .../scm/web/BrowserUserAgentProvider.java | 10 ++--- 6 files changed, 56 insertions(+), 11 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/web/UserAgent.java b/scm-core/src/main/java/sonia/scm/web/UserAgent.java index 9cee5f9c1e..b758d91859 100644 --- a/scm-core/src/main/java/sonia/scm/web/UserAgent.java +++ b/scm-core/src/main/java/sonia/scm/web/UserAgent.java @@ -56,10 +56,26 @@ public final class UserAgent */ private UserAgent(String name, boolean browser, Charset basicAuthenticationCharset) + { + this(name, browser, basicAuthenticationCharset, false); + } + + /** + * Constructs a new user agent + * + * + * @param name + * @param browser + * @param basicAuthenticationCharset + */ + private UserAgent(String name, boolean browser, + Charset basicAuthenticationCharset, + boolean scmClient) { this.name = checkNotNull(name); this.browser = browser; this.basicAuthenticationCharset = checkNotNull(basicAuthenticationCharset); + this.scmClient = scmClient; } //~--- methods -------------------------------------------------------------- @@ -159,6 +175,10 @@ public final class UserAgent return browser; } + public boolean isScmClient() { + return scmClient; + } + //~--- inner classes -------------------------------------------------------- /** @@ -212,6 +232,21 @@ public final class UserAgent return this; } + /** + * Set to {@code true} if the {@link UserAgent} is an scm client. + * + * + * @param scmClient {@code true} for an scm client + * + * @return {@code this} + */ + public Builder scmClient(boolean scmClient) + { + this.scmClient = scmClient; + + return this; + } + /** * Builds the {@link UserAgent}. * @@ -220,7 +255,7 @@ public final class UserAgent */ public UserAgent build() { - return new UserAgent(name, browser, basicAuthenticationCharset); + return new UserAgent(name, browser, basicAuthenticationCharset, scmClient); } //~--- fields ------------------------------------------------------------- @@ -229,7 +264,10 @@ public final class UserAgent private final String name; /** indicator for browsers */ - private boolean browser = true; + private boolean browser = false; + + /** indicator for browsers */ + private boolean scmClient = false; /** basic authentication charset */ private Charset basicAuthenticationCharset = Charsets.ISO_8859_1; @@ -244,6 +282,9 @@ public final class UserAgent /** indicator for browsers */ private final boolean browser; + /** indicator for scm clients (e.g. git, hg, svn) */ + private final boolean scmClient; + /** name of UserAgent */ private final String name; } diff --git a/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java b/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java index dd19414fe7..f60d48cb7c 100644 --- a/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java +++ b/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java @@ -89,7 +89,7 @@ public class UserAgentParserTest UserAgent ua = parser.parse(UA_1); assertEquals(Charsets.ISO_8859_1, ua.getBasicAuthenticationCharset()); - assertTrue(ua.isBrowser()); + assertFalse(ua.isBrowser()); } /** diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java index 4bb2a74442..420fda34de 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java @@ -46,6 +46,7 @@ public class GitUserAgentProvider implements UserAgentProvider { @VisibleForTesting static final UserAgent JGIT = UserAgent.builder("JGit") .browser(false) + .scmClient(true) .basicAuthenticationCharset(Charsets.UTF_8) .build(); @@ -54,6 +55,7 @@ public class GitUserAgentProvider implements UserAgentProvider { @VisibleForTesting static final UserAgent GIT = UserAgent.builder("Git") .browser(false) + .scmClient(true) .basicAuthenticationCharset(Charsets.UTF_8) .build(); @@ -62,6 +64,7 @@ public class GitUserAgentProvider implements UserAgentProvider { @VisibleForTesting static final UserAgent GIT_LFS = UserAgent.builder("Git Lfs") .browser(false) + .scmClient(true) .basicAuthenticationCharset(Charsets.UTF_8) .build(); @@ -70,6 +73,7 @@ public class GitUserAgentProvider implements UserAgentProvider { @VisibleForTesting static final UserAgent MSYSGIT = UserAgent.builder("msysGit") .browser(false) + .scmClient(true) .basicAuthenticationCharset(Charsets.UTF_8) .build(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUserAgentProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUserAgentProvider.java index 82dc543230..c924b3f2a1 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUserAgentProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUserAgentProvider.java @@ -46,7 +46,7 @@ public class HgUserAgentProvider implements UserAgentProvider /** mercurial seems to use system encoding */ @VisibleForTesting static UserAgent HG = UserAgent.builder("Mercurial").browser( - false).basicAuthenticationCharset( + false).scmClient(true).basicAuthenticationCharset( Charset.defaultCharset()).build(); /** Field description */ diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnUserAgentProvider.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnUserAgentProvider.java index b5eb5c32e1..9c04d73658 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnUserAgentProvider.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnUserAgentProvider.java @@ -49,13 +49,13 @@ public final class SvnUserAgentProvider implements UserAgentProvider /** TortoiseSVN */ @VisibleForTesting static final UserAgent TORTOISE_SVN = - UserAgent.builder("TortoiseSVN").browser(false) + UserAgent.builder("TortoiseSVN").browser(false).scmClient(true) .basicAuthenticationCharset(Charsets.UTF_8).build(); /** Subversion cli client */ @VisibleForTesting static final UserAgent SVN = - UserAgent.builder("Subversion").browser(false) + UserAgent.builder("Subversion").browser(false).scmClient(true) .basicAuthenticationCharset(Charsets.UTF_8).build(); //~--- methods -------------------------------------------------------------- diff --git a/scm-webapp/src/main/java/sonia/scm/web/BrowserUserAgentProvider.java b/scm-webapp/src/main/java/sonia/scm/web/BrowserUserAgentProvider.java index 60650ff927..f4230892b0 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/BrowserUserAgentProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/web/BrowserUserAgentProvider.java @@ -43,28 +43,28 @@ public class BrowserUserAgentProvider implements UserAgentProvider @VisibleForTesting static final UserAgent CHROME = UserAgent.builder( "Chrome").basicAuthenticationCharset( - Charsets.UTF_8).build(); + Charsets.UTF_8).browser(true).build(); /** Field description */ private static final String CHROME_PATTERN = "chrome"; /** Field description */ @VisibleForTesting - static final UserAgent FIREFOX = UserAgent.builder("Firefox").build(); + static final UserAgent FIREFOX = UserAgent.builder("Firefox").browser(true).build(); /** Field description */ private static final String FIREFOX_PATTERN = "firefox"; /** Field description */ @VisibleForTesting - static final UserAgent MSIE = UserAgent.builder("Internet Explorer").build(); + static final UserAgent MSIE = UserAgent.builder("Internet Explorer").browser(true).build(); /** Field description */ private static final String MSIE_PATTERN = "msie"; /** Field description */ @VisibleForTesting // todo check charset - static final UserAgent SAFARI = UserAgent.builder("Safari").build(); + static final UserAgent SAFARI = UserAgent.builder("Safari").browser(true).build(); /** Field description */ private static final String OPERA_PATTERN = "opera"; @@ -76,7 +76,7 @@ public class BrowserUserAgentProvider implements UserAgentProvider @VisibleForTesting // todo check charset static final UserAgent OPERA = UserAgent.builder( "Opera").basicAuthenticationCharset( - Charsets.UTF_8).build(); + Charsets.UTF_8).browser(true).build(); //~--- methods -------------------------------------------------------------- From 00f2c3b7e8dc58ef4a30c27751932ed77176787d Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Fri, 30 Oct 2020 11:05:29 +0100 Subject: [PATCH 2/7] update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cbd392b0f..4da5aabb3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Fixed - Do not expose subversion commit with id 0 ([#1395](https://github.com/scm-manager/scm-manager/pull/1395)) +- Support anonymous file download through rest api for non-browser clients (e.g. curl or postman) when anonymous mode is set to protocol-only ([#1402](https://github.com/scm-manager/scm-manager/pull/1402)) ## [2.8.0] - 2020-10-27 ### Added From 0beb749f236545dd7c0dbb167892ff7395b8c9c6 Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Fri, 30 Oct 2020 12:20:45 +0100 Subject: [PATCH 3/7] adjust scm client check and update unit test accordingly --- .../java/sonia/scm/web/protocol/HttpProtocolServlet.java | 8 ++++---- .../sonia/scm/web/protocol/HttpProtocolServletTest.java | 7 ++----- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java b/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java index cb48c329c2..1e56817e62 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java @@ -74,10 +74,7 @@ public class HttpProtocolServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { UserAgent userAgent = userAgentParser.parse(request); - if (userAgent.isBrowser()) { - log.trace("dispatch browser request for user agent {}", userAgent); - dispatcher.dispatch(request, response, request.getRequestURI()); - } else { + if (userAgent.isScmClient()) { String pathInfo = request.getPathInfo(); Optional namespaceAndName = pathExtractor.fromUri(pathInfo); if (namespaceAndName.isPresent()) { @@ -86,6 +83,9 @@ public class HttpProtocolServlet extends HttpServlet { log.debug("namespace and name not found in request path {}", pathInfo); response.setStatus(HttpStatus.SC_BAD_REQUEST); } + } else { + log.trace("dispatch browser request for user agent {}", userAgent); + dispatcher.dispatch(request, response, request.getRequestURI()); } } diff --git a/scm-webapp/src/test/java/sonia/scm/web/protocol/HttpProtocolServletTest.java b/scm-webapp/src/test/java/sonia/scm/web/protocol/HttpProtocolServletTest.java index 7e01e0b1d4..9dac395df9 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/protocol/HttpProtocolServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/protocol/HttpProtocolServletTest.java @@ -91,15 +91,12 @@ class HttpProtocolServletTest { @BeforeEach void prepareMocks() { when(userAgentParser.parse(request)).thenReturn(userAgent); - when(userAgent.isBrowser()).thenReturn(true); + when(userAgent.isScmClient()).thenReturn(false); when(request.getRequestURI()).thenReturn("uri"); } @Test void shouldDispatchBrowserRequests() throws ServletException, IOException { - when(userAgent.isBrowser()).thenReturn(true); - when(request.getRequestURI()).thenReturn("uri"); - servlet.service(request, response); verify(dispatcher).dispatch(request, response, "uri"); @@ -113,7 +110,7 @@ class HttpProtocolServletTest { @BeforeEach void prepareMocks() { when(userAgentParser.parse(request)).thenReturn(userAgent); - when(userAgent.isBrowser()).thenReturn(false); + when(userAgent.isScmClient()).thenReturn(true); } @Test From 22e0944377937603c8a06539442f101f8504fb62 Mon Sep 17 00:00:00 2001 From: Konstantin Schaper Date: Mon, 2 Nov 2020 13:27:18 +0100 Subject: [PATCH 4/7] fix review findings --- .../main/java/sonia/scm/web/UserAgent.java | 61 ++++++++++--------- .../java/sonia/scm/web/UserAgentParser.java | 2 +- .../sonia/scm/web/GitUserAgentProvider.java | 14 ++--- .../sonia/scm/web/HgUserAgentProvider.java | 3 +- .../sonia/scm/web/SvnUserAgentProvider.java | 4 +- .../scm/web/BrowserUserAgentProvider.java | 14 ++--- .../scm/web/protocol/HttpProtocolServlet.java | 2 +- 7 files changed, 47 insertions(+), 53 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/web/UserAgent.java b/scm-core/src/main/java/sonia/scm/web/UserAgent.java index b758d91859..774bc4444f 100644 --- a/scm-core/src/main/java/sonia/scm/web/UserAgent.java +++ b/scm-core/src/main/java/sonia/scm/web/UserAgent.java @@ -46,20 +46,6 @@ import static com.google.common.base.Preconditions.checkNotNull; public final class UserAgent { - /** - * Constructs a new user agent - * - * - * @param name - * @param browser - * @param basicAuthenticationCharset - */ - private UserAgent(String name, boolean browser, - Charset basicAuthenticationCharset) - { - this(name, browser, basicAuthenticationCharset, false); - } - /** * Constructs a new user agent * @@ -87,8 +73,30 @@ public final class UserAgent * @param name name of the UserAgent * * @return builder for UserAgent + * + * @deprecated Use {@link #browser(String)}, {@link #scmClient(String)} or {@link #other(String)} instead */ + @Deprecated public static Builder builder(String name) + { + return other(name); + } + + public static Builder browser(String name) + { + final Builder builder = new Builder(name); + builder.browser = true; + return builder; + } + + public static Builder scmClient(String name) + { + final Builder builder = new Builder(name); + builder.scmClient = true; + return builder; + } + + public static Builder other(String name) { return new Builder(name); } @@ -175,6 +183,12 @@ public final class UserAgent return browser; } + /** + * Returns {@code true} if UserAgent is an scm client (e.g. git, svn or hg). + * + * + * @return {@code true} if UserAgent is an scm client + */ public boolean isScmClient() { return scmClient; } @@ -224,7 +238,10 @@ public final class UserAgent * @param browser {@code true} for a browser * * @return {@code this} + * + * @deprecated Use {@link #browser(String)} instead */ + @Deprecated public Builder browser(boolean browser) { this.browser = browser; @@ -232,25 +249,9 @@ public final class UserAgent return this; } - /** - * Set to {@code true} if the {@link UserAgent} is an scm client. - * - * - * @param scmClient {@code true} for an scm client - * - * @return {@code this} - */ - public Builder scmClient(boolean scmClient) - { - this.scmClient = scmClient; - - return this; - } - /** * Builds the {@link UserAgent}. * - * * @return new {@link UserAgent} */ public UserAgent build() diff --git a/scm-core/src/main/java/sonia/scm/web/UserAgentParser.java b/scm-core/src/main/java/sonia/scm/web/UserAgentParser.java index 423234f756..307e09fdca 100644 --- a/scm-core/src/main/java/sonia/scm/web/UserAgentParser.java +++ b/scm-core/src/main/java/sonia/scm/web/UserAgentParser.java @@ -62,7 +62,7 @@ public final class UserAgentParser /** unknown UserAgent */ @VisibleForTesting - static final UserAgent UNKNOWN = UserAgent.builder("UNKNOWN").build(); + static final UserAgent UNKNOWN = UserAgent.other("UNKNOWN").build(); /** logger */ private static final Logger logger = diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java index 420fda34de..c910ed8053 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java @@ -44,36 +44,30 @@ public class GitUserAgentProvider implements UserAgentProvider { private static final String PREFIX_JGIT = "jgit/"; @VisibleForTesting - static final UserAgent JGIT = UserAgent.builder("JGit") + static final UserAgent JGIT = UserAgent.scmClient("JGit") .browser(false) - .scmClient(true) .basicAuthenticationCharset(Charsets.UTF_8) .build(); private static final String PREFIX_REGULAR = "git/"; @VisibleForTesting - static final UserAgent GIT = UserAgent.builder("Git") + static final UserAgent GIT = UserAgent.scmClient("Git") .browser(false) - .scmClient(true) .basicAuthenticationCharset(Charsets.UTF_8) .build(); private static final String PREFIX_LFS = "git-lfs/"; @VisibleForTesting - static final UserAgent GIT_LFS = UserAgent.builder("Git Lfs") - .browser(false) - .scmClient(true) + static final UserAgent GIT_LFS = UserAgent.scmClient("Git Lfs") .basicAuthenticationCharset(Charsets.UTF_8) .build(); private static final String SUFFIX_MSYSGIT = "msysgit"; @VisibleForTesting - static final UserAgent MSYSGIT = UserAgent.builder("msysGit") - .browser(false) - .scmClient(true) + static final UserAgent MSYSGIT = UserAgent.scmClient("msysGit") .basicAuthenticationCharset(Charsets.UTF_8) .build(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUserAgentProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUserAgentProvider.java index c924b3f2a1..109c80a09a 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUserAgentProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUserAgentProvider.java @@ -45,8 +45,7 @@ public class HgUserAgentProvider implements UserAgentProvider /** mercurial seems to use system encoding */ @VisibleForTesting - static UserAgent HG = UserAgent.builder("Mercurial").browser( - false).scmClient(true).basicAuthenticationCharset( + static UserAgent HG = UserAgent.scmClient("Mercurial").basicAuthenticationCharset( Charset.defaultCharset()).build(); /** Field description */ diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnUserAgentProvider.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnUserAgentProvider.java index 9c04d73658..45b4e651ff 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnUserAgentProvider.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/web/SvnUserAgentProvider.java @@ -49,13 +49,13 @@ public final class SvnUserAgentProvider implements UserAgentProvider /** TortoiseSVN */ @VisibleForTesting static final UserAgent TORTOISE_SVN = - UserAgent.builder("TortoiseSVN").browser(false).scmClient(true) + UserAgent.scmClient("TortoiseSVN") .basicAuthenticationCharset(Charsets.UTF_8).build(); /** Subversion cli client */ @VisibleForTesting static final UserAgent SVN = - UserAgent.builder("Subversion").browser(false).scmClient(true) + UserAgent.scmClient("Subversion") .basicAuthenticationCharset(Charsets.UTF_8).build(); //~--- methods -------------------------------------------------------------- diff --git a/scm-webapp/src/main/java/sonia/scm/web/BrowserUserAgentProvider.java b/scm-webapp/src/main/java/sonia/scm/web/BrowserUserAgentProvider.java index f4230892b0..e9725b41d7 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/BrowserUserAgentProvider.java +++ b/scm-webapp/src/main/java/sonia/scm/web/BrowserUserAgentProvider.java @@ -41,30 +41,30 @@ public class BrowserUserAgentProvider implements UserAgentProvider /** Field description */ @VisibleForTesting - static final UserAgent CHROME = UserAgent.builder( + static final UserAgent CHROME = UserAgent.browser( "Chrome").basicAuthenticationCharset( - Charsets.UTF_8).browser(true).build(); + Charsets.UTF_8).build(); /** Field description */ private static final String CHROME_PATTERN = "chrome"; /** Field description */ @VisibleForTesting - static final UserAgent FIREFOX = UserAgent.builder("Firefox").browser(true).build(); + static final UserAgent FIREFOX = UserAgent.browser("Firefox").build(); /** Field description */ private static final String FIREFOX_PATTERN = "firefox"; /** Field description */ @VisibleForTesting - static final UserAgent MSIE = UserAgent.builder("Internet Explorer").browser(true).build(); + static final UserAgent MSIE = UserAgent.browser("Internet Explorer").build(); /** Field description */ private static final String MSIE_PATTERN = "msie"; /** Field description */ @VisibleForTesting // todo check charset - static final UserAgent SAFARI = UserAgent.builder("Safari").browser(true).build(); + static final UserAgent SAFARI = UserAgent.browser("Safari").build(); /** Field description */ private static final String OPERA_PATTERN = "opera"; @@ -74,9 +74,9 @@ public class BrowserUserAgentProvider implements UserAgentProvider /** Field description */ @VisibleForTesting // todo check charset - static final UserAgent OPERA = UserAgent.builder( + static final UserAgent OPERA = UserAgent.browser( "Opera").basicAuthenticationCharset( - Charsets.UTF_8).browser(true).build(); + Charsets.UTF_8).build(); //~--- methods -------------------------------------------------------------- diff --git a/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java b/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java index 1e56817e62..84f4f75191 100644 --- a/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java +++ b/scm-webapp/src/main/java/sonia/scm/web/protocol/HttpProtocolServlet.java @@ -84,7 +84,7 @@ public class HttpProtocolServlet extends HttpServlet { response.setStatus(HttpStatus.SC_BAD_REQUEST); } } else { - log.trace("dispatch browser request for user agent {}", userAgent); + log.trace("dispatch non-scm-client request for user agent {}", userAgent); dispatcher.dispatch(request, response, request.getRequestURI()); } } From f6fef3861572eb9f3103ae12174e7cd55098ab49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 3 Nov 2020 09:55:49 +0100 Subject: [PATCH 5/7] Order arguments --- .../main/java/sonia/scm/web/UserAgent.java | 21 ++++++++----------- 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/web/UserAgent.java b/scm-core/src/main/java/sonia/scm/web/UserAgent.java index 774bc4444f..0647587a19 100644 --- a/scm-core/src/main/java/sonia/scm/web/UserAgent.java +++ b/scm-core/src/main/java/sonia/scm/web/UserAgent.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- @@ -37,7 +37,7 @@ import static com.google.common.base.Preconditions.checkNotNull; //~--- JDK imports ------------------------------------------------------------ /** - * The software agent that is acting on behalf of a user. The user agent + * The software agent that is acting on behalf of a user. The user agent * represents a browser or one of the repository client (svn, git or hg). * * @author Sebastian Sdorra @@ -49,18 +49,15 @@ public final class UserAgent /** * Constructs a new user agent * - * - * @param name - * @param browser + * @param name * @param basicAuthenticationCharset + * @param browser */ - private UserAgent(String name, boolean browser, - Charset basicAuthenticationCharset, - boolean scmClient) + private UserAgent(String name, Charset basicAuthenticationCharset, boolean browser, boolean scmClient) { this.name = checkNotNull(name); - this.browser = browser; this.basicAuthenticationCharset = checkNotNull(basicAuthenticationCharset); + this.browser = browser; this.scmClient = scmClient; } @@ -151,7 +148,7 @@ public final class UserAgent //~--- get methods ---------------------------------------------------------- /** - * Returns the {@link Charset}, which is used to decode the basic + * Returns the {@link Charset}, which is used to decode the basic * authentication header. * * @return {@link Charset} for basic authentication @@ -176,7 +173,7 @@ public final class UserAgent * Returns {@code true} if UserAgent is a browser. * * - * @return {@code true} if UserAgent is a browser + * @return {@code true} if UserAgent is a browser */ public boolean isBrowser() { @@ -256,7 +253,7 @@ public final class UserAgent */ public UserAgent build() { - return new UserAgent(name, browser, basicAuthenticationCharset, scmClient); + return new UserAgent(name, basicAuthenticationCharset, browser, scmClient); } //~--- fields ------------------------------------------------------------- From 38180e40d0d24cfae142521d8173b3888cae3d82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 3 Nov 2020 09:56:06 +0100 Subject: [PATCH 6/7] Replace deprecated api in tests --- .../test/java/sonia/scm/web/UserAgentParserTest.java | 10 +++++----- ...ttpProtocolServletAuthenticationFilterBaseTest.java | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java b/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java index f60d48cb7c..33ba090373 100644 --- a/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java +++ b/scm-core/src/test/java/sonia/scm/web/UserAgentParserTest.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- @@ -99,11 +99,11 @@ public class UserAgentParserTest @Test public void testParse() { - UserAgent ua = UserAgent.builder("UA1").build(); + UserAgent ua = UserAgent.other("UA1").build(); when(provider1.parseUserAgent(UA_1)).thenReturn(ua); - UserAgent ua2 = UserAgent.builder("UA2").build(); + UserAgent ua2 = UserAgent.other("UA2").build(); when(provider2.parseUserAgent(UA_2)).thenReturn(ua2); @@ -120,7 +120,7 @@ public class UserAgentParserTest { when(request.getHeader(HttpUtil.HEADER_USERAGENT)).thenReturn(UA_2); - UserAgent ua = UserAgent.builder("UA2").build(); + UserAgent ua = UserAgent.other("UA2").build(); when(provider1.parseUserAgent(UA_2)).thenReturn(ua); assertEquals(ua, parser.parse(request)); @@ -144,7 +144,7 @@ public class UserAgentParserTest @Test public void testParseWithCache() { - UserAgent ua = UserAgent.builder("UA").build(); + UserAgent ua = UserAgent.other("UA").build(); when(cache.get(UA_1)).thenReturn(ua); assertEquals(ua, parser.parse(UA_1)); diff --git a/scm-core/src/test/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBaseTest.java b/scm-core/src/test/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBaseTest.java index 2c49458547..a3b9318e5a 100644 --- a/scm-core/src/test/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBaseTest.java +++ b/scm-core/src/test/java/sonia/scm/web/filter/HttpProtocolServletAuthenticationFilterBaseTest.java @@ -69,8 +69,8 @@ class HttpProtocolServletAuthenticationFilterBaseTest { @Mock private FilterChain filterChain; - private UserAgent nonBrowser = UserAgent.builder("i'm not a browser").browser(false).build(); - private UserAgent browser = UserAgent.builder("i am a browser").browser(true).build(); + private UserAgent nonBrowser = UserAgent.other("i'm not a browser").build(); + private UserAgent browser = UserAgent.browser("i am a browser").build(); @BeforeEach void setUpObjectUnderTest() { From 836e48c895719ea42b53cb5b79f54dd1f9d5546b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 3 Nov 2020 09:58:55 +0100 Subject: [PATCH 7/7] Remove deprecated api calls --- .../sonia/scm/web/GitUserAgentProvider.java | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java index c910ed8053..e93c5a3ecc 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/web/GitUserAgentProvider.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.web; //~--- non-JDK imports -------------------------------------------------------- @@ -40,23 +40,21 @@ import sonia.scm.plugin.Extension; */ @Extension public class GitUserAgentProvider implements UserAgentProvider { - + private static final String PREFIX_JGIT = "jgit/"; @VisibleForTesting static final UserAgent JGIT = UserAgent.scmClient("JGit") - .browser(false) .basicAuthenticationCharset(Charsets.UTF_8) .build(); - + private static final String PREFIX_REGULAR = "git/"; - + @VisibleForTesting static final UserAgent GIT = UserAgent.scmClient("Git") - .browser(false) .basicAuthenticationCharset(Charsets.UTF_8) .build(); - + private static final String PREFIX_LFS = "git-lfs/"; @VisibleForTesting @@ -65,7 +63,7 @@ public class GitUserAgentProvider implements UserAgentProvider { .build(); private static final String SUFFIX_MSYSGIT = "msysgit"; - + @VisibleForTesting static final UserAgent MSYSGIT = UserAgent.scmClient("msysGit") .basicAuthenticationCharset(Charsets.UTF_8) @@ -78,7 +76,7 @@ public class GitUserAgentProvider implements UserAgentProvider { @Override public UserAgent parseUserAgent(String userAgentString) { String lowerUserAgent = toLower(userAgentString); - + if (isJGit(lowerUserAgent)) { return JGIT; } else if (isMsysGit(lowerUserAgent)) { @@ -91,23 +89,23 @@ public class GitUserAgentProvider implements UserAgentProvider { return null; } } - + private String toLower(String value) { return Strings.nullToEmpty(value).toLowerCase(Locale.ENGLISH); } - + private boolean isJGit(String userAgent) { return userAgent.startsWith(PREFIX_JGIT); } - + private boolean isMsysGit(String userAgent) { return userAgent.startsWith(PREFIX_REGULAR) && userAgent.contains(SUFFIX_MSYSGIT); } - + private boolean isGitLFS(String userAgent) { return userAgent.startsWith(PREFIX_LFS); } - + private boolean isGit(String userAgent) { return userAgent.startsWith(PREFIX_REGULAR); }