switch provider app to 8080, tidy up users resource and clean up export code for reports.
This commit is contained in:
@@ -1,71 +0,0 @@
|
||||
package org.mifosng.platform;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.mifosng.data.ErrorResponse;
|
||||
import org.mifosng.data.command.UserCommand;
|
||||
import org.mifosng.platform.exceptions.NewDataValidationException;
|
||||
|
||||
public class UserCommandValidator {
|
||||
|
||||
private final UserCommand command;
|
||||
|
||||
public UserCommandValidator(UserCommand command) {
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
public void validate() {
|
||||
|
||||
List<ErrorResponse> dataValidationErrors = new ArrayList<ErrorResponse>();
|
||||
|
||||
validateAccountSettings(dataValidationErrors);
|
||||
|
||||
if (command.getOfficeId() == null || command.getOfficeId().equals(Long.valueOf(-1))) {
|
||||
ErrorResponse error = new ErrorResponse("validation.msg.user.office.cannot.be.blank", "officeId");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (command.getSelectedItems() == null) {
|
||||
ErrorResponse error = new ErrorResponse("validation.msg.user.roles.cannot.be.blank", "selectedItems");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (!dataValidationErrors.isEmpty()) {
|
||||
throw new NewDataValidationException(dataValidationErrors, "Data validation errors exist.");
|
||||
}
|
||||
}
|
||||
|
||||
public void validateAccountSettingDetails() {
|
||||
List<ErrorResponse> dataValidationErrors = new ArrayList<ErrorResponse>();
|
||||
|
||||
validateAccountSettings(dataValidationErrors);
|
||||
|
||||
if (!dataValidationErrors.isEmpty()) {
|
||||
throw new NewDataValidationException(dataValidationErrors, "Data validation errors exist.");
|
||||
}
|
||||
}
|
||||
|
||||
private void validateAccountSettings(List<ErrorResponse> dataValidationErrors) {
|
||||
if (StringUtils.isBlank(command.getUsername())) {
|
||||
ErrorResponse error = new ErrorResponse("validation.msg.user.username.cannot.be.blank", "username");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(command.getFirstname())) {
|
||||
ErrorResponse error = new ErrorResponse("validation.msg.user.firstname.cannot.be.blank", "firstname");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(command.getLastname())) {
|
||||
ErrorResponse error = new ErrorResponse("validation.msg.user.lastname.cannot.be.blank", "lastname");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(command.getEmail())) {
|
||||
ErrorResponse error = new ErrorResponse("validation.msg.user.email.cannot.be.blank", "email");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,36 +8,23 @@ import org.mifosng.data.command.LoanStateTransitionCommand;
|
||||
import org.mifosng.data.command.LoanTransactionCommand;
|
||||
import org.mifosng.data.command.NoteCommand;
|
||||
import org.mifosng.data.command.RoleCommand;
|
||||
import org.mifosng.data.command.SignupCommand;
|
||||
import org.mifosng.data.command.SubmitLoanApplicationCommand;
|
||||
import org.mifosng.data.command.UndoLoanApprovalCommand;
|
||||
import org.mifosng.data.command.UndoLoanDisbursalCommand;
|
||||
import org.mifosng.data.command.UpdateUsernamePasswordCommand;
|
||||
import org.mifosng.data.command.UserCommand;
|
||||
import org.mifosng.platform.exceptions.InvalidSignupException;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
|
||||
public interface WritePlatformService {
|
||||
|
||||
Long createUser(UserCommand command);
|
||||
|
||||
Long updateUser(UserCommand command);
|
||||
|
||||
Long updateCurrentUser(UserCommand command);
|
||||
|
||||
Long updateCurrentUserPassword(ChangePasswordCommand command);
|
||||
|
||||
void deleteUser(Long userId);
|
||||
|
||||
Long createRole(RoleCommand command);
|
||||
|
||||
Long updateRole(RoleCommand command);
|
||||
|
||||
/**
|
||||
* @throws InvalidSignupException when sign up fails
|
||||
*/
|
||||
Long signup(SignupCommand command);
|
||||
|
||||
void updateUsernamePasswordOnFirstTimeLogin(UpdateUsernamePasswordCommand command);
|
||||
|
||||
@PreAuthorize(value = "hasAnyRole('PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE', 'CAN_ENROLL_NEW_CLIENT_ROLE')")
|
||||
|
||||
+1
-120
@@ -9,13 +9,10 @@ import java.math.BigDecimal;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.mifosng.data.ApiParameterError;
|
||||
import org.mifosng.data.EntityIdentifier;
|
||||
import org.mifosng.data.ErrorResponse;
|
||||
import org.mifosng.data.LoanSchedule;
|
||||
@@ -29,7 +26,6 @@ import org.mifosng.data.command.LoanStateTransitionCommand;
|
||||
import org.mifosng.data.command.LoanTransactionCommand;
|
||||
import org.mifosng.data.command.NoteCommand;
|
||||
import org.mifosng.data.command.RoleCommand;
|
||||
import org.mifosng.data.command.SignupCommand;
|
||||
import org.mifosng.data.command.SubmitLoanApplicationCommand;
|
||||
import org.mifosng.data.command.UndoLoanApprovalCommand;
|
||||
import org.mifosng.data.command.UndoLoanDisbursalCommand;
|
||||
@@ -42,11 +38,7 @@ import org.mifosng.platform.client.domain.NoteRepository;
|
||||
import org.mifosng.platform.currency.domain.MonetaryCurrency;
|
||||
import org.mifosng.platform.currency.domain.Money;
|
||||
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
||||
import org.mifosng.platform.exceptions.InvalidSignupException;
|
||||
import org.mifosng.platform.exceptions.NoAuthorizationException;
|
||||
import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
|
||||
import org.mifosng.platform.exceptions.PlatformDataIntegrityException;
|
||||
import org.mifosng.platform.exceptions.PlatformResourceNotFoundException;
|
||||
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
||||
import org.mifosng.platform.infrastructure.BasicPasswordEncodablePlatformUser;
|
||||
import org.mifosng.platform.infrastructure.PlatformPasswordEncoder;
|
||||
@@ -71,9 +63,6 @@ import org.mifosng.platform.loan.domain.LoanTransactionRepository;
|
||||
import org.mifosng.platform.loan.domain.PeriodFrequencyType;
|
||||
import org.mifosng.platform.organisation.domain.Office;
|
||||
import org.mifosng.platform.organisation.domain.OfficeRepository;
|
||||
import org.mifosng.platform.organisation.domain.Organisation;
|
||||
import org.mifosng.platform.organisation.domain.OrganisationCurrency;
|
||||
import org.mifosng.platform.organisation.domain.OrganisationRepository;
|
||||
import org.mifosng.platform.user.domain.AppUser;
|
||||
import org.mifosng.platform.user.domain.AppUserRepository;
|
||||
import org.mifosng.platform.user.domain.Permission;
|
||||
@@ -81,7 +70,7 @@ import org.mifosng.platform.user.domain.PermissionRepository;
|
||||
import org.mifosng.platform.user.domain.PlatformUserRepository;
|
||||
import org.mifosng.platform.user.domain.Role;
|
||||
import org.mifosng.platform.user.domain.RoleRepository;
|
||||
import org.mifosng.platform.user.domain.UserDomainService;
|
||||
import org.mifosng.platform.user.service.UserCommandValidator;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.security.core.Authentication;
|
||||
@@ -93,9 +82,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
@Service
|
||||
public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformService {
|
||||
|
||||
private final OrganisationRepository organisationRepository;
|
||||
private final OfficeRepository officeRepository;
|
||||
private final UserDomainService userDomainService;
|
||||
private final PlatformUserRepository platformUserRepository;
|
||||
private final PlatformPasswordEncoder platformPasswordEncoder;
|
||||
private final ClientRepository clientRepository;
|
||||
@@ -111,9 +98,7 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
||||
|
||||
@Autowired
|
||||
public WritePlatformServiceJpaRepositoryImpl(
|
||||
final OrganisationRepository organisationRepository,
|
||||
final OfficeRepository officeRepository,
|
||||
final UserDomainService userDomainService,
|
||||
final PlatformUserRepository platformUserRepository,
|
||||
final PlatformPasswordEncoder platformPasswordEncoder,
|
||||
final ClientRepository clientRepository,
|
||||
@@ -126,9 +111,7 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
||||
final AppUserRepository appUserRepository,
|
||||
final RoleRepository roleRepository,
|
||||
final PermissionRepository permissionRepository) {
|
||||
this.organisationRepository = organisationRepository;
|
||||
this.officeRepository = officeRepository;
|
||||
this.userDomainService = userDomainService;
|
||||
this.platformUserRepository = platformUserRepository;
|
||||
this.platformPasswordEncoder = platformPasswordEncoder;
|
||||
this.clientRepository = clientRepository;
|
||||
@@ -143,78 +126,6 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
||||
this.permissionRepository = permissionRepository;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public Long createUser(final UserCommand command) {
|
||||
|
||||
try {
|
||||
AppUser currentUser = extractAuthenticatedUser();
|
||||
|
||||
UserCommandValidator validator = new UserCommandValidator(command);
|
||||
validator.validate();
|
||||
|
||||
Set<Role> allRoles = new HashSet<Role>();
|
||||
for (String roleId : command.getSelectedItems()) {
|
||||
Role role = this.roleRepository.findOne(Long.valueOf(roleId));
|
||||
allRoles.add(role);
|
||||
}
|
||||
|
||||
Office office = this.officeRepository.findOne(command.getOfficeId());
|
||||
|
||||
AppUser appUser = AppUser.createNew(currentUser.getOrganisation(), office,
|
||||
allRoles, command.getUsername(), command.getEmail(),
|
||||
command.getFirstname(), command.getLastname(),
|
||||
command.getPassword());
|
||||
|
||||
this.userDomainService.create(appUser);
|
||||
return appUser.getId();
|
||||
} catch (DataIntegrityViolationException e) {
|
||||
throw new UsernameAlreadyExistsException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public Long updateUser(UserCommand command) {
|
||||
|
||||
try {
|
||||
AppUser currentUser = extractAuthenticatedUser();
|
||||
|
||||
UserCommandValidator validator = new UserCommandValidator(command);
|
||||
validator.validate();
|
||||
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
if (command.getId() == null) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.user.id.cannot.be.blank", "The parameter id cannot be empty.", "id");
|
||||
dataValidationErrors.add(error);
|
||||
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
}
|
||||
|
||||
Set<Role> allRoles = new HashSet<Role>();
|
||||
for (String roleId : command.getSelectedItems()) {
|
||||
Role role = this.roleRepository.findOne(Long.valueOf(roleId));
|
||||
allRoles.add(role);
|
||||
}
|
||||
|
||||
Office office = this.officeRepository.findOne(command.getOfficeId());
|
||||
if (office == null) {
|
||||
throw new PlatformResourceNotFoundException("error.msg.office.id.invalid", "Office with identifier {0} does not exist.", command.getOfficeId());
|
||||
}
|
||||
|
||||
AppUser userToUpdate = this.appUserRepository.findOne(usersThatMatch(currentUser.getOrganisation(), command.getId()));
|
||||
if (userToUpdate == null) {
|
||||
throw new PlatformResourceNotFoundException("error.msg.user.id.invalid", "User with identifier {0} does not exist.", command.getId());
|
||||
}
|
||||
|
||||
userToUpdate.update(allRoles, office, command.getUsername(), command.getFirstname(), command.getLastname(), command.getEmail());
|
||||
|
||||
return userToUpdate.getId();
|
||||
} catch (DataIntegrityViolationException e) {
|
||||
throw new PlatformDataIntegrityException("validation.msg.username.already.exists.in.organisation", "Username already exists.", "username", command.getUsername());
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public Long updateCurrentUser(UserCommand command) {
|
||||
@@ -254,12 +165,6 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
||||
return userToUpdate.getId();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void deleteUser(Long userId) {
|
||||
this.appUserRepository.delete(userId);
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public Long createRole(final RoleCommand command) {
|
||||
@@ -320,30 +225,6 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
||||
|
||||
return role.getId();
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public Long signup(final SignupCommand command) {
|
||||
|
||||
try {
|
||||
Organisation organisation = new Organisation(
|
||||
command.getOrganisationName(), command.getOpeningDate(),
|
||||
command.getContactEmail(), command.getContactName(),
|
||||
new ArrayList<OrganisationCurrency>());
|
||||
this.organisationRepository.save(organisation);
|
||||
|
||||
String name = command.getOrganisationName() + " Head Office";
|
||||
String externalId = null;
|
||||
Office headOffice = Office.headOffice(organisation, name, command.getOpeningDate(), externalId);
|
||||
this.officeRepository.save(headOffice);
|
||||
|
||||
this.userDomainService.createDefaultAdminUser(organisation,
|
||||
headOffice);
|
||||
return organisation.getId();
|
||||
} catch (DataIntegrityViolationException e) {
|
||||
throw new InvalidSignupException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
|
||||
@@ -4,18 +4,14 @@ import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.HeaderParam;
|
||||
import javax.ws.rs.OPTIONS;
|
||||
import javax.ws.rs.Path;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.MultivaluedMap;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.ResponseBuilder;
|
||||
import javax.ws.rs.core.StreamingOutput;
|
||||
import javax.ws.rs.core.UriInfo;
|
||||
|
||||
@@ -38,57 +34,25 @@ public class ReportingApiResource {
|
||||
@Autowired
|
||||
private ReadExtraDataAndReportingService ReadExtraDataAndReportingService;
|
||||
|
||||
private String _corsHeaders;
|
||||
|
||||
private Response makeCORS(ResponseBuilder req, String returnMethod) {
|
||||
ResponseBuilder rb = req.header("Access-Control-Allow-Origin", "*")
|
||||
.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
|
||||
|
||||
if (!"".equals(returnMethod)) {
|
||||
rb.header("Access-Control-Allow-Headers", returnMethod);
|
||||
}
|
||||
|
||||
return rb.build();
|
||||
}
|
||||
|
||||
private Response makeCORS(ResponseBuilder req) {
|
||||
return makeCORS(req, _corsHeaders);
|
||||
}
|
||||
|
||||
private Response makeCORSExport(ResponseBuilder req, String exportFilename,
|
||||
String returnMethod) {
|
||||
ResponseBuilder rb = req
|
||||
.header("Access-Control-Allow-Origin", "*")
|
||||
.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
|
||||
.header("Content-Disposition",
|
||||
"attachment;filename=" + exportFilename);
|
||||
|
||||
if (!"".equals(returnMethod)) {
|
||||
rb.header("Access-Control-Allow-Headers", returnMethod);
|
||||
}
|
||||
|
||||
return rb.build();
|
||||
}
|
||||
|
||||
private Response makeCORSExport(ResponseBuilder req, String exportFilename) {
|
||||
return makeCORSExport(req, exportFilename, _corsHeaders);
|
||||
}
|
||||
|
||||
// This OPTIONS request/response is necessary
|
||||
// if you consumes other format than text/plain or
|
||||
// if you use other HTTP verbs than GET and POST
|
||||
@OPTIONS
|
||||
public Response corsMyResource(
|
||||
@HeaderParam("Access-Control-Request-Headers") String requestH) {
|
||||
_corsHeaders = requestH;
|
||||
return makeCORS(Response.ok(), requestH);
|
||||
}
|
||||
// private Response makeCORSExport(ResponseBuilder req, String exportFilename,
|
||||
// String returnMethod) {
|
||||
// ResponseBuilder rb = req
|
||||
// .header("Access-Control-Allow-Origin", "*")
|
||||
// .header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
|
||||
// .header("Content-Disposition",
|
||||
// "attachment;filename=" + exportFilename);
|
||||
//
|
||||
// if (!"".equals(returnMethod)) {
|
||||
// rb.header("Access-Control-Allow-Headers", returnMethod);
|
||||
// }
|
||||
//
|
||||
// return rb.build();
|
||||
// }
|
||||
|
||||
@GET
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON, "application/x-msdownload" })
|
||||
public Response retrieveReport(@Context UriInfo uriInfo,
|
||||
@Context HttpServletResponse httpServletResponse) {
|
||||
public Response retrieveReport(@Context UriInfo uriInfo) {
|
||||
|
||||
MultivaluedMap<String, String> queryParams = uriInfo
|
||||
.getQueryParameters();
|
||||
@@ -115,17 +79,15 @@ public class ReportingApiResource {
|
||||
if ((exportCSV == null) || (!(exportCSV.equalsIgnoreCase("true")))) {
|
||||
GenericResultset result = this.ReadExtraDataAndReportingService
|
||||
.retrieveGenericResultset(name, type, extractedQueryParams);
|
||||
return makeCORS(Response.ok().entity(result));
|
||||
} else {
|
||||
StreamingOutput result = this.ReadExtraDataAndReportingService
|
||||
.retrieveReportCSV(name, type, extractedQueryParams);
|
||||
|
||||
return makeCORSExport(Response.ok().entity(result),
|
||||
name.replaceAll(" ", "") + ".csv");
|
||||
}
|
||||
|
||||
return Response.ok().entity(result).build();
|
||||
}
|
||||
|
||||
StreamingOutput result = this.ReadExtraDataAndReportingService.retrieveReportCSV(name, type, extractedQueryParams);
|
||||
|
||||
return Response.ok().entity(result).header("Content-Disposition","attachment;filename=" + name.replaceAll(" ", "") + ".csv").build();
|
||||
}
|
||||
|
||||
|
||||
@GET
|
||||
@Path("forceauth")
|
||||
public Response hackToForceAuthentication() {
|
||||
|
||||
@@ -3,7 +3,6 @@ package org.mifosng.platform.api.user;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.GET;
|
||||
@@ -13,7 +12,6 @@ import javax.ws.rs.Path;
|
||||
import javax.ws.rs.PathParam;
|
||||
import javax.ws.rs.Produces;
|
||||
import javax.ws.rs.WebApplicationException;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.Response.Status;
|
||||
@@ -23,20 +21,16 @@ import org.mifosng.data.EntityIdentifier;
|
||||
import org.mifosng.data.ErrorResponse;
|
||||
import org.mifosng.data.ErrorResponseList;
|
||||
import org.mifosng.data.UserList;
|
||||
import org.mifosng.data.command.ChangePasswordCommand;
|
||||
import org.mifosng.data.command.UserCommand;
|
||||
import org.mifosng.platform.ReadPlatformService;
|
||||
import org.mifosng.platform.WritePlatformService;
|
||||
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
||||
import org.mifosng.platform.exceptions.NewDataValidationException;
|
||||
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
||||
import org.mifosng.platform.user.domain.AppUser;
|
||||
import org.mifosng.platform.user.domain.AppUserRepository;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.mifosng.platform.user.service.AppUserWritePlatformService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.security.access.AccessDeniedException;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
@@ -49,13 +43,11 @@ import org.springframework.stereotype.Component;
|
||||
@Scope("singleton")
|
||||
public class UserApiResource {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(UserApiResource.class);
|
||||
|
||||
@Autowired
|
||||
private ReadPlatformService readPlatformService;
|
||||
|
||||
@Autowired
|
||||
private WritePlatformService writePlatformService;
|
||||
private AppUserWritePlatformService appUserWritePlatformService;
|
||||
|
||||
@Autowired
|
||||
private AppUserRepository appUserRepository;
|
||||
@@ -108,32 +100,11 @@ public class UserApiResource {
|
||||
@POST
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
@Produces({ MediaType.APPLICATION_JSON})
|
||||
public Response createUser(@Context HttpServletRequest request) {
|
||||
public Response createUser(UserCommand command) {
|
||||
|
||||
// try {
|
||||
String selectedItems = request.getParameter("selectedItems");
|
||||
final UserCommand command = new UserCommand();
|
||||
// command.setSelectedItems(Arrays.asList(a));
|
||||
|
||||
hardcodeUserIntoSecurityContext();
|
||||
Long userId = this.writePlatformService.createUser(command);
|
||||
Long userId = this.appUserWritePlatformService.createUser(command);
|
||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||
// } catch (UsernameAlreadyExistsException e) {
|
||||
// List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
|
||||
// ErrorResponse err = new ErrorResponse("validation.msg.username.already.exists.in.organisation", "username", command.getUsername());
|
||||
// allErrors.add(err);
|
||||
//
|
||||
// throw new WebApplicationException(Response
|
||||
// .status(Status.BAD_REQUEST)
|
||||
// .entity(new ErrorResponseList(allErrors)).build());
|
||||
// } catch (PlatformEmailSendException e) {
|
||||
// List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
|
||||
// ErrorResponse err = new ErrorResponse("error.msg.user.email.invalid","email", "Email is invalid.");
|
||||
// allErrors.add(err);
|
||||
// throw new WebApplicationException(Response
|
||||
// .status(Status.BAD_REQUEST)
|
||||
// .entity(new ErrorResponseList(allErrors)).build());
|
||||
// }
|
||||
}
|
||||
|
||||
@DELETE
|
||||
@@ -143,7 +114,7 @@ public class UserApiResource {
|
||||
public Response deleteUser(@PathParam("userId") final Long userId) {
|
||||
|
||||
try {
|
||||
this.writePlatformService.deleteUser(userId);
|
||||
this.appUserWritePlatformService.deleteUser(userId);
|
||||
|
||||
return Response.ok().build();
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
@@ -167,11 +138,9 @@ public class UserApiResource {
|
||||
|
||||
hardcodeUserIntoSecurityContext();
|
||||
|
||||
// UserCommand command = new UserCommand();
|
||||
// command.setSelectedItems(new ArrayList<String>(commandEile.getSelectedItems()));
|
||||
command.setId(userId);
|
||||
|
||||
this.writePlatformService.updateUser(command);
|
||||
this.appUserWritePlatformService.updateUser(command);
|
||||
|
||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||
}
|
||||
@@ -201,57 +170,57 @@ public class UserApiResource {
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("user/current")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
public Response updateCurrentUser(UserCommand command) {
|
||||
|
||||
try {
|
||||
hardcodeUserIntoSecurityContext();
|
||||
|
||||
Long userId = this.writePlatformService.updateCurrentUser(command);
|
||||
|
||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
} catch (AccessDeniedException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
} catch (ApplicationDomainRuleException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
} catch (NewDataValidationException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
} catch (DataIntegrityViolationException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.username.already.exists.in.organisation", "username", command.getUsername());
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("user/current/password")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
public Response updateCurrentUserPassword(ChangePasswordCommand command) {
|
||||
|
||||
try {
|
||||
hardcodeUserIntoSecurityContext();
|
||||
|
||||
Long userId = this.writePlatformService.updateCurrentUserPassword(command);
|
||||
|
||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
} catch (AccessDeniedException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
} catch (ApplicationDomainRuleException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
} catch (NewDataValidationException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
}
|
||||
}
|
||||
// @POST
|
||||
// @Path("user/current")
|
||||
// @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
// public Response updateCurrentUser(UserCommand command) {
|
||||
//
|
||||
// try {
|
||||
// hardcodeUserIntoSecurityContext();
|
||||
//
|
||||
// Long userId = this.appUserWritePlatformService.updateCurrentUser(command);
|
||||
//
|
||||
// return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||
// } catch (UnAuthenticatedUserException e) {
|
||||
// throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
// } catch (AccessDeniedException e) {
|
||||
// ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
// ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
// } catch (ApplicationDomainRuleException e) {
|
||||
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
// } catch (NewDataValidationException e) {
|
||||
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
// } catch (DataIntegrityViolationException e) {
|
||||
// ErrorResponse errorResponse = new ErrorResponse("error.msg.username.already.exists.in.organisation", "username", command.getUsername());
|
||||
// ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// @POST
|
||||
// @Path("user/current/password")
|
||||
// @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
// public Response updateCurrentUserPassword(ChangePasswordCommand command) {
|
||||
//
|
||||
// try {
|
||||
// hardcodeUserIntoSecurityContext();
|
||||
//
|
||||
// Long userId = this.appUserWritePlatformService.updateCurrentUserPassword(command);
|
||||
//
|
||||
// return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||
// } catch (UnAuthenticatedUserException e) {
|
||||
// throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
// } catch (AccessDeniedException e) {
|
||||
// ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
// ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
// } catch (ApplicationDomainRuleException e) {
|
||||
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
// } catch (NewDataValidationException e) {
|
||||
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
// }
|
||||
// }
|
||||
}
|
||||
+3
-1
@@ -16,6 +16,7 @@ import org.springframework.web.bind.support.SessionStatus;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
/**
|
||||
* FIXMED - REMOVE DEPRECATED CONTROLLER and related code artifacts
|
||||
* @deprecated - remove signup functionality for now.
|
||||
*/
|
||||
@Deprecated
|
||||
@@ -95,7 +96,8 @@ public class SignupController {
|
||||
|
||||
ModelAndView mav = null;
|
||||
try {
|
||||
signupPlatformService.signup(command);
|
||||
// REMOVED
|
||||
// signupPlatformService.signup(command);
|
||||
|
||||
status.setComplete();
|
||||
mav = new ModelAndView("/tenant/signupsuccess", "signupFormBean",
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@ import org.mifosng.data.command.OfficeCommand;
|
||||
|
||||
public interface OfficeWritePlatformService {
|
||||
|
||||
Long createOffice(OfficeCommand command);
|
||||
|
||||
Long updateOffice(OfficeCommand command);
|
||||
Long createOffice(final OfficeCommand command);
|
||||
|
||||
Long updateOffice(final OfficeCommand command);
|
||||
}
|
||||
+2
-1
@@ -7,6 +7,7 @@ import org.mifosng.platform.exceptions.NoAuthorizationException;
|
||||
import org.mifosng.platform.exceptions.PlatformDataIntegrityException;
|
||||
import org.mifosng.platform.organisation.domain.Office;
|
||||
import org.mifosng.platform.organisation.domain.OfficeRepository;
|
||||
import org.mifosng.platform.organisation.service.OfficeCommandValidator;
|
||||
import org.mifosng.platform.security.PlatformSecurityContext;
|
||||
import org.mifosng.platform.user.domain.AppUser;
|
||||
import org.slf4j.Logger;
|
||||
@@ -49,7 +50,7 @@ public class OfficeWritePlatformServiceJpaRepositoryImpl implements OfficeWriteP
|
||||
|
||||
office.generateHierarchy();
|
||||
|
||||
this.officeRepository.save(office);
|
||||
this.officeRepository.saveAndFlush(office);
|
||||
|
||||
return office.getId();
|
||||
} catch (DataIntegrityViolationException dve) {
|
||||
|
||||
+1
-158
@@ -3,10 +3,8 @@ package org.mifosng.platform.rest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
import javax.ws.rs.Consumes;
|
||||
import javax.ws.rs.DELETE;
|
||||
import javax.ws.rs.GET;
|
||||
import javax.ws.rs.POST;
|
||||
import javax.ws.rs.Path;
|
||||
@@ -27,17 +25,14 @@ import org.mifosng.data.PermissionData;
|
||||
import org.mifosng.data.PermissionList;
|
||||
import org.mifosng.data.RoleData;
|
||||
import org.mifosng.data.RoleList;
|
||||
import org.mifosng.data.UserList;
|
||||
import org.mifosng.data.command.ChangePasswordCommand;
|
||||
import org.mifosng.data.command.RoleCommand;
|
||||
import org.mifosng.data.command.UserCommand;
|
||||
import org.mifosng.platform.ReadPlatformService;
|
||||
import org.mifosng.platform.WritePlatformService;
|
||||
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
||||
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
||||
import org.mifosng.platform.exceptions.NewDataValidationException;
|
||||
import org.mifosng.platform.infrastructure.PlatformEmailSendException;
|
||||
import org.mifosng.platform.infrastructure.UsernameAlreadyExistsException;
|
||||
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
@@ -55,158 +50,6 @@ public class UserAdmistrationResource {
|
||||
@Autowired
|
||||
private WritePlatformService writePlatformService;
|
||||
|
||||
@GET
|
||||
@Path("user/all")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||
public Response retrieveUsers() {
|
||||
|
||||
try {
|
||||
Collection<AppUserData> users = this.readPlatformService.retrieveAllUsers();
|
||||
|
||||
return Response.ok().entity(new UserList(users)).build();
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
} catch (AccessDeniedException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
} catch (ApplicationDomainRuleException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
} catch (NewDataValidationException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("user/new")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
public Response newUserDetails() {
|
||||
|
||||
try {
|
||||
AppUserData newUser = this.readPlatformService.retrieveNewUserDetails();
|
||||
|
||||
return Response.ok().entity(newUser).build();
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
} catch (AccessDeniedException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
} catch (ApplicationDomainRuleException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
} catch (NewDataValidationException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("user/new")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
public Response createUser(final UserCommand command) {
|
||||
|
||||
try {
|
||||
Long userId = this.writePlatformService.createUser(command);
|
||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||
} catch (UsernameAlreadyExistsException e) {
|
||||
List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
|
||||
ErrorResponse err = new ErrorResponse("validation.msg.username.already.exists.in.organisation", "username", command.getUsername());
|
||||
allErrors.add(err);
|
||||
|
||||
throw new WebApplicationException(Response
|
||||
.status(Status.BAD_REQUEST)
|
||||
.entity(new ErrorResponseList(allErrors)).build());
|
||||
} catch (PlatformEmailSendException e) {
|
||||
List<ErrorResponse> allErrors = new ArrayList<ErrorResponse>();
|
||||
ErrorResponse err = new ErrorResponse("error.msg.user.email.invalid","email", "Email is invalid.");
|
||||
allErrors.add(err);
|
||||
throw new WebApplicationException(Response
|
||||
.status(Status.BAD_REQUEST)
|
||||
.entity(new ErrorResponseList(allErrors)).build());
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
} catch (AccessDeniedException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
} catch (ApplicationDomainRuleException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
} catch (NewDataValidationException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
}
|
||||
}
|
||||
|
||||
@DELETE
|
||||
@Path("user/{userId}")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
public Response deleteUser(@PathParam("userId") final Long userId) {
|
||||
|
||||
try {
|
||||
this.writePlatformService.deleteUser(userId);
|
||||
|
||||
return Response.ok().build();
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
} catch (AccessDeniedException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
} catch (ApplicationDomainRuleException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
} catch (NewDataValidationException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("user/{userId}")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
public Response retrieveUser(@PathParam("userId") final Long userId) {
|
||||
|
||||
try {
|
||||
AppUserData user = this.readPlatformService.retrieveUser(userId);
|
||||
|
||||
return Response.ok().entity(user).build();
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
} catch (AccessDeniedException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
} catch (ApplicationDomainRuleException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
} catch (NewDataValidationException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
}
|
||||
}
|
||||
|
||||
@POST
|
||||
@Path("user/{userId}")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
public Response updateUser(UserCommand command) {
|
||||
|
||||
try {
|
||||
Long userId = this.writePlatformService.updateUser(command);
|
||||
|
||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||
} catch (UnAuthenticatedUserException e) {
|
||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||
} catch (AccessDeniedException e) {
|
||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||
} catch (ApplicationDomainRuleException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||
} catch (NewDataValidationException e) {
|
||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("user/current")
|
||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||
|
||||
@@ -25,7 +25,7 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority;
|
||||
import org.springframework.security.core.userdetails.User;
|
||||
|
||||
@Entity
|
||||
@Table(name = "admin_appuser", uniqueConstraints=@UniqueConstraint(columnNames = {"org_id", "username"}))
|
||||
@Table(name = "admin_appuser", uniqueConstraints=@UniqueConstraint(columnNames = {"org_id", "username"}, name="username_org"))
|
||||
public class AppUser extends AbstractAuditableCustom<AppUser, Long> implements PlatformUser {
|
||||
|
||||
@Column(name = "email", nullable=false, length=100)
|
||||
@@ -81,6 +81,8 @@ public class AppUser extends AbstractAuditableCustom<AppUser, Long> implements P
|
||||
boolean userAccountNonLocked = true;
|
||||
|
||||
Collection<SimpleGrantedAuthority> authorities = new ArrayList<SimpleGrantedAuthority>();
|
||||
authorities.add(new SimpleGrantedAuthority("DUMMY_ROLE_NOT_USED_OR_PERSISTED_TO_AVOID_EXCEPTION"));
|
||||
|
||||
User user = new User(username, password, userEnabled, userAccountNonExpired, userCredentialsNonExpired, userAccountNonLocked, authorities);
|
||||
return new AppUser(organisation, office, user, allRoles, email, firstname, lastname);
|
||||
}
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package org.mifosng.platform.user.service;
|
||||
|
||||
import org.mifosng.data.command.UserCommand;
|
||||
|
||||
public interface AppUserWritePlatformService {
|
||||
|
||||
Long createUser(final UserCommand command);
|
||||
|
||||
Long updateUser(final UserCommand command);
|
||||
|
||||
void deleteUser(final Long userId);
|
||||
}
|
||||
+159
@@ -0,0 +1,159 @@
|
||||
package org.mifosng.platform.user.service;
|
||||
|
||||
import static org.mifosng.platform.Specifications.usersThatMatch;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.mifosng.data.ApiParameterError;
|
||||
import org.mifosng.data.command.UserCommand;
|
||||
import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
|
||||
import org.mifosng.platform.exceptions.PlatformDataIntegrityException;
|
||||
import org.mifosng.platform.exceptions.PlatformResourceNotFoundException;
|
||||
import org.mifosng.platform.infrastructure.PlatformEmailSendException;
|
||||
import org.mifosng.platform.organisation.domain.Office;
|
||||
import org.mifosng.platform.organisation.domain.OfficeRepository;
|
||||
import org.mifosng.platform.security.PlatformSecurityContext;
|
||||
import org.mifosng.platform.user.domain.AppUser;
|
||||
import org.mifosng.platform.user.domain.AppUserRepository;
|
||||
import org.mifosng.platform.user.domain.Role;
|
||||
import org.mifosng.platform.user.domain.RoleRepository;
|
||||
import org.mifosng.platform.user.domain.UserDomainService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@Service
|
||||
public class AppUserWritePlatformServiceJpaRepositoryImpl implements AppUserWritePlatformService {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(AppUserWritePlatformServiceJpaRepositoryImpl.class);
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
private final AppUserRepository appUserRepository;
|
||||
private final OfficeRepository officeRepository;
|
||||
private final RoleRepository roleRepository;
|
||||
private final UserDomainService userDomainService;
|
||||
|
||||
@Autowired
|
||||
public AppUserWritePlatformServiceJpaRepositoryImpl(final PlatformSecurityContext context, final AppUserRepository appUserRepository, final UserDomainService userDomainService,
|
||||
final OfficeRepository officeRepository, final RoleRepository roleRepository) {
|
||||
this.context = context;
|
||||
this.appUserRepository = appUserRepository;
|
||||
this.userDomainService = userDomainService;
|
||||
this.officeRepository = officeRepository;
|
||||
this.roleRepository = roleRepository;
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public Long createUser(final UserCommand command) {
|
||||
|
||||
try {
|
||||
AppUser currentUser = context.authenticatedUser();
|
||||
|
||||
UserCommandValidator validator = new UserCommandValidator(command);
|
||||
validator.validate();
|
||||
|
||||
Set<Role> allRoles = new HashSet<Role>();
|
||||
for (String roleId : command.getSelectedItems()) {
|
||||
Role role = this.roleRepository.findOne(Long.valueOf(roleId));
|
||||
allRoles.add(role);
|
||||
}
|
||||
|
||||
Office office = this.officeRepository.findOne(command.getOfficeId());
|
||||
|
||||
String password = command.getPassword();
|
||||
if (StringUtils.isBlank(password)) {
|
||||
password = "autogenerate";
|
||||
}
|
||||
|
||||
AppUser appUser = AppUser.createNew(currentUser.getOrganisation(), office,
|
||||
allRoles, command.getUsername(), command.getEmail(),
|
||||
command.getFirstname(), command.getLastname(),
|
||||
password);
|
||||
|
||||
this.userDomainService.create(appUser);
|
||||
|
||||
return appUser.getId();
|
||||
} catch (DataIntegrityViolationException dve) {
|
||||
handleOfficeDataIntegrityIssues(command, dve);
|
||||
return Long.valueOf(-1);
|
||||
} catch (PlatformEmailSendException e) {
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
ApiParameterError error = ApiParameterError.parameterError("error.msg.user.email.invalid", "The parameter email is invalid.", "email", command.getEmail());
|
||||
dataValidationErrors.add(error);
|
||||
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public Long updateUser(UserCommand command) {
|
||||
|
||||
try {
|
||||
AppUser currentUser = context.authenticatedUser();
|
||||
|
||||
UserCommandValidator validator = new UserCommandValidator(command);
|
||||
validator.validate();
|
||||
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
if (command.getId() == null) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.user.id.cannot.be.blank", "The parameter id cannot be empty.", "id");
|
||||
dataValidationErrors.add(error);
|
||||
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
}
|
||||
|
||||
Set<Role> allRoles = new HashSet<Role>();
|
||||
for (String roleId : command.getSelectedItems()) {
|
||||
Role role = this.roleRepository.findOne(Long.valueOf(roleId));
|
||||
allRoles.add(role);
|
||||
}
|
||||
|
||||
Office office = this.officeRepository.findOne(command.getOfficeId());
|
||||
if (office == null) {
|
||||
throw new PlatformResourceNotFoundException("error.msg.office.id.invalid", "Office with identifier {0} does not exist.", command.getOfficeId());
|
||||
}
|
||||
|
||||
AppUser userToUpdate = this.appUserRepository.findOne(usersThatMatch(currentUser.getOrganisation(), command.getId()));
|
||||
if (userToUpdate == null) {
|
||||
throw new PlatformResourceNotFoundException("error.msg.user.id.invalid", "User with identifier {0} does not exist.", command.getId());
|
||||
}
|
||||
|
||||
userToUpdate.update(allRoles, office, command.getUsername(), command.getFirstname(), command.getLastname(), command.getEmail());
|
||||
this.appUserRepository.saveAndFlush(userToUpdate);
|
||||
|
||||
return userToUpdate.getId();
|
||||
} catch (DataIntegrityViolationException dve) {
|
||||
handleOfficeDataIntegrityIssues(command, dve);
|
||||
return Long.valueOf(-1);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
@Override
|
||||
public void deleteUser(Long userId) {
|
||||
this.appUserRepository.delete(userId);
|
||||
}
|
||||
|
||||
/*
|
||||
* Guaranteed to throw an exception no matter what the data integrity issue is.
|
||||
*/
|
||||
private void handleOfficeDataIntegrityIssues(final UserCommand command, DataIntegrityViolationException dve) {
|
||||
|
||||
Throwable realCause = dve.getMostSpecificCause();
|
||||
if (realCause.getMessage().contains("username_org")) {
|
||||
throw new PlatformDataIntegrityException("error.msg.user.duplicate.username", "User with username {0} already exists", "username", command.getUsername());
|
||||
}
|
||||
|
||||
logger.error(dve.getMessage(), dve);
|
||||
throw new PlatformDataIntegrityException("error.msg.unknown.data.integrity.issue", "Unknown data integrity issue with resource.");
|
||||
}
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
package org.mifosng.platform.user.service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.mifosng.data.ApiParameterError;
|
||||
import org.mifosng.data.command.UserCommand;
|
||||
import org.mifosng.platform.exceptions.PlatformApiDataValidationException;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
public class UserCommandValidator {
|
||||
|
||||
private final UserCommand command;
|
||||
|
||||
public UserCommandValidator(UserCommand command) {
|
||||
this.command = command;
|
||||
}
|
||||
|
||||
public void validate() {
|
||||
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
|
||||
validateAccountSettings(dataValidationErrors);
|
||||
|
||||
if (command.getOfficeId() == null || command.getOfficeId().equals(Long.valueOf(-1))) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.user.office.cannot.be.blank", "The parameter officeId cannot be blank.", "officeId");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (ObjectUtils.isEmpty(command.getSelectedItems())) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.user.roles.cannot.be.blank", "The parameter selectedItems cannot be blank.", "selectedItems");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (!dataValidationErrors.isEmpty()) {
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
}
|
||||
}
|
||||
|
||||
public void validateAccountSettingDetails() {
|
||||
List<ApiParameterError> dataValidationErrors = new ArrayList<ApiParameterError>();
|
||||
|
||||
validateAccountSettings(dataValidationErrors);
|
||||
|
||||
if (!dataValidationErrors.isEmpty()) {
|
||||
throw new PlatformApiDataValidationException("validation.msg.validation.errors.exist", "Validation errors exist.", dataValidationErrors);
|
||||
}
|
||||
}
|
||||
|
||||
private void validateAccountSettings(List<ApiParameterError> dataValidationErrors) {
|
||||
if (StringUtils.isBlank(command.getUsername())) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.user.username.cannot.be.blank", "The parameter username cannot be blank.", "username");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(command.getFirstname())) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.user.firstname.cannot.be.blank", "The parameter firstname cannot be blank.", "firstname");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(command.getLastname())) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.user.lastname.cannot.be.blank", "The parameter lastname cannot be blank.", "lastname");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
|
||||
if (StringUtils.isBlank(command.getEmail())) {
|
||||
ApiParameterError error = ApiParameterError.parameterError("validation.msg.user.email.cannot.be.blank", "The parameter email cannot be blank.", "email");
|
||||
dataValidationErrors.add(error);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user