From: Julien Lancelot Date: Tue, 29 Apr 2014 08:45:10 +0000 (+0200) Subject: SONAR-5111 Declare "api/authentication" WS with org.sonar.api.server.WebService X-Git-Tag: 4.4-RC1~1358 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=cd83ddad9b7e3db94f3e856a4e0c20c2dc00be1f;p=sonarqube.git SONAR-5111 Declare "api/authentication" WS with org.sonar.api.server.WebService --- diff --git a/sonar-server/src/main/java/org/sonar/server/authentication/ws/AuthenticationWs.java b/sonar-server/src/main/java/org/sonar/server/authentication/ws/AuthenticationWs.java new file mode 100644 index 00000000000..b39bcb398b3 --- /dev/null +++ b/sonar-server/src/main/java/org/sonar/server/authentication/ws/AuthenticationWs.java @@ -0,0 +1,41 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.authentication.ws; + +import org.sonar.api.server.ws.RailsHandler; +import org.sonar.api.server.ws.WebService; + +public class AuthenticationWs implements WebService { + + @Override + public void define(Context context) { + NewController controller = context.createController("api/authentication"); + controller.setDescription("Check authentication credentials"); + + controller.createAction("validate") + .setDescription("Check credentials") + .setSince("3.3") + .setHandler(RailsHandler.INSTANCE); + + controller.done(); + } + +} diff --git a/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java index 68cabc0e676..65c0a5c1aa5 100644 --- a/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java +++ b/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java @@ -19,8 +19,6 @@ */ package org.sonar.server.platform; -import org.sonar.server.search.IndexUtils; - import com.google.common.collect.Lists; import org.apache.commons.configuration.BaseConfiguration; import org.sonar.api.config.EmailSettings; @@ -57,13 +55,7 @@ import org.sonar.core.measure.MeasureFilterFactory; import org.sonar.core.metric.DefaultMetricFinder; import org.sonar.core.notification.DefaultNotificationManager; import org.sonar.core.permission.PermissionFacade; -import org.sonar.core.persistence.DaoUtils; -import org.sonar.core.persistence.DatabaseVersion; -import org.sonar.core.persistence.DefaultDatabase; -import org.sonar.core.persistence.MyBatis; -import org.sonar.core.persistence.PreviewDatabaseFactory; -import org.sonar.core.persistence.SemaphoreUpdater; -import org.sonar.core.persistence.SemaphoresImpl; +import org.sonar.core.persistence.*; import org.sonar.core.preview.PreviewCache; import org.sonar.core.profiling.Profiling; import org.sonar.core.purge.PurgeProfiler; @@ -84,6 +76,7 @@ import org.sonar.jpa.session.DatabaseSessionFactory; import org.sonar.jpa.session.DatabaseSessionProvider; import org.sonar.jpa.session.DefaultDatabaseConnector; import org.sonar.jpa.session.ThreadLocalDatabaseSessionFactory; +import org.sonar.server.authentication.ws.AuthenticationWs; import org.sonar.server.charts.ChartFactory; import org.sonar.server.cluster.LocalNonBlockingWorkQueue; import org.sonar.server.component.DefaultComponentFinder; @@ -91,33 +84,10 @@ import org.sonar.server.component.DefaultRubyComponentService; import org.sonar.server.db.EmbeddedDatabaseFactory; import org.sonar.server.db.migrations.DatabaseMigrations; import org.sonar.server.db.migrations.DatabaseMigrator; -import org.sonar.server.debt.DebtCharacteristicsXMLImporter; -import org.sonar.server.debt.DebtModelBackup; -import org.sonar.server.debt.DebtModelLookup; -import org.sonar.server.debt.DebtModelOperations; -import org.sonar.server.debt.DebtModelPluginRepository; -import org.sonar.server.debt.DebtModelService; -import org.sonar.server.debt.DebtModelXMLExporter; -import org.sonar.server.debt.DebtRulesXMLImporter; +import org.sonar.server.debt.*; import org.sonar.server.es.ESIndex; import org.sonar.server.es.ESNode; -import org.sonar.server.issue.ActionPlanService; -import org.sonar.server.issue.ActionService; -import org.sonar.server.issue.AssignAction; -import org.sonar.server.issue.CommentAction; -import org.sonar.server.issue.DefaultIssueFinder; -import org.sonar.server.issue.InternalRubyIssueService; -import org.sonar.server.issue.IssueBulkChangeService; -import org.sonar.server.issue.IssueChangelogFormatter; -import org.sonar.server.issue.IssueChangelogService; -import org.sonar.server.issue.IssueCommentService; -import org.sonar.server.issue.IssueService; -import org.sonar.server.issue.IssueStatsFinder; -import org.sonar.server.issue.PlanAction; -import org.sonar.server.issue.PublicRubyIssueService; -import org.sonar.server.issue.ServerIssueStorage; -import org.sonar.server.issue.SetSeverityAction; -import org.sonar.server.issue.TransitionAction; +import org.sonar.server.issue.*; import org.sonar.server.issue.filter.IssueFilterService; import org.sonar.server.issue.filter.IssueFilterWs; import org.sonar.server.issue.ws.ActionPlanWs; @@ -130,91 +100,33 @@ import org.sonar.server.permission.InternalPermissionTemplateService; import org.sonar.server.permission.PermissionFinder; import org.sonar.server.platform.ws.RestartHandler; import org.sonar.server.platform.ws.SystemWs; -import org.sonar.server.plugins.BatchWs; -import org.sonar.server.plugins.InstalledPluginReferentialFactory; -import org.sonar.server.plugins.PluginDownloader; -import org.sonar.server.plugins.ServerExtensionInstaller; -import org.sonar.server.plugins.ServerPluginJarInstaller; -import org.sonar.server.plugins.ServerPluginJarsInstaller; -import org.sonar.server.plugins.ServerPluginRepository; -import org.sonar.server.plugins.UpdateCenterClient; -import org.sonar.server.plugins.UpdateCenterMatrixFactory; +import org.sonar.server.plugins.*; import org.sonar.server.qualitygate.QgateProjectFinder; import org.sonar.server.qualitygate.QualityGates; import org.sonar.server.qualitygate.RegisterQualityGates; import org.sonar.server.qualitygate.ws.QgateAppHandler; import org.sonar.server.qualitygate.ws.QualityGatesWs; -import org.sonar.server.qualityprofile.ESActiveRule; -import org.sonar.server.qualityprofile.ProfilesManager; -import org.sonar.server.qualityprofile.QProfileActiveRuleOperations; -import org.sonar.server.qualityprofile.QProfileBackup; -import org.sonar.server.qualityprofile.QProfileLookup; -import org.sonar.server.qualityprofile.QProfileOperations; -import org.sonar.server.qualityprofile.QProfileProjectLookup; -import org.sonar.server.qualityprofile.QProfileProjectOperations; -import org.sonar.server.qualityprofile.QProfileRepositoryExporter; -import org.sonar.server.qualityprofile.QProfileRuleLookup; -import org.sonar.server.qualityprofile.QProfiles; +import org.sonar.server.qualityprofile.*; import org.sonar.server.qualityprofile.ws.QProfileBackupWsHandler; import org.sonar.server.qualityprofile.ws.QProfilesWs; -import org.sonar.server.rule.DeprecatedRulesDefinition; -import org.sonar.server.rule.ESRuleTags; -import org.sonar.server.rule.RegisterRules; -import org.sonar.server.rule.RubyRuleService; -import org.sonar.server.rule.RuleDefinitionsLoader; -import org.sonar.server.rule.RuleOperations; -import org.sonar.server.rule.RuleRegistry; -import org.sonar.server.rule.RuleRepositories; -import org.sonar.server.rule.RuleTagLookup; -import org.sonar.server.rule.RuleTagOperations; -import org.sonar.server.rule.RuleTags; -import org.sonar.server.rule.Rules; -import org.sonar.server.rule.ws.AddTagsWsHandler; -import org.sonar.server.rule.ws.RemoveTagsWsHandler; -import org.sonar.server.rule.ws.RuleSearchWsHandler; -import org.sonar.server.rule.ws.RuleShowWsHandler; -import org.sonar.server.rule.ws.RuleTagsWs; -import org.sonar.server.rule.ws.RulesWs; +import org.sonar.server.rule.*; +import org.sonar.server.rule.ws.*; +import org.sonar.server.search.IndexUtils; import org.sonar.server.source.CodeColorizers; import org.sonar.server.source.DeprecatedSourceDecorator; import org.sonar.server.source.HtmlSourceDecorator; import org.sonar.server.source.SourceService; import org.sonar.server.source.ws.SourcesShowWsHandler; import org.sonar.server.source.ws.SourcesWs; -import org.sonar.server.startup.CleanPreviewAnalysisCache; -import org.sonar.server.startup.CopyRequirementsFromCharacteristicsToRules; -import org.sonar.server.startup.GeneratePluginIndex; -import org.sonar.server.startup.GwtPublisher; -import org.sonar.server.startup.JdbcDriverDeployer; -import org.sonar.server.startup.LogServerId; -import org.sonar.server.startup.RegisterDashboards; -import org.sonar.server.startup.RegisterDebtModel; -import org.sonar.server.startup.RegisterMetrics; -import org.sonar.server.startup.RegisterNewMeasureFilters; -import org.sonar.server.startup.RegisterPermissionTemplates; -import org.sonar.server.startup.RegisterQualityProfiles; -import org.sonar.server.startup.RegisterServletFilters; -import org.sonar.server.startup.RenameDeprecatedPropertyKeys; -import org.sonar.server.startup.ServerMetadataPersister; +import org.sonar.server.startup.*; import org.sonar.server.text.MacroInterpreter; import org.sonar.server.text.RubyTextService; import org.sonar.server.ui.JRubyI18n; import org.sonar.server.ui.JRubyProfiling; import org.sonar.server.ui.PageDecorations; import org.sonar.server.ui.Views; -import org.sonar.server.user.DefaultUserService; -import org.sonar.server.user.DoPrivileged; -import org.sonar.server.user.GroupMembershipFinder; -import org.sonar.server.user.GroupMembershipService; -import org.sonar.server.user.NewUserNotifier; -import org.sonar.server.user.SecurityRealmFactory; -import org.sonar.server.util.BooleanTypeValidation; -import org.sonar.server.util.FloatTypeValidation; -import org.sonar.server.util.IntegerTypeValidation; -import org.sonar.server.util.StringListTypeValidation; -import org.sonar.server.util.StringTypeValidation; -import org.sonar.server.util.TextTypeValidation; -import org.sonar.server.util.TypeValidations; +import org.sonar.server.user.*; +import org.sonar.server.util.*; import org.sonar.server.ws.ListingWs; import org.sonar.server.ws.WebServiceEngine; @@ -398,6 +310,9 @@ class ServerComponents { pico.addSingleton(WebServiceEngine.class); pico.addSingleton(ListingWs.class); + // authentication + pico.addSingleton(AuthenticationWs.class); + // users pico.addSingleton(SecurityRealmFactory.class); pico.addSingleton(HibernateUserFinder.class); diff --git a/sonar-server/src/test/java/org/sonar/server/authentication/ws/AuthenticationWsTest.java b/sonar-server/src/test/java/org/sonar/server/authentication/ws/AuthenticationWsTest.java new file mode 100644 index 00000000000..21be810466e --- /dev/null +++ b/sonar-server/src/test/java/org/sonar/server/authentication/ws/AuthenticationWsTest.java @@ -0,0 +1,49 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +package org.sonar.server.authentication.ws; + +import org.junit.Test; +import org.sonar.api.server.ws.RailsHandler; +import org.sonar.api.server.ws.WebService; +import org.sonar.server.ws.WsTester; + +import static org.fest.assertions.Assertions.assertThat; + +public class AuthenticationWsTest { + + WsTester tester = new WsTester(new AuthenticationWs()); + + @Test + public void define_ws() throws Exception { + WebService.Controller controller = tester.controller("api/authentication"); + assertThat(controller).isNotNull(); + assertThat(controller.description()).isNotEmpty(); + assertThat(controller.actions()).hasSize(1); + + WebService.Action validate = controller.action("validate"); + assertThat(validate).isNotNull(); + assertThat(validate.handler()).isInstanceOf(RailsHandler.class); + assertThat(validate.since()).isEqualTo("3.3"); + assertThat(validate.isPost()).isFalse(); + assertThat(validate.isInternal()).isFalse(); + assertThat(validate.params()).isEmpty(); + } +}