diff --git a/scm-ui/ui-webapp/src/containers/App.tsx b/scm-ui/ui-webapp/src/containers/App.tsx index c8284f9a04..2bb61f1a3c 100644 --- a/scm-ui/ui-webapp/src/containers/App.tsx +++ b/scm-ui/ui-webapp/src/containers/App.tsx @@ -68,7 +68,7 @@ class App extends Component { content = ; } else if (error) { content = ; - } else { + } else if (me) { content =
; } return ( diff --git a/scm-ui/ui-webapp/src/containers/Logout.tsx b/scm-ui/ui-webapp/src/containers/Logout.tsx index 6b4f797206..1021c987f2 100644 --- a/scm-ui/ui-webapp/src/containers/Logout.tsx +++ b/scm-ui/ui-webapp/src/containers/Logout.tsx @@ -26,9 +26,9 @@ import { connect } from "react-redux"; import { WithTranslation, withTranslation } from "react-i18next"; import { Redirect } from "react-router-dom"; -import { getLogoutFailure, isAuthenticated, isLogoutPending, isRedirecting, logout } from "../modules/auth"; +import { getLogoutFailure, isLogoutPending, isRedirecting, logout } from "../modules/auth"; import { ErrorPage, Loading } from "@scm-manager/ui-components"; -import { getLogoutLink } from "../modules/indexResource"; +import { getLoginLink, getLogoutLink } from "../modules/indexResource"; type Props = WithTranslation & { authenticated: boolean; @@ -61,7 +61,7 @@ class Logout extends React.Component { } const mapStateToProps = (state: any) => { - const authenticated = isAuthenticated(state); + const authenticated = state.auth.me && !getLoginLink(state); const loading = isLogoutPending(state); const redirecting = isRedirecting(state); const error = getLogoutFailure(state); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationRequestDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationRequestDto.java index 7604fc998b..25bd543d1d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationRequestDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/AuthenticationRequestDto.java @@ -32,8 +32,8 @@ import java.util.List; public class AuthenticationRequestDto { - @FormParam("grant_type") - @JsonProperty("grant_type") + @FormParam("grantType") + @JsonProperty("grantType") private String grantType; @FormParam("username") @@ -69,7 +69,7 @@ public class AuthenticationRequestDto { } public boolean isValid() { - // password is currently the only valid grant_type + // password is currently the only valid grantType return "password".equals(grantType) && !Strings.isNullOrEmpty(username) && !Strings.isNullOrEmpty(password); } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java index 7fcd8eada1..a90db6b48f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/IndexDtoGenerator.java @@ -71,7 +71,7 @@ public class IndexDtoGenerator extends HalAppenderMapper { builder.single(link("loginInfo", loginInfoUrl)); } - if (SecurityUtils.getSubject().isAuthenticated() && !Authentications.isAuthenticatedSubjectAnonymous() || isAnonymousAccess()) { + if (shouldAppendSubjectRelatedLinks()) { builder.single(link("me", resourceLinks.me().self())); if (Authentications.isAuthenticatedSubjectAnonymous()) { @@ -122,7 +122,10 @@ public class IndexDtoGenerator extends HalAppenderMapper { return new IndexDto(builder.build(), embeddedBuilder.build(), scmContextProvider.getVersion()); } - private boolean isAnonymousAccess() { - return Authentications.isAuthenticatedSubjectAnonymous() && configuration.getAnonymousMode() == AnonymousMode.FULL; + private boolean shouldAppendSubjectRelatedLinks() { + return (SecurityUtils.getSubject().isAuthenticated() + && !Authentications.isAuthenticatedSubjectAnonymous()) + || (Authentications.isAuthenticatedSubjectAnonymous() + && configuration.getAnonymousMode() == AnonymousMode.FULL); } }