diff --git a/scm-core/src/main/java/sonia/scm/api/v2/resources/ScmPathInfo.java b/scm-core/src/main/java/sonia/scm/api/v2/resources/ScmPathInfo.java index 34fa5004fc..fa975520c1 100644 --- a/scm-core/src/main/java/sonia/scm/api/v2/resources/ScmPathInfo.java +++ b/scm-core/src/main/java/sonia/scm/api/v2/resources/ScmPathInfo.java @@ -3,6 +3,9 @@ package sonia.scm.api.v2.resources; import java.net.URI; public interface ScmPathInfo { + + String REST_API_PATH = "/api/rest"; + URI getApiRestUri(); default URI getRootUri() { diff --git a/scm-core/src/main/java/sonia/scm/filter/Filters.java b/scm-core/src/main/java/sonia/scm/filter/Filters.java index b6a45811bc..b1f5ea47cf 100644 --- a/scm-core/src/main/java/sonia/scm/filter/Filters.java +++ b/scm-core/src/main/java/sonia/scm/filter/Filters.java @@ -31,6 +31,8 @@ package sonia.scm.filter; +import static sonia.scm.api.v2.resources.ScmPathInfo.REST_API_PATH; + /** * Useful constants for filter implementations. * @@ -44,26 +46,26 @@ public final class Filters public static final String PATTERN_ALL = "/*"; /** Field description */ - public static final String PATTERN_CONFIG = "/api/rest/config*"; + public static final String PATTERN_CONFIG = REST_API_PATH + "/config*"; /** Field description */ public static final String PATTERN_DEBUG = "/debug.html"; /** Field description */ - public static final String PATTERN_GROUPS = "/api/rest/groups*"; + public static final String PATTERN_GROUPS = REST_API_PATH + "/groups*"; /** Field description */ - public static final String PATTERN_PLUGINS = "/api/rest/plugins*"; + public static final String PATTERN_PLUGINS = REST_API_PATH + "/plugins*"; /** Field description */ public static final String PATTERN_RESOURCE_REGEX = "^/(?:resources|api|plugins|index)[\\./].*(?:html|\\.css|\\.js|\\.xml|\\.json|\\.txt)"; /** Field description */ - public static final String PATTERN_RESTAPI = "/api/rest/*"; + public static final String PATTERN_RESTAPI = REST_API_PATH + "/*"; /** Field description */ - public static final String PATTERN_USERS = "/api/rest/users*"; + public static final String PATTERN_USERS = REST_API_PATH + "/users*"; /** authentication priority */ public static final int PRIORITY_AUTHENTICATION = 5000; diff --git a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java index fd330a6d1d..e9ec9e4a39 100644 --- a/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java +++ b/scm-webapp/src/main/java/sonia/scm/ScmServletModule.java @@ -119,6 +119,8 @@ import sonia.scm.web.security.DefaultAdministrationContext; import javax.net.ssl.SSLContext; import javax.servlet.ServletContext; +import static sonia.scm.api.v2.resources.ScmPathInfo.REST_API_PATH; + /** * * @author Sebastian Sdorra @@ -128,14 +130,14 @@ public class ScmServletModule extends ServletModule /** Field description */ public static final String[] PATTERN_ADMIN = new String[] { - "/api/rest/groups*", - "/api/rest/users*", "/api/rest/plguins*" }; + REST_API_PATH + "/groups*", + REST_API_PATH + "/users*", REST_API_PATH + "/plguins*" }; /** Field description */ public static final String PATTERN_ALL = "/*"; /** Field description */ - public static final String PATTERN_CONFIG = "/api/rest/config*"; + public static final String PATTERN_CONFIG = REST_API_PATH + "/config*"; /** Field description */ public static final String PATTERN_DEBUG = "/debug.html"; diff --git a/scm-webapp/src/main/java/sonia/scm/filter/SecurityFilter.java b/scm-webapp/src/main/java/sonia/scm/filter/SecurityFilter.java index 0d59d77027..de0d689c52 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/SecurityFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/SecurityFilter.java @@ -37,10 +37,8 @@ package sonia.scm.filter; import com.google.common.annotations.VisibleForTesting; import com.google.inject.Inject; - import org.apache.shiro.SecurityUtils; import org.apache.shiro.subject.Subject; - import sonia.scm.Priority; import sonia.scm.SCMContext; import sonia.scm.config.ScmConfiguration; @@ -48,14 +46,15 @@ import sonia.scm.security.SecurityRequests; import sonia.scm.web.filter.HttpFilter; import sonia.scm.web.filter.SecurityHttpServletRequestWrapper; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.IOException; - import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +import static sonia.scm.api.v2.resources.ScmPathInfo.REST_API_PATH; + +//~--- JDK imports ------------------------------------------------------------ /** * @@ -63,7 +62,8 @@ import javax.servlet.http.HttpServletResponse; */ @Priority(Filters.PRIORITY_AUTHORIZATION) // TODO find a better way for unprotected resources -@WebElement(value = "/api/rest/(?!v2/ui).*", regex = true) +@WebElement(value = REST_API_PATH + "" + + "/(?!v2/ui).*", regex = true) public class SecurityFilter extends HttpFilter { diff --git a/scm-webapp/src/main/java/sonia/scm/security/SecurityRequests.java b/scm-webapp/src/main/java/sonia/scm/security/SecurityRequests.java index 225767cd3b..81bb2092c9 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/SecurityRequests.java +++ b/scm-webapp/src/main/java/sonia/scm/security/SecurityRequests.java @@ -3,12 +3,14 @@ package sonia.scm.security; import javax.servlet.http.HttpServletRequest; import java.util.regex.Pattern; +import static sonia.scm.api.v2.resources.ScmPathInfo.REST_API_PATH; + /** * Created by masuewer on 04.07.18. */ public final class SecurityRequests { - private static final Pattern URI_LOGIN_PATTERN = Pattern.compile("/api/rest(?:/v2)?/auth/access_token"); + private static final Pattern URI_LOGIN_PATTERN = Pattern.compile(REST_API_PATH + "(?:/v2)?/auth/access_token"); private SecurityRequests() {}