diff options
author | Jean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com> | 2013-07-15 13:52:11 +0200 |
---|---|---|
committer | Jean-Baptiste Vilain <jean-baptiste.vilain@sonarsource.com> | 2013-07-15 13:52:11 +0200 |
commit | a8c34f56f8500744b33d469a67b16f081b6a35fd (patch) | |
tree | c207223fca55ae2c8a5bf040c454b70faec0a5bf /sonar-server/src/main/java/org/sonar/server | |
parent | 3ec6532e62c425e2cdb8a144303f025788858fab (diff) | |
download | sonarqube-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.java | 1 | ||||
-rw-r--r-- | sonar-server/src/main/java/org/sonar/server/startup/RegisterPermissionTemplates.java | 101 |
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); + } + } +} |