FINERACT-2283: Self-service APIs are disabled by default
This commit is contained in:
+7
@@ -548,6 +548,7 @@ public class FineractProperties {
|
||||
public static class FineractModulesProperties {
|
||||
|
||||
private FineractInvestorModuleProperties investor;
|
||||
private FineractSelfServiceModuleProperties selfService;
|
||||
}
|
||||
|
||||
@Getter
|
||||
@@ -556,6 +557,12 @@ public class FineractProperties {
|
||||
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class FineractSelfServiceModuleProperties extends AbstractFineractModuleProperties {
|
||||
|
||||
}
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public static class FineractSqlValidationProperties {
|
||||
|
||||
+2
-2
@@ -36,10 +36,10 @@ import org.apache.fineract.infrastructure.core.data.DataValidatorBuilder;
|
||||
import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
|
||||
import org.apache.fineract.infrastructure.core.exception.PlatformApiDataValidationException;
|
||||
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistration;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationRepositoryWrapper;
|
||||
import org.apache.fineract.portfolio.calendar.domain.CalendarFrequencyType;
|
||||
import org.apache.fineract.portfolio.client.domain.Client;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistration;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistrationRepositoryWrapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
|
||||
+18
-5
@@ -25,7 +25,9 @@ import static org.springframework.security.authorization.AuthorityAuthorizationM
|
||||
import static org.springframework.security.authorization.AuthorizationManagers.allOf;
|
||||
import static org.springframework.security.web.util.matcher.AntPathRequestMatcher.antMatcher;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import org.apache.fineract.infrastructure.businessdate.service.BusinessDateReadPlatformService;
|
||||
import org.apache.fineract.infrastructure.cache.service.CacheWritePlatformService;
|
||||
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
|
||||
@@ -47,8 +49,10 @@ import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.convert.converter.Converter;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.security.authorization.AuthorizationManager;
|
||||
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
@@ -61,6 +65,7 @@ import org.springframework.security.oauth2.core.OAuth2ErrorCodes;
|
||||
import org.springframework.security.oauth2.jwt.Jwt;
|
||||
import org.springframework.security.oauth2.server.resource.authentication.JwtGrantedAuthoritiesConverter;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
import org.springframework.security.web.access.intercept.RequestAuthorizationContext;
|
||||
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
|
||||
import org.springframework.security.web.context.SecurityContextHolderFilter;
|
||||
|
||||
@@ -101,17 +106,25 @@ public class OAuth2SecurityConfig {
|
||||
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
||||
http //
|
||||
.securityMatcher(antMatcher("/api/**")).authorizeHttpRequests((auth) -> {
|
||||
List<AuthorizationManager<RequestAuthorizationContext>> authorizationManagers = new ArrayList<>();
|
||||
authorizationManagers.add(fullyAuthenticated());
|
||||
authorizationManagers.add(hasAuthority("TWOFACTOR_AUTHENTICATED"));
|
||||
if (fineractProperties.getModule().getSelfService().isEnabled()) {
|
||||
auth.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/authentication")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/registration")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/registration/user")).permitAll(); //
|
||||
authorizationManagers.add(selfServiceUserAuthManager());
|
||||
}
|
||||
|
||||
auth.requestMatchers(antMatcher(HttpMethod.OPTIONS, "/api/**")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/echo")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/authentication")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/authentication")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/registration")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/registration/user")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/twofactor/validate")).fullyAuthenticated() //
|
||||
.requestMatchers(antMatcher("/api/*/twofactor")).fullyAuthenticated() //
|
||||
.requestMatchers(antMatcher("/api/**"))
|
||||
.access(allOf(fullyAuthenticated(), hasAuthority("TWOFACTOR_AUTHENTICATED"), selfServiceUserAuthManager())); //
|
||||
}).csrf((csrf) -> csrf.disable()) // NOSONAR only creating a service that is used by non-browser clients
|
||||
.access(allOf(authorizationManagers.toArray(new AuthorizationManager[0]))); //
|
||||
}).csrf(AbstractHttpConfigurer::disable) // NOSONAR only creating a service that is used by non-browser
|
||||
// clients
|
||||
.exceptionHandling((ehc) -> ehc.authenticationEntryPoint(new OAuth2ExceptionEntryPoint()))
|
||||
.oauth2ResourceServer(oauth2 -> oauth2.jwt(jwt -> jwt.jwtAuthenticationConverter(authenticationConverter()))
|
||||
.authenticationEntryPoint(new OAuth2ExceptionEntryPoint())) //
|
||||
|
||||
+18
-6
@@ -19,11 +19,13 @@
|
||||
|
||||
package org.apache.fineract.infrastructure.core.config;
|
||||
|
||||
import static org.apache.fineract.infrastructure.security.vote.SelfServiceUserAuthorizationManager.selfServiceUserAuthManager;
|
||||
import static org.springframework.security.authorization.AuthenticatedAuthorizationManager.fullyAuthenticated;
|
||||
import static org.springframework.security.authorization.AuthorityAuthorizationManager.hasAuthority;
|
||||
import static org.springframework.security.authorization.AuthorizationManagers.allOf;
|
||||
import static org.springframework.security.web.util.matcher.AntPathRequestMatcher.antMatcher;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import org.apache.fineract.commands.domain.CommandSourceRepository;
|
||||
@@ -60,14 +62,17 @@ import org.springframework.http.HttpMethod;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.authentication.ProviderManager;
|
||||
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
|
||||
import org.springframework.security.authorization.AuthorizationManager;
|
||||
import org.springframework.security.config.Customizer;
|
||||
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.crypto.factory.PasswordEncoderFactories;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
import org.springframework.security.web.access.ExceptionTranslationFilter;
|
||||
import org.springframework.security.web.access.intercept.RequestAuthorizationContext;
|
||||
import org.springframework.security.web.authentication.www.BasicAuthenticationEntryPoint;
|
||||
import org.springframework.security.web.context.SecurityContextHolderFilter;
|
||||
import org.springframework.web.cors.CorsConfiguration;
|
||||
@@ -123,20 +128,27 @@ public class SecurityConfig {
|
||||
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
|
||||
http //
|
||||
.securityMatcher(antMatcher("/api/**")).authorizeHttpRequests((auth) -> {
|
||||
List<AuthorizationManager<RequestAuthorizationContext>> authorizationManagers = new ArrayList<>();
|
||||
authorizationManagers.add(fullyAuthenticated());
|
||||
authorizationManagers.add(hasAuthority("TWOFACTOR_AUTHENTICATED"));
|
||||
if (fineractProperties.getModule().getSelfService().isEnabled()) {
|
||||
auth.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/authentication")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/registration")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/registration/user")).permitAll(); //
|
||||
authorizationManagers.add(selfServiceUserAuthManager());
|
||||
}
|
||||
auth.requestMatchers(antMatcher(HttpMethod.OPTIONS, "/api/**")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/echo")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/authentication")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/authentication")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/registration")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/self/registration/user")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.PUT, "/api/*/instance-mode")).permitAll() //
|
||||
.requestMatchers(antMatcher(HttpMethod.POST, "/api/*/twofactor/validate")).fullyAuthenticated() //
|
||||
.requestMatchers(antMatcher("/api/*/twofactor")).fullyAuthenticated() //
|
||||
.requestMatchers(antMatcher("/api/**"))
|
||||
.access(allOf(fullyAuthenticated(), hasAuthority("TWOFACTOR_AUTHENTICATED"))); //
|
||||
.access(allOf(authorizationManagers.toArray(new AuthorizationManager[0]))); //
|
||||
}).httpBasic((httpBasic) -> httpBasic.authenticationEntryPoint(basicAuthenticationEntryPoint())) //
|
||||
.cors(Customizer.withDefaults()).csrf((csrf) -> csrf.disable()) // NOSONAR only creating a service that
|
||||
// is used by non-browser clients
|
||||
.cors(Customizer.withDefaults()).csrf(AbstractHttpConfigurer::disable) // NOSONAR only creating a
|
||||
// service that
|
||||
// is used by non-browser clients
|
||||
.sessionManagement((smc) -> smc.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) //
|
||||
.addFilterBefore(tenantAwareBasicAuthenticationFilter(), SecurityContextHolderFilter.class) //
|
||||
.addFilterAfter(requestResponseFilter(), ExceptionTranslationFilter.class) //
|
||||
|
||||
+2
-2
@@ -27,8 +27,6 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.infrastructure.configuration.service.ExternalServicesPropertiesReadPlatformService;
|
||||
import org.apache.fineract.infrastructure.core.service.DateUtils;
|
||||
import org.apache.fineract.infrastructure.gcm.GcmConstants;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistration;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationRepositoryWrapper;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.Message;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.Message.Priority;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.Notification;
|
||||
@@ -38,6 +36,8 @@ import org.apache.fineract.infrastructure.gcm.domain.Sender;
|
||||
import org.apache.fineract.infrastructure.sms.domain.SmsMessage;
|
||||
import org.apache.fineract.infrastructure.sms.domain.SmsMessageRepository;
|
||||
import org.apache.fineract.infrastructure.sms.domain.SmsMessageStatusType;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistration;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistrationRepositoryWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ public class SelfServiceUserAuthorizationManager implements AuthorizationManager
|
||||
AppUser user = (AppUser) authentication.get().getPrincipal();
|
||||
|
||||
String pathURL = fi.getRequest().getRequestURL().toString();
|
||||
boolean isSelfServiceRequest = (pathURL != null && pathURL.contains("/self/"));
|
||||
boolean isSelfServiceRequest = pathURL.contains("/self/");
|
||||
|
||||
boolean notAllowed = ((isSelfServiceRequest && !user.isSelfServiceUser())
|
||||
|| (!isSelfServiceRequest && user.isSelfServiceUser()));
|
||||
|
||||
+3
@@ -57,13 +57,16 @@ import org.apache.fineract.portfolio.self.account.exception.BeneficiaryTransferL
|
||||
import org.apache.fineract.portfolio.self.account.exception.DailyTPTTransactionAmountLimitExceededException;
|
||||
import org.apache.fineract.portfolio.self.account.service.SelfAccountTransferReadService;
|
||||
import org.apache.fineract.portfolio.self.account.service.SelfBeneficiariesTPTReadPlatformService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/accounttransfers")
|
||||
@Component
|
||||
@Tag(name = "Self Account transfer", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfAccountTransferApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
+3
@@ -56,12 +56,15 @@ import org.apache.fineract.portfolio.account.PortfolioAccountType;
|
||||
import org.apache.fineract.portfolio.account.service.AccountTransferEnumerations;
|
||||
import org.apache.fineract.portfolio.self.account.data.SelfBeneficiariesTPTData;
|
||||
import org.apache.fineract.portfolio.self.account.service.SelfBeneficiariesTPTReadPlatformService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/beneficiaries/tpt")
|
||||
@Component
|
||||
@Tag(name = "Self Third Party Transfer", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfBeneficiariesTPTApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
+3
@@ -53,16 +53,19 @@ import org.apache.fineract.portfolio.client.api.ClientsApiResource;
|
||||
import org.apache.fineract.portfolio.client.exception.ClientNotFoundException;
|
||||
import org.apache.fineract.portfolio.self.client.data.SelfClientDataValidator;
|
||||
import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.glassfish.jersey.media.multipart.FormDataBodyPart;
|
||||
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
|
||||
import org.glassfish.jersey.media.multipart.FormDataParam;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/clients")
|
||||
@Component
|
||||
@Tag(name = "Self Client", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfClientsApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.portfolio.self.config;
|
||||
|
||||
import org.apache.fineract.infrastructure.core.condition.PropertiesCondition;
|
||||
import org.apache.fineract.infrastructure.core.config.FineractProperties;
|
||||
|
||||
public class SelfServiceModuleIsEnabledCondition extends PropertiesCondition {
|
||||
|
||||
@Override
|
||||
protected boolean matches(FineractProperties properties) {
|
||||
return properties.getModule().getSelfService().isEnabled();
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.portfolio.self.config;
|
||||
|
||||
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
@Slf4j
|
||||
public class SelfServiceWarning implements InitializingBean {
|
||||
|
||||
@Override
|
||||
@SuppressFBWarnings("SLF4J_SIGN_ONLY_FORMAT")
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
log.warn("------------------------------------------------------------");
|
||||
log.warn(" ");
|
||||
log.warn("DO NOT USE THIS IN PRODUCTION!");
|
||||
log.warn("Self service capabilities of Fineract are NOT considered safe!");
|
||||
log.warn("DO NOT USE THIS IN PRODUCTION!");
|
||||
log.warn(" ");
|
||||
log.warn("------------------------------------------------------------");
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.api;
|
||||
package org.apache.fineract.portfolio.self.device.api;
|
||||
|
||||
public final class DeviceRegistrationApiConstants {
|
||||
|
||||
+8
-5
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.api;
|
||||
package org.apache.fineract.portfolio.self.device.api;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.JsonObject;
|
||||
@@ -36,17 +36,20 @@ import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistration;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationData;
|
||||
import org.apache.fineract.infrastructure.gcm.service.DeviceRegistrationReadPlatformService;
|
||||
import org.apache.fineract.infrastructure.gcm.service.DeviceRegistrationWritePlatformService;
|
||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistration;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistrationData;
|
||||
import org.apache.fineract.portfolio.self.device.service.DeviceRegistrationReadPlatformService;
|
||||
import org.apache.fineract.portfolio.self.device.service.DeviceRegistrationWritePlatformService;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/device/registration")
|
||||
@Component
|
||||
@Tag(name = "Device Registration", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class DeviceRegistrationApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.domain;
|
||||
package org.apache.fineract.portfolio.self.device.domain;
|
||||
|
||||
import jakarta.persistence.Column;
|
||||
import jakarta.persistence.Entity;
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.domain;
|
||||
package org.apache.fineract.portfolio.self.device.domain;
|
||||
|
||||
import java.time.OffsetDateTime;
|
||||
import lombok.Getter;
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.domain;
|
||||
package org.apache.fineract.portfolio.self.device.domain;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
|
||||
+2
-2
@@ -16,9 +16,9 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.domain;
|
||||
package org.apache.fineract.portfolio.self.device.domain;
|
||||
|
||||
import org.apache.fineract.infrastructure.gcm.exception.DeviceRegistrationNotFoundException;
|
||||
import org.apache.fineract.portfolio.self.device.exception.DeviceRegistrationNotFoundException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.exception;
|
||||
package org.apache.fineract.portfolio.self.device.exception;
|
||||
|
||||
import org.apache.fineract.infrastructure.core.exception.AbstractPlatformResourceNotFoundException;
|
||||
import org.springframework.dao.EmptyResultDataAccessException;
|
||||
+2
-2
@@ -16,10 +16,10 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.service;
|
||||
package org.apache.fineract.portfolio.self.device.service;
|
||||
|
||||
import java.util.Collection;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationData;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistrationData;
|
||||
|
||||
public interface DeviceRegistrationReadPlatformService {
|
||||
|
||||
+3
-3
@@ -16,17 +16,17 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.service;
|
||||
package org.apache.fineract.portfolio.self.device.service;
|
||||
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.time.OffsetDateTime;
|
||||
import java.util.Collection;
|
||||
import org.apache.fineract.infrastructure.core.domain.JdbcSupport;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationData;
|
||||
import org.apache.fineract.infrastructure.gcm.exception.DeviceRegistrationNotFoundException;
|
||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.apache.fineract.portfolio.client.data.ClientData;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistrationData;
|
||||
import org.apache.fineract.portfolio.self.device.exception.DeviceRegistrationNotFoundException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.EmptyResultDataAccessException;
|
||||
import org.springframework.jdbc.core.JdbcTemplate;
|
||||
+2
-2
@@ -16,9 +16,9 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.service;
|
||||
package org.apache.fineract.portfolio.self.device.service;
|
||||
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistration;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistration;
|
||||
|
||||
public interface DeviceRegistrationWritePlatformService {
|
||||
|
||||
+3
-3
@@ -16,7 +16,7 @@
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.apache.fineract.infrastructure.gcm.service;
|
||||
package org.apache.fineract.portfolio.self.device.service;
|
||||
|
||||
import jakarta.persistence.EntityExistsException;
|
||||
import jakarta.persistence.PersistenceException;
|
||||
@@ -24,11 +24,11 @@ import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||
import org.apache.fineract.infrastructure.core.exception.ErrorHandler;
|
||||
import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityException;
|
||||
import org.apache.fineract.infrastructure.core.service.DateUtils;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistration;
|
||||
import org.apache.fineract.infrastructure.gcm.domain.DeviceRegistrationRepositoryWrapper;
|
||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.apache.fineract.portfolio.client.domain.Client;
|
||||
import org.apache.fineract.portfolio.client.domain.ClientRepositoryWrapper;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistration;
|
||||
import org.apache.fineract.portfolio.self.device.domain.DeviceRegistrationRepositoryWrapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.orm.jpa.JpaSystemException;
|
||||
+3
@@ -56,15 +56,18 @@ import org.apache.fineract.portfolio.loanaccount.exception.NotSupportedLoanTempl
|
||||
import org.apache.fineract.portfolio.loanaccount.guarantor.api.GuarantorsApiResource;
|
||||
import org.apache.fineract.portfolio.loanaccount.guarantor.data.GuarantorData;
|
||||
import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.portfolio.self.loanaccount.data.SelfLoansDataValidator;
|
||||
import org.apache.fineract.portfolio.self.loanaccount.service.AppuserLoansMapperReadService;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/loans")
|
||||
@Component
|
||||
@Tag(name = "Self Loans", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfLoansApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
+3
@@ -43,13 +43,16 @@ import org.apache.fineract.commands.service.PortfolioCommandSourceWritePlatformS
|
||||
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
|
||||
import org.apache.fineract.infrastructure.core.exception.UnrecognizedQueryParamException;
|
||||
import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.portfolio.self.pockets.service.PocketAccountMappingReadPlatformService;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/pockets")
|
||||
@Component
|
||||
@Tag(name = "Pocket", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class PocketApiResource {
|
||||
|
||||
private final PortfolioCommandSourceWritePlatformService commandsSourceWritePlatformService;
|
||||
|
||||
+3
@@ -33,6 +33,8 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.portfolio.loanaccount.api.LoanApiConstants;
|
||||
import org.apache.fineract.portfolio.loanproduct.api.LoanProductsApiResource;
|
||||
import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/loanproducts")
|
||||
@@ -114,6 +116,7 @@ import org.springframework.stereotype.Component;
|
||||
+ "If Specified as true, arrears will be identified based on original schedule.\n" + "allowAttributeOverrides\n"
|
||||
+ "Specifies if select attributes may be overridden for individual loan accounts.")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfLoanProductsApiResource {
|
||||
|
||||
private final LoanProductsApiResource loanProductsApiResource;
|
||||
|
||||
+3
@@ -33,12 +33,15 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.portfolio.savings.SavingsApiConstants;
|
||||
import org.apache.fineract.portfolio.savings.api.SavingsProductsApiResource;
|
||||
import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/savingsproducts")
|
||||
@Component
|
||||
@Tag(name = "Self Savings Products", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfSavingsProductsApiResource {
|
||||
|
||||
private final SavingsProductsApiResource savingsProductsApiResource;
|
||||
|
||||
+3
@@ -33,12 +33,15 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.portfolio.accounts.constants.ShareAccountApiConstants;
|
||||
import org.apache.fineract.portfolio.products.api.ProductsApiResource;
|
||||
import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/products/share")
|
||||
@Component
|
||||
@Tag(name = "Self Share Products", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfShareProductsApiResource {
|
||||
|
||||
private final ProductsApiResource productsApiResource;
|
||||
|
||||
+3
@@ -27,15 +27,18 @@ import jakarta.ws.rs.core.MediaType;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
|
||||
import org.apache.fineract.infrastructure.core.serialization.DefaultToApiJsonSerializer;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.portfolio.self.registration.SelfServiceApiConstants;
|
||||
import org.apache.fineract.portfolio.self.registration.service.SelfServiceRegistrationWritePlatformService;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/registration")
|
||||
@Component
|
||||
@Tag(name = "Self Service Registration", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfServiceRegistrationApiResource {
|
||||
|
||||
private final SelfServiceRegistrationWritePlatformService selfServiceRegistrationWritePlatformService;
|
||||
|
||||
+3
@@ -37,6 +37,8 @@ import jakarta.ws.rs.core.UriInfo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.infrastructure.dataqueries.api.RunreportsApiResource;
|
||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/runreports")
|
||||
@@ -51,6 +53,7 @@ import org.springframework.stereotype.Component;
|
||||
+ "\n" + "ARGUMENTS\n"
|
||||
+ "R_'parameter names' ... optional, No defaults The number and names of the parameters depend on the specific report and how it has been configured. R_officeId is an example parameter name.Note: the prefix R_ stands for ReportinggenericResultSetoptional, defaults to true If 'true' an optimised JSON format is returned suitable for tabular display of data. If 'false' a simple JSON format is returned. parameterType optional, The only valid value is 'true'. If any other value is provided the argument will be ignored Determines whether the request looks in the list of reports or the list of parameters for its data. Doesn't apply to Pentaho reports.exportCSV optional, The only valid value is 'true'. If any other value is provided the argument will be ignored Output will be delivered as a CSV file instead of JSON. Doesn't apply to Pentaho reports.output-type optional, Defaults to HTML. Valid Values are HTML, XLS, XSLX, CSV and PDF for html, Excel, Excel 2007+, CSV and PDF formats respectively.Only applies to Pentaho reports.locale optional Any valid locale Ex: en_US, en_IN, fr_FR etcOnly applies to Pentaho reports.")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfRunReportApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
+3
@@ -52,16 +52,19 @@ import org.apache.fineract.portfolio.savings.api.SavingsApiSetConstants;
|
||||
import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
|
||||
import org.apache.fineract.portfolio.savings.exception.SavingsAccountNotFoundException;
|
||||
import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.portfolio.self.savings.data.SelfSavingsAccountConstants;
|
||||
import org.apache.fineract.portfolio.self.savings.data.SelfSavingsDataValidator;
|
||||
import org.apache.fineract.portfolio.self.savings.service.AppuserSavingsMapperReadService;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/savingsaccounts")
|
||||
@Component
|
||||
@Tag(name = "Self Savings Account", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfSavingsApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
+3
@@ -33,7 +33,9 @@ import jakarta.ws.rs.core.MediaType;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.infrastructure.security.api.AuthenticationApiResource;
|
||||
import org.apache.fineract.infrastructure.security.api.AuthenticationApiResourceSwagger;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Component
|
||||
@@ -41,6 +43,7 @@ import org.springframework.stereotype.Component;
|
||||
@Path("/v1/self/authentication")
|
||||
@Tag(name = "Self Authentication", description = "Authenticates the credentials provided and returns the set roles and permissions allowed")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfAuthenticationApiResource {
|
||||
|
||||
private final AuthenticationApiResource authenticationApiResource;
|
||||
|
||||
+3
@@ -40,14 +40,17 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.fineract.infrastructure.core.exception.InvalidJsonException;
|
||||
import org.apache.fineract.infrastructure.core.serialization.FromJsonHelper;
|
||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.useradministration.api.UsersApiResource;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/user")
|
||||
@Component
|
||||
@Tag(name = "Self User", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfUserApiResource {
|
||||
|
||||
private final UsersApiResource usersApiResource;
|
||||
|
||||
+3
@@ -30,7 +30,9 @@ import jakarta.ws.rs.Produces;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.infrastructure.security.api.UserDetailsApiResource;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/userdetails")
|
||||
@@ -38,6 +40,7 @@ import org.springframework.stereotype.Component;
|
||||
@ConditionalOnProperty("fineract.security.oauth.enabled")
|
||||
@Tag(name = "Self User Details", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfUserDetailsApiResource {
|
||||
|
||||
private final UserDetailsApiResource userDetailsApiResource;
|
||||
|
||||
+3
@@ -57,17 +57,20 @@ import org.apache.fineract.portfolio.client.exception.ClientNotFoundException;
|
||||
import org.apache.fineract.portfolio.products.data.ProductData;
|
||||
import org.apache.fineract.portfolio.products.service.ShareProductReadPlatformService;
|
||||
import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.portfolio.self.shareaccounts.data.SelfShareAccountsDataValidator;
|
||||
import org.apache.fineract.portfolio.self.shareaccounts.service.AppUserShareAccountsMapperReadPlatformService;
|
||||
import org.apache.fineract.portfolio.shareaccounts.data.ShareAccountData;
|
||||
import org.apache.fineract.portfolio.shareaccounts.service.ShareAccountReadPlatformService;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@Path("/v1/self/shareaccounts")
|
||||
@Component
|
||||
@Tag(name = "Self Share Accounts", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfShareAccountsApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
+3
@@ -32,9 +32,11 @@ import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.apache.fineract.portfolio.client.exception.ClientNotFoundException;
|
||||
import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.spm.api.ScorecardApiResource;
|
||||
import org.apache.fineract.spm.data.ScorecardData;
|
||||
import org.apache.fineract.useradministration.domain.AppUser;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -42,6 +44,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
@Component
|
||||
@Tag(name = "Self Score Card", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfScorecardApiResource {
|
||||
|
||||
private final PlatformSecurityContext context;
|
||||
|
||||
+3
@@ -28,8 +28,10 @@ import jakarta.ws.rs.core.MediaType;
|
||||
import java.util.List;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext;
|
||||
import org.apache.fineract.portfolio.self.config.SelfServiceModuleIsEnabledCondition;
|
||||
import org.apache.fineract.spm.api.SpmApiResource;
|
||||
import org.apache.fineract.spm.data.SurveyData;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -37,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
@Component
|
||||
@Tag(name = "Self Spm", description = "")
|
||||
@RequiredArgsConstructor
|
||||
@Conditional(SelfServiceModuleIsEnabledCondition.class)
|
||||
public class SelfSpmApiResource {
|
||||
|
||||
private final PlatformSecurityContext securityContext;
|
||||
|
||||
@@ -183,6 +183,8 @@ fineract.sampling.samplingRate=${FINERACT_SAMPLING_RATE:1000}
|
||||
fineract.sampling.sampledClasses=${FINERACT_SAMPLED_CLASSES:}
|
||||
fineract.sampling.resetPeriodSec=${FINERACT_SAMPLING_RESET_PERIOD_IN_SEC:60}
|
||||
|
||||
#Modules
|
||||
fineract.module.self-service.enabled=${FINERACT_MODULE_SELF_SERVICE_ENABLED:false}
|
||||
fineract.module.investor.enabled=${FINERACT_MODULE_INVESTOR_ENABLED:true}
|
||||
|
||||
fineract.insecure-http-client=${FINERACT_INSECURE_HTTP_CLIENT:true}
|
||||
|
||||
@@ -105,6 +105,7 @@ fineract.sampling.enabled=false
|
||||
fineract.sampling.sampledClasses=
|
||||
|
||||
fineract.module.investor.enabled=true
|
||||
fineract.module.self-service.enabled=true
|
||||
|
||||
# sql validation
|
||||
|
||||
|
||||
+1
-1
@@ -144,7 +144,7 @@ public class SavingsAccountsExternalIdTest extends IntegrationTest {
|
||||
request.dateFormat(dateFormat);
|
||||
request.setLocale(locale);
|
||||
request.setActivatedOnDate(formattedDate);
|
||||
Response<DeleteSavingsAccountsAccountIdResponse> response = okR(fineractClient().savingsAccounts.delete20(EXTERNAL_ID));
|
||||
Response<DeleteSavingsAccountsAccountIdResponse> response = okR(fineractClient().savingsAccounts.delete19(EXTERNAL_ID));
|
||||
|
||||
assertThat(response.isSuccessful()).isTrue();
|
||||
assertThat(response.body()).isNotNull();
|
||||
|
||||
Reference in New Issue
Block a user