"/maintenance/*", "/setup/*",
"/sessions/*", "/oauth2/callback/*",
"/api/system/db_migration_status", "/api/system/status", "/api/system/migrate_db",
- "/api/server/version",
"/api/users/identity_providers", "/api/l10n/index",
"/api/authentication/login", "/api/authentication/logout", "/api/authentication/validate",
"/api/project_badges/measure", "/api/project_badges/quality_gate");
import com.google.common.io.Resources;
import org.apache.commons.io.IOUtils;
import org.sonar.api.platform.Server;
+import org.sonar.api.server.ws.Change;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.RequestHandler;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
+import org.sonar.server.user.UserSession;
import org.sonarqube.ws.MediaTypes;
import static java.nio.charset.StandardCharsets.UTF_8;
public class ServerWs implements WebService, RequestHandler {
private final Server server;
+ private final UserSession userSession;
- public ServerWs(Server server) {
+ public ServerWs(Server server, UserSession userSession) {
this.server = server;
+ this.userSession = userSession;
}
@Override
.setDescription("Version of SonarQube in plain text")
.setSince("2.10")
.setResponseExample(Resources.getResource(this.getClass(), "example-server-version.txt"))
+ .setChangelog(new Change("9.4", "require authentication"))
.setHandler(this);
controller.done();
@Override
public void handle(Request request, Response response) throws Exception {
+ userSession.checkLoggedIn();
response.stream().setMediaType(MediaTypes.TXT);
IOUtils.write(server.getVersion(), response.stream().output(), UTF_8);
}
*/
package org.sonar.server.platform.ws;
+import org.assertj.core.api.Assertions;
+import org.junit.Rule;
import org.junit.Test;
import org.sonar.api.platform.Server;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.WebService;
+import org.sonar.server.exceptions.UnauthorizedException;
+import org.sonar.server.tester.UserSessionRule;
import org.sonar.server.ws.DumbResponse;
import org.sonar.server.ws.TestResponse;
public class ServerWsTest {
+ @Rule
+ public UserSessionRule userSessionRule = UserSessionRule.standalone();
+
private Server server = mock(Server.class);
- private ServerWs underTest = new ServerWs(server);
+ private ServerWs underTest = new ServerWs(server, userSessionRule);
@Test
public void define_version_action() {
assertThat(versionAction.since()).isEqualTo("2.10");
assertThat(versionAction.description()).isNotEmpty();
assertThat(versionAction.isPost()).isFalse();
+ assertThat(versionAction.changelog()).isNotEmpty();
+ }
+
+ @Test
+ public void require_authentication() {
+ DumbResponse response = new DumbResponse();
+ Assertions.assertThatThrownBy(() -> underTest.handle(mock(Request.class), response))
+ .hasMessage("Authentication is required")
+ .isInstanceOf(UnauthorizedException.class);
}
@Test
public void returns_version_as_plain_text() throws Exception {
+ userSessionRule.logIn();
when(server.getVersion()).thenReturn("6.4-SNAPSHOT");
DumbResponse response = new DumbResponse();
@Test
public void test_example_of_version() {
+ userSessionRule.logIn();
WebService.Context context = new WebService.Context();
underTest.define(context);