switch provider app to 8080, tidy up users resource and clean up export code for reports.
This commit is contained in:
@@ -21,7 +21,7 @@ public class UserCommand implements Serializable {
|
|||||||
private Long officeId;
|
private Long officeId;
|
||||||
|
|
||||||
private List<String> notSelectedItems = new ArrayList<String>();
|
private List<String> notSelectedItems = new ArrayList<String>();
|
||||||
private List<String> selectedItems = new ArrayList<String>();
|
private String[] selectedItems;
|
||||||
|
|
||||||
public UserCommand() {
|
public UserCommand() {
|
||||||
//
|
//
|
||||||
@@ -95,11 +95,11 @@ public class UserCommand implements Serializable {
|
|||||||
this.notSelectedItems = notSelectedItems;
|
this.notSelectedItems = notSelectedItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getSelectedItems() {
|
public String[] getSelectedItems() {
|
||||||
return selectedItems;
|
return selectedItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSelectedItems(List<String> selectedItems) {
|
public void setSelectedItems(String... selectedItems) {
|
||||||
this.selectedItems = selectedItems;
|
this.selectedItems = selectedItems;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -333,7 +333,7 @@ CREATE TABLE `admin_appuser` (
|
|||||||
`lastmodified_date` datetime DEFAULT NULL,
|
`lastmodified_date` datetime DEFAULT NULL,
|
||||||
`lastmodifiedby_id` bigint(20) DEFAULT NULL,
|
`lastmodifiedby_id` bigint(20) DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `org_id` (`org_id`,`username`),
|
UNIQUE KEY `username_org` (`org_id`,`username`),
|
||||||
KEY `FKB3D587CE0DD567A` (`office_id`),
|
KEY `FKB3D587CE0DD567A` (`office_id`),
|
||||||
KEY `FKB3D587C54DF2770` (`org_id`),
|
KEY `FKB3D587C54DF2770` (`org_id`),
|
||||||
CONSTRAINT `FKB3D587C54DF2770` FOREIGN KEY (`org_id`) REFERENCES `org_organisation` (`id`),
|
CONSTRAINT `FKB3D587C54DF2770` FOREIGN KEY (`org_id`) REFERENCES `org_organisation` (`id`),
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ CREATE TABLE `admin_appuser` (
|
|||||||
`lastmodified_date` datetime DEFAULT NULL,
|
`lastmodified_date` datetime DEFAULT NULL,
|
||||||
`lastmodifiedby_id` bigint(20) DEFAULT NULL,
|
`lastmodifiedby_id` bigint(20) DEFAULT NULL,
|
||||||
PRIMARY KEY (`id`),
|
PRIMARY KEY (`id`),
|
||||||
UNIQUE KEY `org_id` (`org_id`,`username`),
|
UNIQUE KEY `username_org` (`org_id`,`username`),
|
||||||
KEY `FKB3D587CE0DD567A` (`office_id`),
|
KEY `FKB3D587CE0DD567A` (`office_id`),
|
||||||
KEY `FKB3D587C54DF2770` (`org_id`),
|
KEY `FKB3D587C54DF2770` (`org_id`),
|
||||||
CONSTRAINT `FKB3D587C54DF2770` FOREIGN KEY (`org_id`) REFERENCES `org_organisation` (`id`),
|
CONSTRAINT `FKB3D587C54DF2770` FOREIGN KEY (`org_id`) REFERENCES `org_organisation` (`id`),
|
||||||
|
|||||||
@@ -91,6 +91,6 @@ dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[tomcatRun, tomcatRunWar, tomcatStop]*.with {
|
[tomcatRun, tomcatRunWar, tomcatStop]*.with {
|
||||||
httpPort = 8080
|
httpPort = 8085
|
||||||
stopPort = 8082
|
stopPort = 8082
|
||||||
}
|
}
|
||||||
@@ -187,7 +187,13 @@
|
|||||||
}
|
}
|
||||||
o[this.name].push(this.value || '');
|
o[this.name].push(this.value || '');
|
||||||
} else {
|
} else {
|
||||||
o[this.name] = this.value || '';
|
|
||||||
|
if (this.name === 'selectedItems' || this.name === 'notSelectedItems') {
|
||||||
|
o[this.name] = new Array();
|
||||||
|
o[this.name].push(this.value || '');
|
||||||
|
} else {
|
||||||
|
o[this.name] = this.value || '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return o;
|
return o;
|
||||||
|
|||||||
@@ -114,9 +114,7 @@ $(document).ready(function() {
|
|||||||
removeErrors(placeholderDiv);
|
removeErrors(placeholderDiv);
|
||||||
|
|
||||||
var jsonErrors = JSON.parse(jqXHR.responseText);
|
var jsonErrors = JSON.parse(jqXHR.responseText);
|
||||||
console.log(jsonErrors);
|
|
||||||
var valErrors = jsonErrors.errors;
|
var valErrors = jsonErrors.errors;
|
||||||
console.log(valErrors);
|
|
||||||
var errorArray = new Array();
|
var errorArray = new Array();
|
||||||
var arrayIndex = 0;
|
var arrayIndex = 0;
|
||||||
$.each(valErrors, function() {
|
$.each(valErrors, function() {
|
||||||
@@ -133,7 +131,6 @@ $(document).ready(function() {
|
|||||||
argArray[argArrayIndex] = this.value;
|
argArray[argArrayIndex] = this.value;
|
||||||
argArrayIndex++;
|
argArrayIndex++;
|
||||||
});
|
});
|
||||||
console.log(argArray);
|
|
||||||
// hardcoded support for six arguments
|
// hardcoded support for six arguments
|
||||||
errorObj.message = jQuery.i18n.prop(this.userMessageGlobalisationCode, argArray[0], argArray[1], argArray[2], argArray[3], argArray[4], argArray[5]);
|
errorObj.message = jQuery.i18n.prop(this.userMessageGlobalisationCode, argArray[0], argArray[1], argArray[2], argArray[3], argArray[4], argArray[5]);
|
||||||
errorObj.value = this.value;
|
errorObj.value = this.value;
|
||||||
@@ -166,7 +163,13 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
o[this.name].push(this.value || '');
|
o[this.name].push(this.value || '');
|
||||||
} else {
|
} else {
|
||||||
o[this.name] = this.value || '';
|
|
||||||
|
if (this.name === 'selectedItems' || this.name === 'notSelectedItems') {
|
||||||
|
o[this.name] = new Array();
|
||||||
|
o[this.name].push(this.value || '');
|
||||||
|
} else {
|
||||||
|
o[this.name] = this.value || '';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return o;
|
return o;
|
||||||
@@ -200,7 +203,6 @@ $(document).ready(function() {
|
|||||||
$(this).attr("selected", "selected");
|
$(this).attr("selected", "selected");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
var newFormData = JSON.stringify($('#entityform').serializeObject());
|
var newFormData = JSON.stringify($('#entityform').serializeObject());
|
||||||
console.log(newFormData);
|
console.log(newFormData);
|
||||||
|
|
||||||
@@ -322,14 +324,14 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$('#listusers').click(function(e) {
|
$('#listusers').click(function(e) {
|
||||||
var listUrl = "http://localhost:8085/mifosng-provider/api/v1/users";
|
var listUrl = "http://localhost:8080/mifosng-provider/api/v1/users";
|
||||||
refreshUsersView();
|
refreshUsersView();
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
});
|
});
|
||||||
|
|
||||||
$('#adduser').click(function(e) {
|
$('#adduser').click(function(e) {
|
||||||
var url = 'http://localhost:8085/mifosng-provider/api/v1/users/template';
|
var url = 'http://localhost:8080/mifosng-provider/api/v1/users/template';
|
||||||
var postUrl = "http://localhost:8085/mifosng-provider/api/v1/users";
|
var postUrl = "http://localhost:8080/mifosng-provider/api/v1/users";
|
||||||
var templateSelector = "#userFormTemplate";
|
var templateSelector = "#userFormTemplate";
|
||||||
var width = 1000;
|
var width = 1000;
|
||||||
var height = 550;
|
var height = 550;
|
||||||
@@ -405,10 +407,10 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
function refreshUsersView() {
|
function refreshUsersView() {
|
||||||
|
|
||||||
var listUrl = 'http://localhost:8085/mifosng-provider/api/v1/users';
|
var listUrl = 'http://localhost:8080/mifosng-provider/api/v1/users';
|
||||||
var templateSelector = "#usersListTemplate";
|
var templateSelector = "#usersListTemplate";
|
||||||
var displayAreaDivSelector = "#contentplaceholder";
|
var displayAreaDivSelector = "#contentplaceholder";
|
||||||
var singleEntityPrefixUrl = 'http://localhost:8085/mifosng-provider/api/v1/users/';
|
var singleEntityPrefixUrl = 'http://localhost:8080/mifosng-provider/api/v1/users/';
|
||||||
var singleEntityTemplateSelector = "#userFormTemplate";
|
var singleEntityTemplateSelector = "#userFormTemplate";
|
||||||
|
|
||||||
var jqxhr = $.ajax({
|
var jqxhr = $.ajax({
|
||||||
@@ -424,8 +426,8 @@ $(document).ready(function() {
|
|||||||
$("a.edit").click( function(e) {
|
$("a.edit").click( function(e) {
|
||||||
var linkId = this.id;
|
var linkId = this.id;
|
||||||
var entityId = linkId.replace("edit", "");
|
var entityId = linkId.replace("edit", "");
|
||||||
var getUrl = 'http://localhost:8085/mifosng-provider/api/v1/users/' + entityId;
|
var getUrl = 'http://localhost:8080/mifosng-provider/api/v1/users/' + entityId;
|
||||||
var putUrl = 'http://localhost:8085/mifosng-provider/api/v1/users/' + entityId;
|
var putUrl = 'http://localhost:8080/mifosng-provider/api/v1/users/' + entityId;
|
||||||
|
|
||||||
var templateSelector = "#userFormTemplate";
|
var templateSelector = "#userFormTemplate";
|
||||||
var width = 600;
|
var width = 600;
|
||||||
@@ -443,7 +445,7 @@ $(document).ready(function() {
|
|||||||
$("a.delete").click( function(e) {
|
$("a.delete").click( function(e) {
|
||||||
var linkId = this.id;
|
var linkId = this.id;
|
||||||
var entityId = linkId.replace("delete", "");
|
var entityId = linkId.replace("delete", "");
|
||||||
var url = 'http://localhost:8085/mifosng-provider/api/v1/users/' + entityId;
|
var url = 'http://localhost:8080/mifosng-provider/api/v1/users/' + entityId;
|
||||||
showNotAvailableDialog('dialog.title.functionality.not.available');
|
showNotAvailableDialog('dialog.title.functionality.not.available');
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|||||||
@@ -123,6 +123,6 @@ dependencies {
|
|||||||
|
|
||||||
[tomcatRun, tomcatRunWar, tomcatStop]*.with {
|
[tomcatRun, tomcatRunWar, tomcatStop]*.with {
|
||||||
configFile = file('src/test/resources/META-INF/context.xml')
|
configFile = file('src/test/resources/META-INF/context.xml')
|
||||||
httpPort = 8085
|
httpPort = 8080
|
||||||
stopPort = 8081
|
stopPort = 8081
|
||||||
}
|
}
|
||||||
@@ -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.LoanTransactionCommand;
|
||||||
import org.mifosng.data.command.NoteCommand;
|
import org.mifosng.data.command.NoteCommand;
|
||||||
import org.mifosng.data.command.RoleCommand;
|
import org.mifosng.data.command.RoleCommand;
|
||||||
import org.mifosng.data.command.SignupCommand;
|
|
||||||
import org.mifosng.data.command.SubmitLoanApplicationCommand;
|
import org.mifosng.data.command.SubmitLoanApplicationCommand;
|
||||||
import org.mifosng.data.command.UndoLoanApprovalCommand;
|
import org.mifosng.data.command.UndoLoanApprovalCommand;
|
||||||
import org.mifosng.data.command.UndoLoanDisbursalCommand;
|
import org.mifosng.data.command.UndoLoanDisbursalCommand;
|
||||||
import org.mifosng.data.command.UpdateUsernamePasswordCommand;
|
import org.mifosng.data.command.UpdateUsernamePasswordCommand;
|
||||||
import org.mifosng.data.command.UserCommand;
|
import org.mifosng.data.command.UserCommand;
|
||||||
import org.mifosng.platform.exceptions.InvalidSignupException;
|
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
|
||||||
public interface WritePlatformService {
|
public interface WritePlatformService {
|
||||||
|
|
||||||
Long createUser(UserCommand command);
|
|
||||||
|
|
||||||
Long updateUser(UserCommand command);
|
|
||||||
|
|
||||||
Long updateCurrentUser(UserCommand command);
|
Long updateCurrentUser(UserCommand command);
|
||||||
|
|
||||||
Long updateCurrentUserPassword(ChangePasswordCommand command);
|
Long updateCurrentUserPassword(ChangePasswordCommand command);
|
||||||
|
|
||||||
void deleteUser(Long userId);
|
|
||||||
|
|
||||||
Long createRole(RoleCommand command);
|
Long createRole(RoleCommand command);
|
||||||
|
|
||||||
Long updateRole(RoleCommand command);
|
Long updateRole(RoleCommand command);
|
||||||
|
|
||||||
/**
|
|
||||||
* @throws InvalidSignupException when sign up fails
|
|
||||||
*/
|
|
||||||
Long signup(SignupCommand command);
|
|
||||||
|
|
||||||
void updateUsernamePasswordOnFirstTimeLogin(UpdateUsernamePasswordCommand command);
|
void updateUsernamePasswordOnFirstTimeLogin(UpdateUsernamePasswordCommand command);
|
||||||
|
|
||||||
@PreAuthorize(value = "hasAnyRole('PORTFOLIO_MANAGEMENT_SUPER_USER_ROLE', 'CAN_ENROLL_NEW_CLIENT_ROLE')")
|
@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.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.joda.time.LocalDate;
|
import org.joda.time.LocalDate;
|
||||||
import org.mifosng.data.ApiParameterError;
|
|
||||||
import org.mifosng.data.EntityIdentifier;
|
import org.mifosng.data.EntityIdentifier;
|
||||||
import org.mifosng.data.ErrorResponse;
|
import org.mifosng.data.ErrorResponse;
|
||||||
import org.mifosng.data.LoanSchedule;
|
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.LoanTransactionCommand;
|
||||||
import org.mifosng.data.command.NoteCommand;
|
import org.mifosng.data.command.NoteCommand;
|
||||||
import org.mifosng.data.command.RoleCommand;
|
import org.mifosng.data.command.RoleCommand;
|
||||||
import org.mifosng.data.command.SignupCommand;
|
|
||||||
import org.mifosng.data.command.SubmitLoanApplicationCommand;
|
import org.mifosng.data.command.SubmitLoanApplicationCommand;
|
||||||
import org.mifosng.data.command.UndoLoanApprovalCommand;
|
import org.mifosng.data.command.UndoLoanApprovalCommand;
|
||||||
import org.mifosng.data.command.UndoLoanDisbursalCommand;
|
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.MonetaryCurrency;
|
||||||
import org.mifosng.platform.currency.domain.Money;
|
import org.mifosng.platform.currency.domain.Money;
|
||||||
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
||||||
import org.mifosng.platform.exceptions.InvalidSignupException;
|
|
||||||
import org.mifosng.platform.exceptions.NoAuthorizationException;
|
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.exceptions.UnAuthenticatedUserException;
|
||||||
import org.mifosng.platform.infrastructure.BasicPasswordEncodablePlatformUser;
|
import org.mifosng.platform.infrastructure.BasicPasswordEncodablePlatformUser;
|
||||||
import org.mifosng.platform.infrastructure.PlatformPasswordEncoder;
|
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.loan.domain.PeriodFrequencyType;
|
||||||
import org.mifosng.platform.organisation.domain.Office;
|
import org.mifosng.platform.organisation.domain.Office;
|
||||||
import org.mifosng.platform.organisation.domain.OfficeRepository;
|
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.AppUser;
|
||||||
import org.mifosng.platform.user.domain.AppUserRepository;
|
import org.mifosng.platform.user.domain.AppUserRepository;
|
||||||
import org.mifosng.platform.user.domain.Permission;
|
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.PlatformUserRepository;
|
||||||
import org.mifosng.platform.user.domain.Role;
|
import org.mifosng.platform.user.domain.Role;
|
||||||
import org.mifosng.platform.user.domain.RoleRepository;
|
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.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
@@ -93,9 +82,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
@Service
|
@Service
|
||||||
public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformService {
|
public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformService {
|
||||||
|
|
||||||
private final OrganisationRepository organisationRepository;
|
|
||||||
private final OfficeRepository officeRepository;
|
private final OfficeRepository officeRepository;
|
||||||
private final UserDomainService userDomainService;
|
|
||||||
private final PlatformUserRepository platformUserRepository;
|
private final PlatformUserRepository platformUserRepository;
|
||||||
private final PlatformPasswordEncoder platformPasswordEncoder;
|
private final PlatformPasswordEncoder platformPasswordEncoder;
|
||||||
private final ClientRepository clientRepository;
|
private final ClientRepository clientRepository;
|
||||||
@@ -111,9 +98,7 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
|||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public WritePlatformServiceJpaRepositoryImpl(
|
public WritePlatformServiceJpaRepositoryImpl(
|
||||||
final OrganisationRepository organisationRepository,
|
|
||||||
final OfficeRepository officeRepository,
|
final OfficeRepository officeRepository,
|
||||||
final UserDomainService userDomainService,
|
|
||||||
final PlatformUserRepository platformUserRepository,
|
final PlatformUserRepository platformUserRepository,
|
||||||
final PlatformPasswordEncoder platformPasswordEncoder,
|
final PlatformPasswordEncoder platformPasswordEncoder,
|
||||||
final ClientRepository clientRepository,
|
final ClientRepository clientRepository,
|
||||||
@@ -126,9 +111,7 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
|||||||
final AppUserRepository appUserRepository,
|
final AppUserRepository appUserRepository,
|
||||||
final RoleRepository roleRepository,
|
final RoleRepository roleRepository,
|
||||||
final PermissionRepository permissionRepository) {
|
final PermissionRepository permissionRepository) {
|
||||||
this.organisationRepository = organisationRepository;
|
|
||||||
this.officeRepository = officeRepository;
|
this.officeRepository = officeRepository;
|
||||||
this.userDomainService = userDomainService;
|
|
||||||
this.platformUserRepository = platformUserRepository;
|
this.platformUserRepository = platformUserRepository;
|
||||||
this.platformPasswordEncoder = platformPasswordEncoder;
|
this.platformPasswordEncoder = platformPasswordEncoder;
|
||||||
this.clientRepository = clientRepository;
|
this.clientRepository = clientRepository;
|
||||||
@@ -143,78 +126,6 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
|||||||
this.permissionRepository = permissionRepository;
|
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
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public Long updateCurrentUser(UserCommand command) {
|
public Long updateCurrentUser(UserCommand command) {
|
||||||
@@ -254,12 +165,6 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
|||||||
return userToUpdate.getId();
|
return userToUpdate.getId();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
|
||||||
@Override
|
|
||||||
public void deleteUser(Long userId) {
|
|
||||||
this.appUserRepository.delete(userId);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public Long createRole(final RoleCommand command) {
|
public Long createRole(final RoleCommand command) {
|
||||||
@@ -321,30 +226,6 @@ public class WritePlatformServiceJpaRepositoryImpl implements WritePlatformServi
|
|||||||
return role.getId();
|
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
|
@Transactional
|
||||||
@Override
|
@Override
|
||||||
public void updateUsernamePasswordOnFirstTimeLogin(final UpdateUsernamePasswordCommand command) {
|
public void updateUsernamePasswordOnFirstTimeLogin(final UpdateUsernamePasswordCommand command) {
|
||||||
|
|||||||
@@ -4,18 +4,14 @@ import java.util.HashMap;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.HeaderParam;
|
|
||||||
import javax.ws.rs.OPTIONS;
|
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.core.Context;
|
import javax.ws.rs.core.Context;
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.MultivaluedMap;
|
import javax.ws.rs.core.MultivaluedMap;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.Response.ResponseBuilder;
|
|
||||||
import javax.ws.rs.core.StreamingOutput;
|
import javax.ws.rs.core.StreamingOutput;
|
||||||
import javax.ws.rs.core.UriInfo;
|
import javax.ws.rs.core.UriInfo;
|
||||||
|
|
||||||
@@ -38,57 +34,25 @@ public class ReportingApiResource {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ReadExtraDataAndReportingService ReadExtraDataAndReportingService;
|
private ReadExtraDataAndReportingService ReadExtraDataAndReportingService;
|
||||||
|
|
||||||
private String _corsHeaders;
|
// private Response makeCORSExport(ResponseBuilder req, String exportFilename,
|
||||||
|
// String returnMethod) {
|
||||||
private Response makeCORS(ResponseBuilder req, String returnMethod) {
|
// ResponseBuilder rb = req
|
||||||
ResponseBuilder rb = req.header("Access-Control-Allow-Origin", "*")
|
// .header("Access-Control-Allow-Origin", "*")
|
||||||
.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
|
// .header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
|
||||||
|
// .header("Content-Disposition",
|
||||||
if (!"".equals(returnMethod)) {
|
// "attachment;filename=" + exportFilename);
|
||||||
rb.header("Access-Control-Allow-Headers", returnMethod);
|
//
|
||||||
}
|
// if (!"".equals(returnMethod)) {
|
||||||
|
// rb.header("Access-Control-Allow-Headers", returnMethod);
|
||||||
return rb.build();
|
// }
|
||||||
}
|
//
|
||||||
|
// 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||||
@Produces({ MediaType.APPLICATION_JSON, "application/x-msdownload" })
|
@Produces({ MediaType.APPLICATION_JSON, "application/x-msdownload" })
|
||||||
public Response retrieveReport(@Context UriInfo uriInfo,
|
public Response retrieveReport(@Context UriInfo uriInfo) {
|
||||||
@Context HttpServletResponse httpServletResponse) {
|
|
||||||
|
|
||||||
MultivaluedMap<String, String> queryParams = uriInfo
|
MultivaluedMap<String, String> queryParams = uriInfo
|
||||||
.getQueryParameters();
|
.getQueryParameters();
|
||||||
@@ -115,15 +79,13 @@ public class ReportingApiResource {
|
|||||||
if ((exportCSV == null) || (!(exportCSV.equalsIgnoreCase("true")))) {
|
if ((exportCSV == null) || (!(exportCSV.equalsIgnoreCase("true")))) {
|
||||||
GenericResultset result = this.ReadExtraDataAndReportingService
|
GenericResultset result = this.ReadExtraDataAndReportingService
|
||||||
.retrieveGenericResultset(name, type, extractedQueryParams);
|
.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),
|
return Response.ok().entity(result).build();
|
||||||
name.replaceAll(" ", "") + ".csv");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StreamingOutput result = this.ReadExtraDataAndReportingService.retrieveReportCSV(name, type, extractedQueryParams);
|
||||||
|
|
||||||
|
return Response.ok().entity(result).header("Content-Disposition","attachment;filename=" + name.replaceAll(" ", "") + ".csv").build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@GET
|
@GET
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package org.mifosng.platform.api.user;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
import javax.ws.rs.DELETE;
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
@@ -13,7 +12,6 @@ import javax.ws.rs.Path;
|
|||||||
import javax.ws.rs.PathParam;
|
import javax.ws.rs.PathParam;
|
||||||
import javax.ws.rs.Produces;
|
import javax.ws.rs.Produces;
|
||||||
import javax.ws.rs.WebApplicationException;
|
import javax.ws.rs.WebApplicationException;
|
||||||
import javax.ws.rs.core.Context;
|
|
||||||
import javax.ws.rs.core.MediaType;
|
import javax.ws.rs.core.MediaType;
|
||||||
import javax.ws.rs.core.Response;
|
import javax.ws.rs.core.Response;
|
||||||
import javax.ws.rs.core.Response.Status;
|
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.ErrorResponse;
|
||||||
import org.mifosng.data.ErrorResponseList;
|
import org.mifosng.data.ErrorResponseList;
|
||||||
import org.mifosng.data.UserList;
|
import org.mifosng.data.UserList;
|
||||||
import org.mifosng.data.command.ChangePasswordCommand;
|
|
||||||
import org.mifosng.data.command.UserCommand;
|
import org.mifosng.data.command.UserCommand;
|
||||||
import org.mifosng.platform.ReadPlatformService;
|
import org.mifosng.platform.ReadPlatformService;
|
||||||
import org.mifosng.platform.WritePlatformService;
|
|
||||||
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
||||||
import org.mifosng.platform.exceptions.NewDataValidationException;
|
import org.mifosng.platform.exceptions.NewDataValidationException;
|
||||||
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
||||||
import org.mifosng.platform.user.domain.AppUser;
|
import org.mifosng.platform.user.domain.AppUser;
|
||||||
import org.mifosng.platform.user.domain.AppUserRepository;
|
import org.mifosng.platform.user.domain.AppUserRepository;
|
||||||
import org.slf4j.Logger;
|
import org.mifosng.platform.user.service.AppUserWritePlatformService;
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.dao.DataIntegrityViolationException;
|
|
||||||
import org.springframework.security.access.AccessDeniedException;
|
import org.springframework.security.access.AccessDeniedException;
|
||||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||||
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.Authentication;
|
||||||
@@ -49,13 +43,11 @@ import org.springframework.stereotype.Component;
|
|||||||
@Scope("singleton")
|
@Scope("singleton")
|
||||||
public class UserApiResource {
|
public class UserApiResource {
|
||||||
|
|
||||||
private final static Logger logger = LoggerFactory.getLogger(UserApiResource.class);
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ReadPlatformService readPlatformService;
|
private ReadPlatformService readPlatformService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private WritePlatformService writePlatformService;
|
private AppUserWritePlatformService appUserWritePlatformService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private AppUserRepository appUserRepository;
|
private AppUserRepository appUserRepository;
|
||||||
@@ -108,32 +100,11 @@ public class UserApiResource {
|
|||||||
@POST
|
@POST
|
||||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
|
||||||
@Produces({ MediaType.APPLICATION_JSON})
|
@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();
|
hardcodeUserIntoSecurityContext();
|
||||||
Long userId = this.writePlatformService.createUser(command);
|
Long userId = this.appUserWritePlatformService.createUser(command);
|
||||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
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
|
@DELETE
|
||||||
@@ -143,7 +114,7 @@ public class UserApiResource {
|
|||||||
public Response deleteUser(@PathParam("userId") final Long userId) {
|
public Response deleteUser(@PathParam("userId") final Long userId) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
this.writePlatformService.deleteUser(userId);
|
this.appUserWritePlatformService.deleteUser(userId);
|
||||||
|
|
||||||
return Response.ok().build();
|
return Response.ok().build();
|
||||||
} catch (UnAuthenticatedUserException e) {
|
} catch (UnAuthenticatedUserException e) {
|
||||||
@@ -167,11 +138,9 @@ public class UserApiResource {
|
|||||||
|
|
||||||
hardcodeUserIntoSecurityContext();
|
hardcodeUserIntoSecurityContext();
|
||||||
|
|
||||||
// UserCommand command = new UserCommand();
|
|
||||||
// command.setSelectedItems(new ArrayList<String>(commandEile.getSelectedItems()));
|
|
||||||
command.setId(userId);
|
command.setId(userId);
|
||||||
|
|
||||||
this.writePlatformService.updateUser(command);
|
this.appUserWritePlatformService.updateUser(command);
|
||||||
|
|
||||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||||
}
|
}
|
||||||
@@ -201,57 +170,57 @@ public class UserApiResource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@POST
|
// @POST
|
||||||
@Path("user/current")
|
// @Path("user/current")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
// @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||||
public Response updateCurrentUser(UserCommand command) {
|
// public Response updateCurrentUser(UserCommand command) {
|
||||||
|
//
|
||||||
try {
|
// try {
|
||||||
hardcodeUserIntoSecurityContext();
|
// hardcodeUserIntoSecurityContext();
|
||||||
|
//
|
||||||
Long userId = this.writePlatformService.updateCurrentUser(command);
|
// Long userId = this.appUserWritePlatformService.updateCurrentUser(command);
|
||||||
|
//
|
||||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
// return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||||
} catch (UnAuthenticatedUserException e) {
|
// } catch (UnAuthenticatedUserException e) {
|
||||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
// throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||||
} catch (AccessDeniedException e) {
|
// } catch (AccessDeniedException e) {
|
||||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
// ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
// ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||||
} catch (ApplicationDomainRuleException e) {
|
// } catch (ApplicationDomainRuleException e) {
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||||
} catch (NewDataValidationException e) {
|
// } catch (NewDataValidationException e) {
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
||||||
} catch (DataIntegrityViolationException e) {
|
// } catch (DataIntegrityViolationException e) {
|
||||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.username.already.exists.in.organisation", "username", command.getUsername());
|
// ErrorResponse errorResponse = new ErrorResponse("error.msg.username.already.exists.in.organisation", "username", command.getUsername());
|
||||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
// ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@POST
|
// @POST
|
||||||
@Path("user/current/password")
|
// @Path("user/current/password")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
// @Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||||
@Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
// @Produces({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
||||||
public Response updateCurrentUserPassword(ChangePasswordCommand command) {
|
// public Response updateCurrentUserPassword(ChangePasswordCommand command) {
|
||||||
|
//
|
||||||
try {
|
// try {
|
||||||
hardcodeUserIntoSecurityContext();
|
// hardcodeUserIntoSecurityContext();
|
||||||
|
//
|
||||||
Long userId = this.writePlatformService.updateCurrentUserPassword(command);
|
// Long userId = this.appUserWritePlatformService.updateCurrentUserPassword(command);
|
||||||
|
//
|
||||||
return Response.ok().entity(new EntityIdentifier(userId)).build();
|
// return Response.ok().entity(new EntityIdentifier(userId)).build();
|
||||||
} catch (UnAuthenticatedUserException e) {
|
// } catch (UnAuthenticatedUserException e) {
|
||||||
throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
// throw new WebApplicationException(Response.status(Status.UNAUTHORIZED).build());
|
||||||
} catch (AccessDeniedException e) {
|
// } catch (AccessDeniedException e) {
|
||||||
ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
// ErrorResponse errorResponse = new ErrorResponse("error.msg.no.permission", "id");
|
||||||
ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
// ErrorResponseList list = new ErrorResponseList(Arrays.asList(errorResponse));
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(list).build());
|
||||||
} catch (ApplicationDomainRuleException e) {
|
// } catch (ApplicationDomainRuleException e) {
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
// throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getErrors())).build());
|
||||||
} catch (NewDataValidationException e) {
|
// } catch (NewDataValidationException e) {
|
||||||
throw new WebApplicationException(Response.status(Status.BAD_REQUEST).entity(new ErrorResponseList(e.getValidationErrors())).build());
|
// 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;
|
import org.springframework.web.servlet.ModelAndView;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* FIXMED - REMOVE DEPRECATED CONTROLLER and related code artifacts
|
||||||
* @deprecated - remove signup functionality for now.
|
* @deprecated - remove signup functionality for now.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@@ -95,7 +96,8 @@ public class SignupController {
|
|||||||
|
|
||||||
ModelAndView mav = null;
|
ModelAndView mav = null;
|
||||||
try {
|
try {
|
||||||
signupPlatformService.signup(command);
|
// REMOVED
|
||||||
|
// signupPlatformService.signup(command);
|
||||||
|
|
||||||
status.setComplete();
|
status.setComplete();
|
||||||
mav = new ModelAndView("/tenant/signupsuccess", "signupFormBean",
|
mav = new ModelAndView("/tenant/signupsuccess", "signupFormBean",
|
||||||
|
|||||||
+2
-2
@@ -4,7 +4,7 @@ import org.mifosng.data.command.OfficeCommand;
|
|||||||
|
|
||||||
public interface OfficeWritePlatformService {
|
public interface OfficeWritePlatformService {
|
||||||
|
|
||||||
Long createOffice(OfficeCommand command);
|
Long createOffice(final OfficeCommand command);
|
||||||
|
|
||||||
Long updateOffice(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.exceptions.PlatformDataIntegrityException;
|
||||||
import org.mifosng.platform.organisation.domain.Office;
|
import org.mifosng.platform.organisation.domain.Office;
|
||||||
import org.mifosng.platform.organisation.domain.OfficeRepository;
|
import org.mifosng.platform.organisation.domain.OfficeRepository;
|
||||||
|
import org.mifosng.platform.organisation.service.OfficeCommandValidator;
|
||||||
import org.mifosng.platform.security.PlatformSecurityContext;
|
import org.mifosng.platform.security.PlatformSecurityContext;
|
||||||
import org.mifosng.platform.user.domain.AppUser;
|
import org.mifosng.platform.user.domain.AppUser;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@@ -49,7 +50,7 @@ public class OfficeWritePlatformServiceJpaRepositoryImpl implements OfficeWriteP
|
|||||||
|
|
||||||
office.generateHierarchy();
|
office.generateHierarchy();
|
||||||
|
|
||||||
this.officeRepository.save(office);
|
this.officeRepository.saveAndFlush(office);
|
||||||
|
|
||||||
return office.getId();
|
return office.getId();
|
||||||
} catch (DataIntegrityViolationException dve) {
|
} catch (DataIntegrityViolationException dve) {
|
||||||
|
|||||||
+1
-158
@@ -3,10 +3,8 @@ package org.mifosng.platform.rest;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import javax.ws.rs.Consumes;
|
import javax.ws.rs.Consumes;
|
||||||
import javax.ws.rs.DELETE;
|
|
||||||
import javax.ws.rs.GET;
|
import javax.ws.rs.GET;
|
||||||
import javax.ws.rs.POST;
|
import javax.ws.rs.POST;
|
||||||
import javax.ws.rs.Path;
|
import javax.ws.rs.Path;
|
||||||
@@ -27,17 +25,14 @@ import org.mifosng.data.PermissionData;
|
|||||||
import org.mifosng.data.PermissionList;
|
import org.mifosng.data.PermissionList;
|
||||||
import org.mifosng.data.RoleData;
|
import org.mifosng.data.RoleData;
|
||||||
import org.mifosng.data.RoleList;
|
import org.mifosng.data.RoleList;
|
||||||
import org.mifosng.data.UserList;
|
|
||||||
import org.mifosng.data.command.ChangePasswordCommand;
|
import org.mifosng.data.command.ChangePasswordCommand;
|
||||||
import org.mifosng.data.command.RoleCommand;
|
import org.mifosng.data.command.RoleCommand;
|
||||||
import org.mifosng.data.command.UserCommand;
|
import org.mifosng.data.command.UserCommand;
|
||||||
import org.mifosng.platform.ReadPlatformService;
|
import org.mifosng.platform.ReadPlatformService;
|
||||||
import org.mifosng.platform.WritePlatformService;
|
import org.mifosng.platform.WritePlatformService;
|
||||||
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
import org.mifosng.platform.exceptions.ApplicationDomainRuleException;
|
||||||
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
|
||||||
import org.mifosng.platform.exceptions.NewDataValidationException;
|
import org.mifosng.platform.exceptions.NewDataValidationException;
|
||||||
import org.mifosng.platform.infrastructure.PlatformEmailSendException;
|
import org.mifosng.platform.exceptions.UnAuthenticatedUserException;
|
||||||
import org.mifosng.platform.infrastructure.UsernameAlreadyExistsException;
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Scope;
|
import org.springframework.context.annotation.Scope;
|
||||||
import org.springframework.dao.DataIntegrityViolationException;
|
import org.springframework.dao.DataIntegrityViolationException;
|
||||||
@@ -55,158 +50,6 @@ public class UserAdmistrationResource {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private WritePlatformService writePlatformService;
|
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
|
@GET
|
||||||
@Path("user/current")
|
@Path("user/current")
|
||||||
@Consumes({ MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML })
|
@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;
|
import org.springframework.security.core.userdetails.User;
|
||||||
|
|
||||||
@Entity
|
@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 {
|
public class AppUser extends AbstractAuditableCustom<AppUser, Long> implements PlatformUser {
|
||||||
|
|
||||||
@Column(name = "email", nullable=false, length=100)
|
@Column(name = "email", nullable=false, length=100)
|
||||||
@@ -81,6 +81,8 @@ public class AppUser extends AbstractAuditableCustom<AppUser, Long> implements P
|
|||||||
boolean userAccountNonLocked = true;
|
boolean userAccountNonLocked = true;
|
||||||
|
|
||||||
Collection<SimpleGrantedAuthority> authorities = new ArrayList<SimpleGrantedAuthority>();
|
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);
|
User user = new User(username, password, userEnabled, userAccountNonExpired, userCredentialsNonExpired, userAccountNonLocked, authorities);
|
||||||
return new AppUser(organisation, office, user, allRoles, email, firstname, lastname);
|
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