aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-server/src/main/java/org/sonar/server
diff options
context:
space:
mode:
authorJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-07-15 13:52:11 +0200
committerJean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com>2013-07-15 13:52:11 +0200
commita8c34f56f8500744b33d469a67b16f081b6a35fd (patch)
treec207223fca55ae2c8a5bf040c454b70faec0a5bf /sonar-server/src/main/java/org/sonar/server
parent3ec6532e62c425e2cdb8a144303f025788858fab (diff)
downloadsonarqube-a8c34f56f8500744b33d469a67b16f081b6a35fd.tar.gz
sonarqube-a8c34f56f8500744b33d469a67b16f081b6a35fd.zip
SONAR-4463 Added LoadedTemplate entry to cover default permission template initialization
Diffstat (limited to 'sonar-server/src/main/java/org/sonar/server')
-rw-r--r--sonar-server/src/main/java/org/sonar/server/platform/Platform.java1
-rw-r--r--sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java101
2 files changed, 102 insertions, 0 deletions
diff --git a/sonar-server/src/main/java/org/sonar/server/platform/Platform.java b/sonar-server/src/main/java/org/sonar/server/platform/Platform.java
index e06af738a31..00218059afb 100644
--- a/sonar-server/src/main/java/org/sonar/server/platform/Platform.java
+++ b/sonar-server/src/main/java/org/sonar/server/platform/Platform.java
@@ -329,6 +329,7 @@ public final class Platform {
startupContainer.addSingleton(GenerateBootstrapIndex.class);
startupContainer.addSingleton(RegisterNewMeasureFilters.class);
startupContainer.addSingleton(RegisterNewDashboards.class);
+ startupContainer.addSingleton(RegisterPermissionTemplates.class);
startupContainer.addSingleton(RenameDeprecatedPropertyKeys.class);
startupContainer.addSingleton(LogServerId.class);
startupContainer.addSingleton(RegisterServletFilters.class);
diff --git a/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java b/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
new file mode 100644
index 00000000000..51fc1cc2890
--- /dev/null
+++ b/sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java
@@ -0,0 +1,101 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 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.startup;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.sonar.api.security.DefaultGroups;
+import org.sonar.api.utils.TimeProfiler;
+import org.sonar.api.web.UserRole;
+import org.sonar.core.permission.PermissionDao;
+import org.sonar.core.permission.PermissionTemplateDto;
+import org.sonar.core.template.LoadedTemplateDao;
+import org.sonar.core.template.LoadedTemplateDto;
+import org.sonar.core.user.UserDao;
+import org.sonar.server.platform.PersistentSettings;
+
+public class RegisterPermissionTemplates {
+
+ public static final String DEFAULT_TEMPLATE_PROPERTY = "sonar.permission.template.default";
+
+ private static final Logger LOG = LoggerFactory.getLogger(RegisterPermissionTemplates.class);
+
+ private final LoadedTemplateDao loadedTemplateDao;
+ private final PermissionDao permissionDao;
+ private final UserDao userDao;
+ private final PersistentSettings settings;
+
+ public RegisterPermissionTemplates(LoadedTemplateDao loadedTemplateDao, PermissionDao permissionDao,
+ UserDao userDao, PersistentSettings settings) {
+ this.loadedTemplateDao = loadedTemplateDao;
+ this.permissionDao = permissionDao;
+ this.userDao = userDao;
+ this.settings = settings;
+ }
+
+ public void start() {
+ TimeProfiler profiler = new TimeProfiler(LOG).start("Register permission templates");
+
+ if(shouldRegister()) {
+ insertDefaultTemplate(PermissionTemplateDto.DEFAULT.getName());
+ registerInitialization();
+ setDefaultProperty(PermissionTemplateDto.DEFAULT.getKee());
+ }
+ profiler.stop();
+ }
+
+ private boolean shouldRegister() {
+ return loadedTemplateDao.countByTypeAndKey(LoadedTemplateDto.PERMISSION_TEMPLATE_TYPE, PermissionTemplateDto.DEFAULT.getKee()) == 0;
+ }
+
+ private void insertDefaultTemplate(String templateName) {
+ PermissionTemplateDto defaultPermissionTemplate = permissionDao
+ .createPermissionTemplate(templateName, PermissionTemplateDto.DEFAULT.getDescription());
+ addGroupPermission(defaultPermissionTemplate, UserRole.ADMIN, DefaultGroups.ADMINISTRATORS);
+ addGroupPermission(defaultPermissionTemplate, UserRole.USER, DefaultGroups.USERS);
+ addGroupPermission(defaultPermissionTemplate, UserRole.USER, DefaultGroups.ANYONE);
+ addGroupPermission(defaultPermissionTemplate, UserRole.CODEVIEWER, DefaultGroups.USERS);
+ addGroupPermission(defaultPermissionTemplate, UserRole.CODEVIEWER, DefaultGroups.ANYONE);
+ }
+
+ private void addGroupPermission(PermissionTemplateDto template, String permission, String groupName) {
+ Long groupId;
+ if(DefaultGroups.isAnyone(groupName)) {
+ groupId = null;
+ } else {
+ groupId = userDao.selectGroupByName(groupName).getId();
+ }
+ permissionDao.addGroupPermission(template.getId(), groupId, permission);
+ }
+
+ private void registerInitialization() {
+ LoadedTemplateDto loadedTemplate = new LoadedTemplateDto(PermissionTemplateDto.DEFAULT.getKee(),
+ LoadedTemplateDto.PERMISSION_TEMPLATE_TYPE);
+ loadedTemplateDao.insert(loadedTemplate);
+ }
+
+ private void setDefaultProperty(String defaultTemplate) {
+ if (settings.getString(DEFAULT_TEMPLATE_PROPERTY) == null) {
+ LOG.info("Set default permission template: " + defaultTemplate);
+ settings.saveProperty(DEFAULT_TEMPLATE_PROPERTY, defaultTemplate);
+ }
+ }
+}