.setDescription("Add permission to a group.<br /> " +
"This service defaults to global permissions, but can be limited to project permissions by providing project id or project key.<br /> " +
"The group name or group id must be provided. <br />" +
- "It requires administration permissions to access.")
+ "Requires one of the following permissions:" +
+ "<ul>" +
+ "<li>'Administer System'</li>" +
+ "<li>'Administer' rights on the specified project</li>" +
+ "</ul>")
.setSince("5.2")
.setPost(true)
.setHandler(this);
WebService.NewAction action = context.createAction(ACTION)
.setDescription("Add permission to a user.<br /> " +
"This service defaults to global permissions, but can be limited to project permissions by providing project id or project key.<br />" +
- "It requires administration permissions to access.")
+ "Requires one of the following permissions:" +
+ "<ul>" +
+ "<li>'Administer System'</li>" +
+ "<li>'Administer' rights on the specified project</li>" +
+ "</ul>")
.setSince("5.2")
.setPost(true)
.setHandler(this);
.setDescription("Lists the groups with their permissions.<br>" +
"This service defaults to global permissions, but can be limited to project permissions by providing project id or project key.<br> " +
"This service defaults to all groups, but can be limited to groups with a specific permission by providing the desired permission.<br>" +
- "It requires administration permissions to access.")
+ "Requires one of the following permissions:" +
+ "<ul>" +
+ "<li>'Administer System'</li>" +
+ "<li>'Administer' rights on the specified project</li>" +
+ "</ul>")
.addPagingParams(DEFAULT_PAGE_SIZE, RESULTS_MAX_SIZE)
.addSearchQuery("sonar", "names").setDescription("Limit search to group names that contain the supplied string. Must have at least %d characters.<br/>" +
"When this parameter is not set, only groups having at least one permission are returned.", SEARCH_QUERY_MIN_LENGTH)
.setDescription("Remove a permission from a group.<br /> " +
"This service defaults to global permissions, but can be limited to project permissions by providing project id or project key.<br /> " +
"The group id or group name must be provided, not both.<br />" +
- "It requires administration permissions to access.")
+ "Requires one of the following permissions:" +
+ "<ul>" +
+ "<li>'Administer System'</li>" +
+ "<li>'Administer' rights on the specified project</li>" +
+ "</ul>")
.setSince("5.2")
.setPost(true)
.setHandler(this);
WebService.NewAction action = context.createAction(ACTION)
.setDescription("Remove permission from a user.<br /> " +
"This service defaults to global permissions, but can be limited to project permissions by providing project id or project key.<br /> " +
- "It requires administration permissions to access.")
+ "Requires one of the following permissions:" +
+ "<ul>" +
+ "<li>'Administer System'</li>" +
+ "<li>'Administer' rights on the specified project</li>" +
+ "</ul>")
.setSince("5.2")
.setPost(true)
.setHandler(this);
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction(ACTION)
.setDescription("List global permissions. <br />" +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'")
.setResponseExample(getClass().getResource("search_global_permissions-example.json"))
.setSince("5.2")
.setHandler(this);
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("search_project_permissions")
.setDescription("List project permissions. A project can be a technical project, a view or a developer.<br />" +
- "Requires 'Administer System' permission or 'Administer' rights on the specified project.")
+ "Requires one of the following permissions:" +
+ "<ul>" +
+ "<li>'Administer System'</li>" +
+ "<li>'Administer' rights on the specified project</li>" +
+ "</ul>")
.setResponseExample(getClass().getResource("search_project_permissions-example.json"))
.setSince("5.2")
.addPagingParams(25)
.setDescription("Lists the users with their permissions as individual users rather than through group affiliation.<br>" +
"This service defaults to global permissions, but can be limited to project permissions by providing project id or project key.<br> " +
"This service defaults to all users, but can be limited to users with a specific permission by providing the desired permission.<br>" +
- "It requires administration permissions to access.")
+ "Requires one of the following permissions:" +
+ "<ul>" +
+ "<li>'Administer System'</li>" +
+ "<li>'Administer' rights on the specified project</li>" +
+ "</ul>")
.addPagingParams(DEFAULT_PAGE_SIZE, RESULTS_MAX_SIZE)
.setInternal(true)
.setResponseExample(getClass().getResource("users-example.json"))
* 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.permission.ws.template;
import org.sonar.api.server.ws.Request;
.setSince("5.2")
.setDescription("Add a group to a permission template.<br /> " +
"The group id or group name must be provided. <br />" +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.setHandler(this);
createTemplateParameters(action);
this.system = system;
}
+ private static AddProjectCreatorToTemplateWsRequest toWsRequest(Request request) {
+ AddProjectCreatorToTemplateWsRequest wsRequest = AddProjectCreatorToTemplateWsRequest.builder()
+ .setPermission(request.mandatoryParam(PARAM_PERMISSION))
+ .setTemplateId(request.param(PARAM_TEMPLATE_ID))
+ .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
+ .setTemplateName(request.param(PARAM_TEMPLATE_NAME))
+ .build();
+ validateProjectPermission(wsRequest.getPermission());
+ return wsRequest;
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("add_project_creator_to_template")
.setDescription("Add a project creator to a permission template.<br>" +
- "Requires the 'Administer' permission.")
+ "Requires the following permission: 'Administer System'.")
.setSince("6.0")
.setPost(true)
.setHandler(this);
dbClient.permissionTemplateCharacteristicDao().update(dbSession, targetTemplatePermission);
dbSession.commit();
}
-
- private static AddProjectCreatorToTemplateWsRequest toWsRequest(Request request) {
- AddProjectCreatorToTemplateWsRequest wsRequest = AddProjectCreatorToTemplateWsRequest.builder()
- .setPermission(request.mandatoryParam(PARAM_PERMISSION))
- .setTemplateId(request.param(PARAM_TEMPLATE_ID))
- .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
- .setTemplateName(request.param(PARAM_TEMPLATE_NAME))
- .build();
- validateProjectPermission(wsRequest.getPermission());
- return wsRequest;
- }
}
* 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.permission.ws.template;
import java.util.List;
this.userSession = userSession;
}
+ private static AddUserToTemplateWsRequest toAddUserToTemplateWsRequest(Request request) {
+ return new AddUserToTemplateWsRequest()
+ .setLogin(request.mandatoryParam(PARAM_USER_LOGIN))
+ .setPermission(request.mandatoryParam(PARAM_PERMISSION))
+ .setTemplateId(request.param(PARAM_TEMPLATE_ID))
+ .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
+ .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context
.setPost(true)
.setSince("5.2")
.setDescription("Add a user to a permission template.<br /> " +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.setHandler(this);
createTemplateParameters(action);
}
}
- private static AddUserToTemplateWsRequest toAddUserToTemplateWsRequest(Request request) {
- return new AddUserToTemplateWsRequest()
- .setLogin(request.mandatoryParam(PARAM_USER_LOGIN))
- .setPermission(request.mandatoryParam(PARAM_PERMISSION))
- .setTemplateId(request.param(PARAM_TEMPLATE_ID))
- .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
- .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
- }
-
private boolean isUserAlreadyAdded(DbSession dbSession, long templateId, String userLogin, String permission) {
PermissionQuery permissionQuery = PermissionQuery.builder().setPermission(permission).build();
List<String> usersWithPermission = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, permissionQuery, templateId);
* 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.permission.ws.template;
import java.util.Collections;
this.wsSupport = wsSupport;
}
+ private static ApplyTemplateWsRequest toApplyTemplateWsRequest(Request request) {
+ return new ApplyTemplateWsRequest()
+ .setProjectId(request.param(PARAM_PROJECT_ID))
+ .setProjectKey(request.param(PARAM_PROJECT_KEY))
+ .setTemplateId(request.param(PARAM_TEMPLATE_ID))
+ .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("apply_template")
.setDescription("Apply a permission template to one project.<br>" +
"The project id or project key must be provided.<br>" +
"The template id or name must be provided.<br>" +
- "Requires the following permission:" +
- "<ul>" +
- " <li>'Administer System'</li>" +
- "</ul>")
+ "Requires the following permission: 'Administer System'.")
.setPost(true)
.setSince("5.2")
.setHandler(this);
permissionTemplateService.apply(dbSession, template, Collections.singletonList(project));
}
}
-
- private static ApplyTemplateWsRequest toApplyTemplateWsRequest(Request request) {
- return new ApplyTemplateWsRequest()
- .setProjectId(request.param(PARAM_PROJECT_ID))
- .setProjectKey(request.param(PARAM_PROJECT_KEY))
- .setTemplateId(request.param(PARAM_TEMPLATE_ID))
- .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
- }
}
this.resourceTypes = resourceTypes;
}
+ private static BulkApplyTemplateWsRequest toBulkApplyTemplateWsRequest(Request request) {
+ return new BulkApplyTemplateWsRequest()
+ .setTemplateId(request.param(PARAM_TEMPLATE_ID))
+ .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
+ .setTemplateName(request.param(PARAM_TEMPLATE_NAME))
+ .setQualifier(request.param(PARAM_QUALIFIER))
+ .setQuery(request.param(Param.TEXT_QUERY));
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("bulk_apply_template")
.setDescription("Apply a permission template to several projects.<br />" +
"The template id or name must be provided.<br />" +
- "Requires the following permission:" +
- "<ul>" +
- " <li>'Administer System'</li>" +
- "</ul>")
+ "Requires the following permission: 'Administer System'.")
.setPost(true)
.setSince("5.5")
.setHandler(this);
? Collections2.transform(resourceTypes.getRoots(), ResourceType::getQualifier).toArray(new String[resourceTypes.getRoots().size()])
: (new String[] {qualifier});
}
-
- private static BulkApplyTemplateWsRequest toBulkApplyTemplateWsRequest(Request request) {
- return new BulkApplyTemplateWsRequest()
- .setTemplateId(request.param(PARAM_TEMPLATE_ID))
- .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
- .setTemplateName(request.param(PARAM_TEMPLATE_NAME))
- .setQualifier(request.param(PARAM_QUALIFIER))
- .setQuery(request.param(Param.TEXT_QUERY));
- }
}
* 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.permission.ws.template;
import java.util.Date;
this.wsSupport = wsSupport;
}
+ private static CreateTemplateWsRequest toCreateTemplateWsRequest(Request request) {
+ return new CreateTemplateWsRequest()
+ .setName(request.mandatoryParam(PARAM_NAME))
+ .setDescription(request.param(PARAM_DESCRIPTION))
+ .setProjectKeyPattern(request.param(PARAM_PROJECT_KEY_PATTERN))
+ .setOrganizationKey(request.param(PARAM_ORGANIZATION_KEY));
+ }
+
+ private static CreateTemplateWsResponse buildResponse(PermissionTemplateDto permissionTemplateDto) {
+ PermissionTemplate permissionTemplateBuilder = toPermissionTemplateResponse(permissionTemplateDto);
+ return CreateTemplateWsResponse.newBuilder().setPermissionTemplate(permissionTemplateBuilder).build();
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("create_template")
.setDescription("Create a permission template.<br />" +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.setResponseExample(getClass().getResource("create_template-example.json"))
.setSince("5.2")
.setPost(true)
}
}
- private static CreateTemplateWsRequest toCreateTemplateWsRequest(Request request) {
- return new CreateTemplateWsRequest()
- .setName(request.mandatoryParam(PARAM_NAME))
- .setDescription(request.param(PARAM_DESCRIPTION))
- .setProjectKeyPattern(request.param(PARAM_PROJECT_KEY_PATTERN))
- .setOrganizationKey(request.param(PARAM_ORGANIZATION_KEY));
- }
-
private void validateTemplateNameForCreation(DbSession dbSession, OrganizationDto org, String name) {
validateTemplateNameFormat(name);
dbSession.commit();
return template;
}
-
- private static CreateTemplateWsResponse buildResponse(PermissionTemplateDto permissionTemplateDto) {
- PermissionTemplate permissionTemplateBuilder = toPermissionTemplateResponse(permissionTemplateDto);
- return CreateTemplateWsResponse.newBuilder().setPermissionTemplate(permissionTemplateBuilder).build();
- }
}
* 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.permission.ws.template;
import org.sonar.api.server.ws.Request;
this.defaultTemplatesResolver = defaultTemplatesResolver;
}
+ private static DeleteTemplateWsRequest toDeleteTemplateWsRequest(Request request) {
+ return new DeleteTemplateWsRequest()
+ .setTemplateId(request.param(PARAM_TEMPLATE_ID))
+ .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
+ .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("delete_template")
.setDescription("Delete a permission template.<br />" +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.setSince("5.2")
.setPost(true)
.setHandler(this);
"It is not possible to delete the default permission template for views"));
}
- private static DeleteTemplateWsRequest toDeleteTemplateWsRequest(Request request) {
- return new DeleteTemplateWsRequest()
- .setTemplateId(request.param(PARAM_TEMPLATE_ID))
- .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
- .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
- }
-
}
* 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.permission.ws.template;
import org.sonar.api.server.ws.Request;
.setSince("5.2")
.setDescription("Remove a group from a permission template.<br /> " +
"The group id or group name must be provided. <br />" +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.setHandler(this);
createTemplateParameters(action);
package org.sonar.server.permission.ws.template;
-import java.util.Optional;
import org.sonar.api.server.ws.Request;
import org.sonar.api.server.ws.Response;
import org.sonar.api.server.ws.WebService;
this.system = system;
}
+ private static RemoveProjectCreatorFromTemplateWsRequest toWsRequest(Request request) {
+ RemoveProjectCreatorFromTemplateWsRequest wsRequest = RemoveProjectCreatorFromTemplateWsRequest.builder()
+ .setPermission(request.mandatoryParam(PARAM_PERMISSION))
+ .setTemplateId(request.param(PARAM_TEMPLATE_ID))
+ .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
+ .setTemplateName(request.param(PARAM_TEMPLATE_NAME))
+ .build();
+ validateProjectPermission(wsRequest.getPermission());
+ return wsRequest;
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("remove_project_creator_from_template")
.setDescription("Remove a project creator from a permission template.<br>" +
- "Requires the 'Administer' permission.")
+ "Requires the following permission: 'Administer System'.")
.setSince("6.0")
.setPost(true)
.setHandler(this);
checkGlobalAdmin(userSession, template.getOrganizationUuid());
PermissionTemplateCharacteristicDao dao = dbClient.permissionTemplateCharacteristicDao();
- Optional<PermissionTemplateCharacteristicDto> templatePermission = dao.selectByPermissionAndTemplateId(dbSession, request.getPermission(), template.getId());
- if (templatePermission.isPresent()) {
- updateTemplateCharacteristic(dbSession, templatePermission.get());
- }
+ dao.selectByPermissionAndTemplateId(dbSession, request.getPermission(), template.getId())
+ .ifPresent(permissionTemplateCharacteristicDto -> updateTemplateCharacteristic(dbSession, permissionTemplateCharacteristicDto));
}
}
dbClient.permissionTemplateCharacteristicDao().update(dbSession, targetTemplatePermission);
dbSession.commit();
}
-
- private static RemoveProjectCreatorFromTemplateWsRequest toWsRequest(Request request) {
- RemoveProjectCreatorFromTemplateWsRequest wsRequest = RemoveProjectCreatorFromTemplateWsRequest.builder()
- .setPermission(request.mandatoryParam(PARAM_PERMISSION))
- .setTemplateId(request.param(PARAM_TEMPLATE_ID))
- .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
- .setTemplateName(request.param(PARAM_TEMPLATE_NAME))
- .build();
- validateProjectPermission(wsRequest.getPermission());
- return wsRequest;
- }
}
* 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.permission.ws.template;
import org.sonar.api.server.ws.Request;
this.userSession = userSession;
}
+ private static RemoveUserFromTemplateWsRequest toRemoveUserFromTemplateWsRequest(Request request) {
+ return new RemoveUserFromTemplateWsRequest()
+ .setPermission(request.mandatoryParam(PARAM_PERMISSION))
+ .setLogin(request.mandatoryParam(PARAM_USER_LOGIN))
+ .setTemplateId(request.param(PARAM_TEMPLATE_ID))
+ .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
+ .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context
.setPost(true)
.setSince("5.2")
.setDescription("Remove a user from a permission template.<br /> " +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.setHandler(this);
createTemplateParameters(action);
dbSession.commit();
}
}
-
- private static RemoveUserFromTemplateWsRequest toRemoveUserFromTemplateWsRequest(Request request) {
- return new RemoveUserFromTemplateWsRequest()
- .setPermission(request.mandatoryParam(PARAM_PERMISSION))
- .setLogin(request.mandatoryParam(PARAM_USER_LOGIN))
- .setTemplateId(request.param(PARAM_TEMPLATE_ID))
- .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
- .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
- }
}
* 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.permission.ws.template;
import java.util.Locale;
import org.sonarqube.ws.client.permission.SearchTemplatesWsRequest;
import static org.sonar.api.utils.DateUtils.formatDateTime;
-import static org.sonar.core.permission.GlobalPermissions.SYSTEM_ADMIN;
import static org.sonar.core.util.Protobuf.setNullable;
+import static org.sonar.server.permission.PermissionPrivilegeChecker.checkGlobalAdmin;
import static org.sonar.server.permission.ws.PermissionsWsParametersBuilder.createOrganizationParameter;
import static org.sonar.server.ws.WsUtils.writeProtobuf;
import static org.sonarqube.ws.client.permission.PermissionsWsParameters.PARAM_ORGANIZATION_KEY;
this.dataLoader = dataLoader;
}
- @Override
- public void define(WebService.NewController context) {
- WebService.NewAction action = context.createAction("search_templates")
- .setDescription("List permission templates.<br />" +
- "Requires the following permission:" +
- "<ul>" +
- " <li>'Administer System'</li>" +
- "</ul>")
- .setResponseExample(getClass().getResource("search_templates-example.json"))
- .setSince("5.2")
- .addSearchQuery("defau", "permission template names")
- .setHandler(this);
-
- createOrganizationParameter(action);
- }
-
- @Override
- public void handle(Request wsRequest, Response wsResponse) throws Exception {
- try (DbSession dbSession = dbClient.openSession(false)) {
- OrganizationDto org = support.findOrganization(dbSession, wsRequest.param(PARAM_ORGANIZATION_KEY));
- SearchTemplatesWsRequest request = new SearchTemplatesWsRequest()
- .setOrganizationUuid(org.getUuid())
- .setQuery(wsRequest.param(Param.TEXT_QUERY));
- userSession.checkLoggedIn().checkOrganizationPermission(request.getOrganizationUuid(), SYSTEM_ADMIN);
-
- SearchTemplatesWsResponse searchTemplatesWsResponse = buildResponse(dataLoader.load(dbSession, request));
- writeProtobuf(searchTemplatesWsResponse, wsRequest, wsResponse);
- }
- }
-
- private WsPermissions.SearchTemplatesWsResponse buildResponse(SearchTemplatesData data) {
- SearchTemplatesWsResponse.Builder response = SearchTemplatesWsResponse.newBuilder();
-
- buildTemplatesResponse(response, data);
- buildDefaultTemplatesResponse(response, data);
- buildPermissionsResponse(response);
-
- return response.build();
- }
-
private static void buildDefaultTemplatesResponse(SearchTemplatesWsResponse.Builder response, SearchTemplatesData data) {
TemplateIdQualifier.Builder templateUuidQualifierBuilder = TemplateIdQualifier.newBuilder();
}
}
+ @Override
+ public void define(WebService.NewController context) {
+ WebService.NewAction action = context.createAction("search_templates")
+ .setDescription("List permission templates.<br />" +
+ "Requires the following permission: 'Administer System'.")
+ .setResponseExample(getClass().getResource("search_templates-example.json"))
+ .setSince("5.2")
+ .addSearchQuery("defau", "permission template names")
+ .setHandler(this);
+
+ createOrganizationParameter(action);
+ }
+
+ @Override
+ public void handle(Request wsRequest, Response wsResponse) throws Exception {
+ try (DbSession dbSession = dbClient.openSession(false)) {
+ OrganizationDto org = support.findOrganization(dbSession, wsRequest.param(PARAM_ORGANIZATION_KEY));
+ SearchTemplatesWsRequest request = new SearchTemplatesWsRequest()
+ .setOrganizationUuid(org.getUuid())
+ .setQuery(wsRequest.param(Param.TEXT_QUERY));
+ checkGlobalAdmin(userSession, request.getOrganizationUuid());
+
+ SearchTemplatesWsResponse searchTemplatesWsResponse = buildResponse(dataLoader.load(dbSession, request));
+ writeProtobuf(searchTemplatesWsResponse, wsRequest, wsResponse);
+ }
+ }
+
+ private WsPermissions.SearchTemplatesWsResponse buildResponse(SearchTemplatesData data) {
+ SearchTemplatesWsResponse.Builder response = SearchTemplatesWsResponse.newBuilder();
+
+ buildTemplatesResponse(response, data);
+ buildDefaultTemplatesResponse(response, data);
+ buildPermissionsResponse(response);
+
+ return response.build();
+ }
+
private void buildPermissionsResponse(SearchTemplatesWsResponse.Builder response) {
Permission.Builder permissionResponse = Permission.newBuilder();
for (String permissionKey : ProjectPermissions.ALL) {
* 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.permission.ws.template;
import org.sonar.api.i18n.I18n;
this.i18n = i18n;
}
+ private static SetDefaultTemplateWsRequest toSetDefaultTemplateWsRequest(Request request) {
+ return new SetDefaultTemplateWsRequest()
+ .setQualifier(request.param(PARAM_QUALIFIER))
+ .setTemplateId(request.param(PARAM_TEMPLATE_ID))
+ .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
+ .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("set_default_template")
.setDescription("Set a permission template as default.<br />" +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.setPost(true)
.setSince("5.2")
.setHandler(this);
}
}
- private static SetDefaultTemplateWsRequest toSetDefaultTemplateWsRequest(Request request) {
- return new SetDefaultTemplateWsRequest()
- .setQualifier(request.param(PARAM_QUALIFIER))
- .setTemplateId(request.param(PARAM_TEMPLATE_ID))
- .setOrganization(request.param(PARAM_ORGANIZATION_KEY))
- .setTemplateName(request.param(PARAM_TEMPLATE_NAME));
- }
-
private PermissionTemplateDto findTemplate(DbSession dbSession, SetDefaultTemplateWsRequest request) {
return wsSupport.findTemplate(dbSession, newTemplateRef(request.getTemplateId(),
request.getOrganization(), request.getTemplateName()));
* 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.permission.ws.template;
import com.google.common.collect.Multimap;
this.support = support;
}
+ private static PermissionQuery buildPermissionQuery(Request request) {
+ String textQuery = request.param(TEXT_QUERY);
+ String permission = request.param(PARAM_PERMISSION);
+ PermissionQuery.Builder permissionQuery = PermissionQuery.builder()
+ .setPermission(permission != null ? validateProjectPermission(permission) : null)
+ .setPageIndex(request.mandatoryParamAsInt(PAGE))
+ .setPageSize(request.mandatoryParamAsInt(PAGE_SIZE))
+ .setSearchQuery(textQuery);
+ if (textQuery == null) {
+ permissionQuery.withAtLeastOnePermission();
+ }
+ return permissionQuery.build();
+ }
+
+ private static WsPermissions.WsGroupsResponse buildResponse(List<GroupDto> groups, List<PermissionTemplateGroupDto> groupPermissions, Paging paging) {
+ Multimap<Long, String> permissionsByGroupId = TreeMultimap.create();
+ groupPermissions.forEach(groupPermission -> permissionsByGroupId.put(groupPermission.getGroupId(), groupPermission.getPermission()));
+ WsPermissions.WsGroupsResponse.Builder response = WsPermissions.WsGroupsResponse.newBuilder();
+
+ groups.forEach(group -> {
+ WsPermissions.Group.Builder wsGroup = response.addGroupsBuilder()
+ .setName(group.getName());
+ if (group.getId() != 0L) {
+ wsGroup.setId(String.valueOf(group.getId()));
+ }
+ setNullable(group.getDescription(), wsGroup::setDescription);
+ wsGroup.addAllPermissions(permissionsByGroupId.get(group.getId()));
+ });
+
+ response.getPagingBuilder()
+ .setPageIndex(paging.pageIndex())
+ .setPageSize(paging.pageSize())
+ .setTotal(paging.total());
+ return response.build();
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("template_groups")
.setInternal(true)
.setDescription("Lists the groups with their permission as individual groups rather than through user affiliation on the chosen template.<br />" +
"This service defaults to all groups, but can be limited to groups with a specific permission by providing the desired permission.<br>" +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.addPagingParams(DEFAULT_PAGE_SIZE, RESULTS_MAX_SIZE)
.setResponseExample(getClass().getResource("template_groups-example.json"))
.setHandler(this);
}
}
- private static PermissionQuery buildPermissionQuery(Request request) {
- String textQuery = request.param(TEXT_QUERY);
- String permission = request.param(PARAM_PERMISSION);
- PermissionQuery.Builder permissionQuery = PermissionQuery.builder()
- .setPermission(permission != null ? validateProjectPermission(permission) : null)
- .setPageIndex(request.mandatoryParamAsInt(PAGE))
- .setPageSize(request.mandatoryParamAsInt(PAGE_SIZE))
- .setSearchQuery(textQuery);
- if (textQuery == null) {
- permissionQuery.withAtLeastOnePermission();
- }
- return permissionQuery.build();
- }
-
- private static WsPermissions.WsGroupsResponse buildResponse(List<GroupDto> groups, List<PermissionTemplateGroupDto> groupPermissions, Paging paging) {
- Multimap<Long, String> permissionsByGroupId = TreeMultimap.create();
- groupPermissions.forEach(groupPermission -> permissionsByGroupId.put(groupPermission.getGroupId(), groupPermission.getPermission()));
- WsPermissions.WsGroupsResponse.Builder response = WsPermissions.WsGroupsResponse.newBuilder();
-
- groups.forEach(group -> {
- WsPermissions.Group.Builder wsGroup = response.addGroupsBuilder()
- .setName(group.getName());
- if (group.getId() != 0L) {
- wsGroup.setId(String.valueOf(group.getId()));
- }
- setNullable(group.getDescription(), wsGroup::setDescription);
- wsGroup.addAllPermissions(permissionsByGroupId.get(group.getId()));
- });
-
- response.getPagingBuilder()
- .setPageIndex(paging.pageIndex())
- .setPageSize(paging.pageSize())
- .setTotal(paging.total());
- return response.build();
- }
-
private List<GroupDto> findGroups(DbSession dbSession, PermissionQuery dbQuery, PermissionTemplateDto template) {
List<String> orderedNames = dbClient.permissionTemplateDao().selectGroupNamesByQueryAndTemplate(dbSession, dbQuery, template.getOrganizationUuid(), template.getId());
List<GroupDto> groups = dbClient.groupDao().selectByNames(dbSession, template.getOrganizationUuid(), orderedNames);
* 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.permission.ws.template;
import com.google.common.collect.Multimap;
this.support = support;
}
+ private static PermissionQuery buildQuery(Request wsRequest, PermissionTemplateDto template) {
+ String textQuery = wsRequest.param(TEXT_QUERY);
+ String permission = wsRequest.param(PARAM_PERMISSION);
+ PermissionQuery.Builder query = PermissionQuery.builder()
+ .setTemplate(template.getUuid())
+ .setPermission(permission != null ? validateProjectPermission(permission) : null)
+ .setPageIndex(wsRequest.mandatoryParamAsInt(PAGE))
+ .setPageSize(wsRequest.mandatoryParamAsInt(PAGE_SIZE))
+ .setSearchQuery(textQuery);
+ if (textQuery == null) {
+ query.withAtLeastOnePermission();
+ }
+ return query.build();
+ }
+
+ private static WsPermissions.UsersWsResponse buildResponse(List<UserDto> users, List<PermissionTemplateUserDto> permissionTemplateUsers, Paging paging) {
+ Multimap<Long, String> permissionsByUserId = TreeMultimap.create();
+ permissionTemplateUsers.forEach(userPermission -> permissionsByUserId.put(userPermission.getUserId(), userPermission.getPermission()));
+
+ UsersWsResponse.Builder responseBuilder = UsersWsResponse.newBuilder();
+ users.forEach(user -> {
+ WsPermissions.User.Builder userResponse = responseBuilder.addUsersBuilder()
+ .setLogin(user.getLogin())
+ .addAllPermissions(permissionsByUserId.get(user.getId()));
+ setNullable(user.getEmail(), userResponse::setEmail);
+ setNullable(user.getName(), userResponse::setName);
+ });
+ responseBuilder.getPagingBuilder()
+ .setPageIndex(paging.pageIndex())
+ .setPageSize(paging.pageSize())
+ .setTotal(paging.total())
+ .build();
+ return responseBuilder.build();
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context
.setSince("5.2")
.setDescription("Lists the users with their permission as individual users rather than through group affiliation on the chosen template. <br />" +
"This service defaults to all users, but can be limited to users with a specific permission by providing the desired permission.<br>" +
- "It requires administration permissions to access.<br />")
+ "Requires the following permission: 'Administer System'.")
.addPagingParams(DEFAULT_PAGE_SIZE, RESULTS_MAX_SIZE)
.setInternal(true)
.setResponseExample(getClass().getResource("template_users-example.json"))
}
}
- private static PermissionQuery buildQuery(Request wsRequest, PermissionTemplateDto template) {
- String textQuery = wsRequest.param(TEXT_QUERY);
- String permission = wsRequest.param(PARAM_PERMISSION);
- PermissionQuery.Builder query = PermissionQuery.builder()
- .setTemplate(template.getUuid())
- .setPermission(permission != null ? validateProjectPermission(permission) : null)
- .setPageIndex(wsRequest.mandatoryParamAsInt(PAGE))
- .setPageSize(wsRequest.mandatoryParamAsInt(PAGE_SIZE))
- .setSearchQuery(textQuery);
- if (textQuery == null) {
- query.withAtLeastOnePermission();
- }
- return query.build();
- }
-
- private static WsPermissions.UsersWsResponse buildResponse(List<UserDto> users, List<PermissionTemplateUserDto> permissionTemplateUsers, Paging paging) {
- Multimap<Long, String> permissionsByUserId = TreeMultimap.create();
- permissionTemplateUsers.forEach(userPermission -> permissionsByUserId.put(userPermission.getUserId(), userPermission.getPermission()));
-
- UsersWsResponse.Builder responseBuilder = UsersWsResponse.newBuilder();
- users.forEach(user -> {
- WsPermissions.User.Builder userResponse = responseBuilder.addUsersBuilder()
- .setLogin(user.getLogin())
- .addAllPermissions(permissionsByUserId.get(user.getId()));
- setNullable(user.getEmail(), userResponse::setEmail);
- setNullable(user.getName(), userResponse::setName);
- });
- responseBuilder.getPagingBuilder()
- .setPageIndex(paging.pageIndex())
- .setPageSize(paging.pageSize())
- .setTotal(paging.total())
- .build();
- return responseBuilder.build();
- }
-
private List<UserDto> findUsers(DbSession dbSession, PermissionQuery query, PermissionTemplateDto template) {
List<String> orderedLogins = dbClient.permissionTemplateDao().selectUserLoginsByQueryAndTemplate(dbSession, query, template.getId());
return Ordering.explicit(orderedLogins).onResultOf(UserDto::getLogin).immutableSortedCopy(dbClient.userDao().selectByLogins(dbSession, orderedLogins));
* 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.permission.ws.template;
import java.util.Date;
this.wsSupport = wsSupport;
}
+ private static UpdateTemplateWsRequest toUpdateTemplateWsRequest(Request request) {
+ return new UpdateTemplateWsRequest()
+ .setId(request.mandatoryParam(PARAM_ID))
+ .setName(request.param(PARAM_NAME))
+ .setDescription(request.param(PARAM_DESCRIPTION))
+ .setProjectKeyPattern(request.param(PARAM_PROJECT_KEY_PATTERN));
+ }
+
+ private static UpdateTemplateWsResponse buildResponse(PermissionTemplateDto permissionTemplate) {
+ PermissionTemplate permissionTemplateBuilder = toPermissionTemplateResponse(permissionTemplate);
+ return UpdateTemplateWsResponse.newBuilder().setPermissionTemplate(permissionTemplateBuilder).build();
+ }
+
@Override
public void define(WebService.NewController context) {
WebService.NewAction action = context.createAction("update_template")
.setDescription("Update a permission template.<br />" +
- "It requires administration permissions to access.")
+ "Requires the following permission: 'Administer System'.")
.setResponseExample(getClass().getResource("update_template-example.json"))
.setSince("5.2")
.setPost(true)
}
}
- private static UpdateTemplateWsRequest toUpdateTemplateWsRequest(Request request) {
- return new UpdateTemplateWsRequest()
- .setId(request.mandatoryParam(PARAM_ID))
- .setName(request.param(PARAM_NAME))
- .setDescription(request.param(PARAM_DESCRIPTION))
- .setProjectKeyPattern(request.param(PARAM_PROJECT_KEY_PATTERN));
- }
-
private void validateTemplate(DbSession dbSession, PermissionTemplateDto templateToUpdate) {
validateTemplateNameForUpdate(dbSession, templateToUpdate.getOrganizationUuid(), templateToUpdate.getName(), templateToUpdate.getId());
validateProjectPattern(templateToUpdate.getKeyPattern());
return dbClient.permissionTemplateDao().update(dbSession, templateToUpdate);
}
- private static UpdateTemplateWsResponse buildResponse(PermissionTemplateDto permissionTemplate) {
- PermissionTemplate permissionTemplateBuilder = toPermissionTemplateResponse(permissionTemplate);
- return UpdateTemplateWsResponse.newBuilder().setPermissionTemplate(permissionTemplateBuilder).build();
- }
-
private void validateTemplateNameForUpdate(DbSession dbSession, String organizationUuid, String name, long id) {
validateTemplateNameFormat(name);