# # 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. # fineract.node-id=1 fineract.security.basicauth.enabled=true fineract.ip-tracking.enabled=false fineract.security.oauth2.enabled=false fineract.security.2fa.enabled=false fineract.security.hsts.enabled=false #CORS configuration fineract.security.cors.enabled=true fineract.security.cors.allowed-origin-patterns=* fineract.security.cors.allowed-methods=* fineract.security.cors.allowed-headers=* fineract.security.cors.exposed-headers=* fineract.security.cors.allow-credentials=true fineract.tenant.host=localhost fineract.tenant.port=3306 fineract.tenant.username=root fineract.tenant.password=mysql fineract.tenant.parameters= fineract.tenant.timezone=Asia/Kolkata fineract.tenant.identifier=default fineract.tenant.name=fineract_default fineract.tenant.description=Default Demo Tenant fineract.tenant.master-password=fineract fineract.tenant.encrytion="AES/CBC/PKCS5Padding" fineract.mode.read-enabled=true fineract.mode.write-enabled=true fineract.mode.batch-enabled=true fineract.partitioned-job.partitioned-job-properties[0].job-name=LOAN_COB fineract.partitioned-job.partitioned-job-properties[0].chunk-size=100 fineract.partitioned-job.partitioned-job-properties[0].partition-size=100 fineract.partitioned-job.partitioned-job-properties[0].thread-pool-core-pool-size=1 fineract.partitioned-job.partitioned-job-properties[0].thread-pool-max-pool-size=1 fineract.partitioned-job.partitioned-job-properties[0].thread-pool-queue-capacity=1 fineract.partitioned-job.partitioned-job-properties[0].retry-limit=5 fineract.partitioned-job.partitioned-job-properties[0].poll-interval=10000 fineract.remote-job-message-handler.spring-events.enabled=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_SPRING_EVENTS_ENABLED:true} fineract.remote-job-message-handler.jms.enabled=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_JMS_ENABLED:false} fineract.remote-job-message-handler.jms.request-queue-name=${FINERACT_REMOTE_JOB_MESSAGE_HANDLER_JMS_QUEUE_NAME:JMS-request-queue} fineract.events.external.enabled=${FINERACT_EXTERNAL_EVENTS_ENABLED:false} fineract.events.external.partition-size=${FINERACT_EXTERNAL_EVENTS_PARTITION_SIZE:5000} fineract.events.external.thread-pool-core-pool-size=${FINERACT_EVENT_TASK_EXECUTOR_CORE_POOL_SIZE:2} fineract.events.external.thread-pool-max-pool-size=${FINERACT_EVENT_TASK_EXECUTOR_MAX_POOL_SIZE:25} fineract.events.external.thread-pool-queue-capacity=${FINERACT_EVENT_TASK_EXECUTOR_QUEUE_CAPACITY:500} fineract.events.external.producer.read-batch-size=${FINERACT_EXTERNAL_EVENTS_PRODUCER_READ_BATCH_SIZE:1000} fineract.events.external.producer.jms.enabled=${FINERACT_EXTERNAL_EVENTS_PRODUCER_JMS_ENABLED:false} fineract.events.external.producer.jms.event-queue-name=${FINERACT_EXTERNAL_EVENTS_PRODUCER_JMS_QUEUE_NAME:JMS-event-queue} fineract.events.external.producer.jms.broker-url=${FINERACT_EXTERNAL_EVENTS_PRODUCER_JMS_BROKER_URL:tcp://127.0.0.1:61616} fineract.events.external.producer.jms.thread-pool-task-executor-core-pool-size=${FINERACT_EVENT_TASK_EXECUTOR_CORE_POOL_SIZE:10} fineract.events.external.producer.jms.thread-pool-task-executor-max-pool-size=${FINERACT_EVENT_TASK_EXECUTOR_MAX_POOL_SIZE:100} fineract.task-executor.default-task-executor-core-pool-size=${FINERACT_DEFAULT_TASK_EXECUTOR_CORE_POOL_SIZE:10} fineract.task-executor.default-task-executor-max-pool-size=${FINERACT_DEFAULT_TASK_EXECUTOR_MAX_POOL_SIZE:100} # This is intentionally restricted to a single thread due to an outstanding Liquibase thread-safety issue: https://github.com/liquibase/liquibase/pull/7227 fineract.task-executor.tenant-upgrade-task-executor-core-pool-size=1 # This is intentionally restricted to a single thread due to an outstanding Liquibase thread-safety issue: https://github.com/liquibase/liquibase/pull/7227 fineract.task-executor.tenant-upgrade-task-executor-max-pool-size=1 fineract.task-executor.tenant-upgrade-task-executor-queue-capacity=${FINERACT_TENANT_UPGRADE_TASK_EXECUTOR_QUEUE_CAPACITY:100} fineract.loan.transactionprocessor.creocore.enabled=true fineract.loan.transactionprocessor.early-repayment.enabled=true fineract.loan.transactionprocessor.mifos-standard.enabled=true fineract.loan.transactionprocessor.heavensfamily.enabled=true fineract.loan.transactionprocessor.interest-principal-penalties-fees.enabled=true fineract.loan.transactionprocessor.principal-interest-penalties-fees.enabled=true fineract.loan.transactionprocessor.fees-penalties-interest-principal.enabled=true fineract.loan.transactionprocessor.rbi-india.enabled=true fineract.loan.transactionprocessor.due-penalty-fee-interest-principal-in-advance-principal-penalty-fee-interest.enabled=true fineract.loan.transactionprocessor.due-penalty-interest-principal-fee-in-advance-penalty-interest-principal-fee.enabled=true fineract.loan.transactionprocessor.advanced-payment-strategy.enabled=true fineract.loan.transactionprocessor.error-not-found-fail=true fineract.loan.status-change-history-statuses=NONE fineract.content.regex-whitelist-enabled=true fineract.content.regex-whitelist=.*\\.pdf$,.*\\.doc,.*\\.docx,.*\\.xls,.*\\.xlsx,.*\\.jpg,.*\\.jpeg,.*\\.png fineract.content.mime-whitelist-enabled=true fineract.content.mime-whitelist=application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,image/jpeg,image/png fineract.content.filesystem.enabled=true fineract.content.filesystem.rootFolder=${user.home}/.fineract fineract.content.s3.enabled=false fineract.content.s3.bucketName= fineract.content.s3.accessKey= fineract.content.s3.secretKey= fineract.content.s3.region= fineract.content.s3.endpoint= fineract.content.s3.path-style-addressing-enabled=false fineract.report.export.s3.bucket=${FINERACT_REPORT_EXPORT_S3_BUCKET_NAME:} fineract.report.export.s3.enabled=${FINERACT_REPORT_EXPORT_S3_ENABLED:false} fineract.jpa.statementLoggingEnabled=${FINERACT_STATEMENT_LOGGING_ENABLED:false} fineract.database.defaultMasterPassword=${FINERACT_DEFAULT_MASTER_PASSWORD:fineract} fineract.job.loan-cob-enabled=${FINERACT_JOB_LOAN_COB_ENABLED:true} # Aggregation job configuration fineract.job.journal-entry-aggregation.exclude-recent-N-days=${FINERACT_JOB_JOURNAL_ENTRY_AGGREGATION_EXCLUDE_RECENT_N_DAYS:1} fineract.job.journal-entry-aggregation.enabled=${FINERACT_JOB_JOURNAL_ENTRY_AGGREGATION_ENABLED:true} #this property if enabled, will create aggregated entry for all data on first run, instead of one entry per submitted_on_date fineract.job.journal-entry-aggregation.chunk-size=${FINERACT_JOB_JOURNAL_ENTRY_AGGREGATION_CHUNK_SIZE:2000} fineract.sampling.enabled=false fineract.sampling.sampledClasses= fineract.module.investor.enabled=true fineract.module.self-service.enabled=true fineract.module.loan-origination.enabled=true # sql validation # inject-blind fineract.sql-validation.patterns[0].name=inject-blind fineract.sql-validation.patterns[0].pattern=(?i).*[\\"'`]?\\s*[and|or]+\\s*[\\"'`]?([\\d\\w])+[\\"'`]?\\s*=\\s*[\\"'`]?(\\1)[\\"'`]?\\s*.* # detect-entry-point fineract.sql-validation.patterns[1].name=detect-entry-point fineract.sql-validation.patterns[1].pattern=(?i)^[\\"'`]?[\\)\\s]+ # inject-timing fineract.sql-validation.patterns[2].name=inject-timing fineract.sql-validation.patterns[2].pattern=(?i).*[\\"'`]?\\s*[and|\\+|&|\\|]+.*\\s*[sleep|pg_sleep|benchmark]+\\s*(\\(\\s*\\d+\\s*[,]?\\s*.*\\s*\\))+.* # detect-backend fineract.sql-validation.patterns[3].name=detect-backend fineract.sql-validation.patterns[3].pattern=(?i).*\\[\\s*\\"(\\w+\\(.*\\))=(\\1)\\"\\s*,\\s*\\"\\w+\\"\\s*\\].* # detect-column fineract.sql-validation.patterns[4].name=detect-column fineract.sql-validation.patterns[4].pattern=(?i).*[\\"'`]?\\s*(order\\s*by|group\\s*by|union\\s*select)+\\s+([\\d+|null]?\\s*,*\\s*)+\\s*.* # detect-out-of-bands fineract.sql-validation.patterns[5].name=detect-out-of-bands fineract.sql-validation.patterns[5].pattern=(?i).*(select)+\\s+(load_file)+.* # inject-stacked-query fineract.sql-validation.patterns[6].name=inject-stacked-query fineract.sql-validation.patterns[6].pattern=(?i).*[;]+\\s*(create|drop|alter|truncate|comment|select|insert|update|delete|merge|upsert|call|exec)+.*(from|into|set|table|column|database)*.* # inject-comment fineract.sql-validation.patterns[7].name=inject-comment fineract.sql-validation.patterns[7].pattern=(?i).*\\s+(--|/\\*|#|\\(\\{)++.* # main fineract.sql-validation.profiles[0].name=main fineract.sql-validation.profiles[0].description=Main Query Validation Profile fineract.sql-validation.profiles[0].patternRefs[0].name=inject-blind fineract.sql-validation.profiles[0].patternRefs[0].order=0 fineract.sql-validation.profiles[0].patternRefs[1].name=detect-entry-point fineract.sql-validation.profiles[0].patternRefs[1].order=1 fineract.sql-validation.profiles[0].patternRefs[2].name=inject-timing fineract.sql-validation.profiles[0].patternRefs[2].order=2 fineract.sql-validation.profiles[0].patternRefs[3].name=detect-backend fineract.sql-validation.profiles[0].patternRefs[3].order=3 fineract.sql-validation.profiles[0].patternRefs[4].name=detect-column fineract.sql-validation.profiles[0].patternRefs[4].order=4 fineract.sql-validation.profiles[0].patternRefs[5].name=detect-out-of-bands fineract.sql-validation.profiles[0].patternRefs[5].order=5 fineract.sql-validation.profiles[0].patternRefs[6].name=inject-stacked-query fineract.sql-validation.profiles[0].patternRefs[6].order=6 fineract.sql-validation.profiles[0].patternRefs[7].name=inject-comment fineract.sql-validation.profiles[0].patternRefs[7].order=7 fineract.sql-validation.profiles[0].enabled=true # adhoc fineract.sql-validation.profiles[1].name=adhoc fineract.sql-validation.profiles[1].description=Adhoc Query Validation Profile fineract.sql-validation.profiles[1].patternRefs[0].name=inject-blind fineract.sql-validation.profiles[1].patternRefs[0].order=0 fineract.sql-validation.profiles[1].patternRefs[1].name=detect-entry-point fineract.sql-validation.profiles[1].patternRefs[1].order=1 fineract.sql-validation.profiles[1].patternRefs[2].name=inject-timing fineract.sql-validation.profiles[1].patternRefs[2].order=2 fineract.sql-validation.profiles[1].patternRefs[3].name=detect-backend fineract.sql-validation.profiles[1].patternRefs[3].order=3 fineract.sql-validation.profiles[1].patternRefs[4].name=detect-column fineract.sql-validation.profiles[1].patternRefs[4].order=4 fineract.sql-validation.profiles[1].patternRefs[5].name=detect-out-of-bands fineract.sql-validation.profiles[1].patternRefs[5].order=5 fineract.sql-validation.profiles[1].patternRefs[6].name=inject-stacked-query fineract.sql-validation.profiles[1].patternRefs[6].order=6 fineract.sql-validation.profiles[1].patternRefs[7].name=inject-comment fineract.sql-validation.profiles[1].patternRefs[7].order=7 fineract.sql-validation.profiles[1].enabled=true # dynamic fineract.sql-validation.profiles[2].name=dynamic fineract.sql-validation.profiles[2].description=Dynamic Query Validation Profile fineract.sql-validation.profiles[2].patternRefs[0].name=inject-blind fineract.sql-validation.profiles[2].patternRefs[0].order=0 fineract.sql-validation.profiles[2].patternRefs[1].name=detect-entry-point fineract.sql-validation.profiles[2].patternRefs[1].order=1 fineract.sql-validation.profiles[2].patternRefs[2].name=inject-timing fineract.sql-validation.profiles[2].patternRefs[2].order=2 fineract.sql-validation.profiles[2].patternRefs[3].name=detect-backend fineract.sql-validation.profiles[2].patternRefs[3].order=3 fineract.sql-validation.profiles[2].patternRefs[4].name=detect-column fineract.sql-validation.profiles[2].patternRefs[4].order=4 fineract.sql-validation.profiles[2].patternRefs[5].name=detect-out-of-bands fineract.sql-validation.profiles[2].patternRefs[5].order=5 fineract.sql-validation.profiles[2].patternRefs[6].name=inject-stacked-query fineract.sql-validation.profiles[2].patternRefs[6].order=6 fineract.sql-validation.profiles[2].patternRefs[7].name=inject-comment fineract.sql-validation.profiles[2].patternRefs[7].order=7 fineract.sql-validation.profiles[2].enabled=true #Cache - Default fineract.cache.default-template.ttl=1m fineract.cache.default-template.maximum-entries=1000 management.health.jms.enabled=false # FINERACT 1296 management.endpoint.health.probes.enabled=true management.health.livenessState.enabled=true management.health.readinessState.enabled=true # FINERACT-883 management.info.git.mode=FULL management.endpoints.web.exposure.include=health,info # FINERACT-914 server.forward-headers-strategy=framework server.port=8443 server.servlet.context-path=/fineract-provider server.compression.enabled=true server.ssl.enabled=true server.ssl.protocol=TLS server.ssl.key-store=keystore.jks server.ssl.key-store-password=openmf spring.datasource.hikari.driverClassName=org.mariadb.jdbc.Driver spring.datasource.hikari.jdbcUrl=jdbc:mariadb://localhost:3306/fineract_tenants spring.datasource.hikari.username=root spring.datasource.hikari.password=mysql spring.datasource.hikari.minimumIdle=3 spring.datasource.hikari.maximumPoolSize=10 spring.datasource.hikari.idleTimeout=60000 spring.datasource.hikari.connectionTimeout=20000 spring.datasource.hikari.connectionTestQuery=SELECT 1 spring.datasource.hikari.autoCommit=true spring.datasource.hikari.dataSourceProperties['cachePrepStmts']=true spring.datasource.hikari.dataSourceProperties['prepStmtCacheSize']=250 spring.datasource.hikari.dataSourceProperties['prepStmtCacheSqlLimit']=2048 spring.datasource.hikari.dataSourceProperties['useServerPrepStmts']=true spring.datasource.hikari.dataSourceProperties['useLocalSessionState']=true spring.datasource.hikari.dataSourceProperties['rewriteBatchedStatements']=true spring.datasource.hikari.dataSourceProperties['cacheResultSetMetadata']=true spring.datasource.hikari.dataSourceProperties['cacheServerConfiguration']=true spring.datasource.hikari.dataSourceProperties['elideSetAutoCommits']=true spring.datasource.hikari.dataSourceProperties['maintainTimeStats']=false spring.datasource.hikari.dataSourceProperties['logSlowQueries']=true spring.datasource.hikari.dataSourceProperties['dumpQueriesOnException']=true spring.jpa.open-in-view=false spring.data.jdbc.dialect=maria spring.main.allow-bean-definition-overriding=true spring.batch.initialize-schema=NEVER # Disabling Spring Batch jobs on startup spring.batch.job.enabled=false fineract.retry.instances.executeCommand.max-attempts=3 fineract.retry.instances.executeCommand.wait-duration=1s fineract.retry.instances.executeCommand.enable-exponential-backoff=true fineract.retry.instances.executeCommand.exponential-backoff-multiplier=2 fineract.retry.instances.executeCommand.retryExceptions=org.springframework.dao.CannotAcquireLockException,org.springframework.orm.ObjectOptimisticLockingFailureException resilience4j.retry.instances.processJobDetailForExecution.max-attempts=3 resilience4j.retry.instances.processJobDetailForExecution.wait-duration=1s resilience4j.retry.instances.processJobDetailForExecution.enable-exponential-backoff=true resilience4j.retry.instances.processJobDetailForExecution.exponential-backoff-multiplier=2 resilience4j.retry.instances.recalculateInterest.max-attempts=3 resilience4j.retry.instances.recalculateInterest.wait-duration=1s resilience4j.retry.instances.recalculateInterest.enable-exponential-backoff=true resilience4j.retry.instances.recalculateInterest.exponential-backoff-multiplier=2 resilience4j.retry.instances.recalculateInterest.retryExceptions=org.springframework.dao.CannotAcquireLockException,org.springframework.orm.ObjectOptimisticLockingFailureException resilience4j.retry.instances.postInterest.max-attempts=3 resilience4j.retry.instances.postInterest.wait-duration=1s resilience4j.retry.instances.postInterest.enable-exponential-backoff=true resilience4j.retry.instances.postInterest.exponential-backoff-multiplier=2 resilience4j.retry.instances.postInterest.retryExceptions=org.springframework.dao.CannotAcquireLockException,org.springframework.orm.ObjectOptimisticLockingFailureException spring.cloud.aws.region.static=eu-central-1 fineract.insecure-http-client=true fineract.client-connect-timeout=30 fineract.client-read-timeout=30 fineract.client-write-timeout=30 fineract.command.enabled=true fineract.command.executor=sync fineract.command.ring-buffer-size=1024 fineract.command.producer-type=single