PageRenderTime 31ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/testsuite/server-testkit-plugin/src/main/java/org/marvelution/jji/SetupJiraInstance.java

https://bitbucket.org/marvelution/jira-jenkins-integration
Java | 134 lines | 108 code | 11 blank | 15 comment | 2 complexity | 7930788286514d9cce62518fc6ad53eb MD5 | raw file
  1. /*
  2. * Copyright (c) 2012-present Marvelution B.V.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package org.marvelution.jji;
  17. import javax.inject.*;
  18. import com.atlassian.crowd.embedded.api.*;
  19. import com.atlassian.crowd.exception.*;
  20. import com.atlassian.event.api.*;
  21. import com.atlassian.jira.event.*;
  22. import com.atlassian.jira.exception.*;
  23. import com.atlassian.jira.permission.*;
  24. import com.atlassian.jira.security.groups.*;
  25. import com.atlassian.jira.security.plugin.*;
  26. import com.atlassian.jira.user.*;
  27. import com.atlassian.jira.user.util.*;
  28. import com.atlassian.plugin.spring.scanner.annotation.export.*;
  29. import com.atlassian.plugin.spring.scanner.annotation.imports.*;
  30. import com.atlassian.sal.api.lifecycle.*;
  31. import org.slf4j.*;
  32. import static org.apache.commons.lang3.StringUtils.*;
  33. @Named
  34. @ExportAsService(LifecycleAware.class)
  35. public class SetupJiraInstance
  36. implements LifecycleAware
  37. {
  38. private static final Logger LOGGER = LoggerFactory.getLogger(SetupJiraInstance.class);
  39. private final UserManager userManager;
  40. private final GroupManager groupManager;
  41. private final PermissionSchemeService permissionSchemeService;
  42. private final EventPublisher eventPublisher;
  43. @Inject
  44. public SetupJiraInstance(
  45. @ComponentImport UserManager userManager,
  46. @ComponentImport GroupManager groupManager,
  47. @ComponentImport PermissionSchemeService permissionSchemeService,
  48. @ComponentImport EventPublisher eventPublisher)
  49. {
  50. this.userManager = userManager;
  51. this.groupManager = groupManager;
  52. this.permissionSchemeService = permissionSchemeService;
  53. this.eventPublisher = eventPublisher;
  54. }
  55. @Override
  56. public void onStart()
  57. {
  58. eventPublisher.register(this);
  59. ApplicationUser admin = getApplicationUser("admin");
  60. ApplicationUser user = getApplicationUser("user");
  61. ApplicationUser superUser = getApplicationUser("superuser");
  62. Group group = groupManager.getGroup("jira-software-users");
  63. try
  64. {
  65. groupManager.addUserToGroup(user, group);
  66. groupManager.addUserToGroup(superUser, group);
  67. LOGGER.info("Added {} and {} to {}", user, superUser, group);
  68. }
  69. catch (GroupNotFoundException | UserNotFoundException e)
  70. {
  71. throw new IllegalStateException("User and group should exist", e);
  72. }
  73. catch (OperationNotPermittedException | OperationFailedException e)
  74. {
  75. throw new IllegalStateException("not allowed to update group memberships", e);
  76. }
  77. PermissionScheme permissionScheme = permissionSchemeService.getPermissionScheme(admin, 0L).get();
  78. grantSuperUserPermissions(admin, superUser, permissionScheme);
  79. }
  80. @EventListener
  81. public void onProjectCreated(ProjectCreatedEvent event)
  82. {
  83. ApplicationUser admin = getApplicationUser("admin");
  84. PermissionScheme permissionScheme = permissionSchemeService.getSchemeAssignedToProject(admin, event.getId()).get();
  85. grantSuperUserPermissions(admin, getApplicationUser("superuser"), permissionScheme);
  86. }
  87. private void grantSuperUserPermissions(
  88. ApplicationUser admin,
  89. ApplicationUser superUser,
  90. PermissionScheme permissionScheme)
  91. {
  92. PermissionSchemeInput permissionSchemeInput = PermissionSchemeInput.builder(permissionScheme)
  93. .addPermission(
  94. PermissionGrantInput.newGrant(PermissionHolder.holder(JiraPermissionHolderType.USER, superUser.getUsername()),
  95. new ProjectPermissionKey("trigger-jenkins-build")))
  96. .build();
  97. permissionSchemeService.updatePermissionScheme(admin, permissionScheme.getId(), permissionSchemeInput);
  98. LOGGER.info("Added trigger-build-permission to {} in scheme {}", superUser, permissionScheme);
  99. }
  100. private ApplicationUser getApplicationUser(String username)
  101. {
  102. ApplicationUser user = userManager.getUserByName(username);
  103. if (user == null)
  104. {
  105. try
  106. {
  107. user = userManager.createUser(
  108. new UserDetails(username, capitalize(username)).withPassword(username).withEmail(username + "@example.com"));
  109. }
  110. catch (CreateException | PermissionException e)
  111. {
  112. throw new IllegalStateException("Failed to create user " + username, e);
  113. }
  114. }
  115. LOGGER.info("Resolved {} -> {}", username, user);
  116. return user;
  117. }
  118. @Override
  119. public void onStop()
  120. {
  121. eventPublisher.unregister(this);
  122. }
  123. }