diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c4620fc87..97dff642cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Simplified collapse state management of the secondary navigation ([#1086](https://github.com/scm-manager/scm-manager/pull/1086) +### Fixed +- Authentication for write requests for repositories with anonymous read access ([#108](https://github.com/scm-manager/scm-manager/pull/1081)) + + ## 2.0.0-rc6 - 2020-03-26 ### Added - Extension point to add links to the repository cards from plug ins ([#1041](https://github.com/scm-manager/scm-manager/pull/1041)) diff --git a/pom.xml b/pom.xml index 2054116a65..6a56a1fd5a 100644 --- a/pom.xml +++ b/pom.xml @@ -912,7 +912,7 @@ 2.1.1 4.5.2.Final 1.19.4 - 2.10.2 + 2.10.3 4.2.2 2.3.1 6.1.2.Final @@ -944,7 +944,7 @@ 8 UTF-8 SCM-MIT - + 1.3.1.Final diff --git a/scm-annotation-processor/pom.xml b/scm-annotation-processor/pom.xml index 4881cf3110..eafc3f5c58 100644 --- a/scm-annotation-processor/pom.xml +++ b/scm-annotation-processor/pom.xml @@ -78,7 +78,7 @@ org.kohsuke.metainf-services metainf-services - 1.7 + 1.8 diff --git a/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java b/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java index a254edcb41..9cfa95c1d5 100644 --- a/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.java +++ b/scm-core/src/main/java/sonia/scm/web/filter/PermissionFilter.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.filter; import org.apache.shiro.SecurityUtils; @@ -35,7 +35,7 @@ import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryPermissions; import sonia.scm.repository.spi.ScmProviderHttpServlet; import sonia.scm.repository.spi.ScmProviderHttpServletDecorator; -import sonia.scm.security.Role; +import sonia.scm.security.Authentications; import sonia.scm.security.ScmSecurityException; import sonia.scm.util.HttpUtil; @@ -177,7 +177,7 @@ public abstract class PermissionFilter extends ScmProviderHttpServletDecorator HttpServletResponse response, Subject subject) throws IOException { - if (subject.hasRole(Role.USER)) + if (!Authentications.isAuthenticatedSubjectAnonymous()) { sendNotEnoughPrivilegesError(request, response); } diff --git a/scm-core/src/test/java/sonia/scm/web/filter/PermissionFilterTest.java b/scm-core/src/test/java/sonia/scm/web/filter/PermissionFilterTest.java index ad21e501e7..5ba99bd2f1 100644 --- a/scm-core/src/test/java/sonia/scm/web/filter/PermissionFilterTest.java +++ b/scm-core/src/test/java/sonia/scm/web/filter/PermissionFilterTest.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.filter; import com.github.sdorra.shiro.ShiroRule; @@ -82,6 +82,17 @@ public class PermissionFilterTest { permissionFilter.service(request, response, REPOSITORY); + verify(response).sendError(eq(403)); + verify(delegateServlet, never()).service(request, response, REPOSITORY); + } + + @Test + @SubjectAware(username = "_anonymous", password = "secret") + public void shouldBlockForAnonymousOnWriteRequestWithAuthenticationRequest() throws IOException, ServletException { + writeRequest = true; + + permissionFilter.service(request, response, REPOSITORY); + verify(response).sendError(eq(401), anyString()); verify(delegateServlet, never()).service(request, response, REPOSITORY); } diff --git a/scm-core/src/test/resources/sonia/scm/shiro.ini b/scm-core/src/test/resources/sonia/scm/shiro.ini index fda268ec83..4bd34d3a41 100644 --- a/scm-core/src/test/resources/sonia/scm/shiro.ini +++ b/scm-core/src/test/resources/sonia/scm/shiro.ini @@ -4,6 +4,7 @@ admin = secret, admin writer = secret, repo_write reader = secret, repo_read unpriv = secret +_anonymous = secret [roles] admin = * diff --git a/scm-ui/ui-scripts/package.json b/scm-ui/ui-scripts/package.json index 25f5b25023..8a26c95c41 100644 --- a/scm-ui/ui-scripts/package.json +++ b/scm-ui/ui-scripts/package.json @@ -14,10 +14,10 @@ "babel-loader": "^8.0.6", "css-loader": "^3.2.0", "file-loader": "^4.2.0", - "mini-css-extract-plugin": "^0.8.0", + "mini-css-extract-plugin": "^0.9.0", "mustache": "^3.1.0", "optimize-css-assets-webpack-plugin": "^5.0.3", - "react-refresh": "^0.7.2", + "react-refresh": "^0.8.0", "sass": "^1.26.3", "sass-loader": "^8.0.0", "script-loader": "^0.7.2", diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 24ba16333a..f7ae938b5b 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -204,7 +204,7 @@ javax.xml.bind jaxb-api - 2.3.0 + 2.3.1