use of io.apiman.manager.api.rest.exceptions.OrganizationAlreadyExistsException in project apiman by apiman.
the class OrganizationResourceImpl method create.
/**
* @see IOrganizationResource#create(io.apiman.manager.api.beans.orgs.NewOrganizationBean)
*/
@Override
public OrganizationBean create(NewOrganizationBean bean) throws OrganizationAlreadyExistsException, InvalidNameException {
if (config.isAdminOnlyOrgCreationEnabled()) {
securityContext.checkAdminPermissions();
}
FieldValidator.validateName(bean.getName());
List<RoleBean> autoGrantedRoles;
SearchCriteriaBean criteria = new SearchCriteriaBean();
criteria.setPage(1);
criteria.setPageSize(100);
// $NON-NLS-1$ //$NON-NLS-2$
criteria.addFilter("autoGrant", "true", SearchCriteriaFilterOperator.bool_eq);
try {
autoGrantedRoles = query.findRoles(criteria).getBeans();
} catch (StorageException e) {
throw new SystemErrorException(e);
}
if ("true".equals(System.getProperty("apiman.manager.require-auto-granted-org", "true"))) {
// $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if (autoGrantedRoles.isEmpty()) {
// $NON-NLS-1$
throw new SystemErrorException(Messages.i18n.format("OrganizationResourceImpl.NoAutoGrantRoleAvailable"));
}
}
OrganizationBean orgBean = new OrganizationBean();
orgBean.setName(bean.getName());
orgBean.setDescription(bean.getDescription());
orgBean.setId(BeanUtils.idFromName(bean.getName()));
orgBean.setCreatedOn(new Date());
orgBean.setCreatedBy(securityContext.getCurrentUser());
orgBean.setModifiedOn(new Date());
orgBean.setModifiedBy(securityContext.getCurrentUser());
try {
// Store/persist the new organization
storage.beginTx();
if (storage.getOrganization(orgBean.getId()) != null) {
throw ExceptionFactory.organizationAlreadyExistsException(bean.getName());
}
storage.createOrganization(orgBean);
storage.createAuditEntry(AuditUtils.organizationCreated(orgBean, securityContext));
// Auto-grant memberships in roles to the creator of the organization
for (RoleBean roleBean : autoGrantedRoles) {
String currentUser = securityContext.getCurrentUser();
String orgId = orgBean.getId();
RoleMembershipBean membership = RoleMembershipBean.create(currentUser, roleBean.getId(), orgId);
membership.setCreatedOn(new Date());
storage.createMembership(membership);
}
storage.commitTx();
// $NON-NLS-1$
log.debug(String.format("Created organization %s: %s", orgBean.getName(), orgBean));
return orgBean;
} catch (AbstractRestException e) {
storage.rollbackTx();
throw e;
} catch (Exception e) {
storage.rollbackTx();
throw new SystemErrorException(e);
}
}
use of io.apiman.manager.api.rest.exceptions.OrganizationAlreadyExistsException in project apiman by apiman.
the class DevPortalService method createHomeOrg.
public OrganizationBean createHomeOrg(NewOrganizationBean newOrg) {
OrganizationBean existingOrg = tryAction(() -> storage.getOrganization(BeanUtils.idFromName(newOrg.getName())));
if (existingOrg != null) {
// First check who owns the existing organization, otherwise we could get into trouble by letting people spam create orgs.
if (securityContext.hasPermission(PermissionType.clientEdit, existingOrg.getId())) {
OrganizationAlreadyExistsException ex = ExceptionFactory.organizationAlreadyExistsException(existingOrg.getName());
LOG.error(ex, "Tried to create a new home org for the developer, but one already exists where they have clientEdit permissions");
throw ex;
}
// Use a name with a randomised suffix in the case that someone already created an organization with a user's name (e.g. FooUser-70ac3d)
String newOrgId = newOrg.getName() + UUID.randomUUID().toString().substring(0, 6);
LOG.warn("We tried to create a home organization for the user {0}, but it already existed. " + "This is likely due to another user coincidentally creating an org with the same name " + "An organization with a random suffix will be created: {1}.", securityContext.getCurrentUser(), newOrgId);
newOrg.setName(newOrgId);
}
LOG.info("Creating home org {0} for {1}...", newOrg.getName(), securityContext.getCurrentUser());
return orgService.createOrg(newOrg);
}
Aggregations