| /** |
| * 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.client.util; |
| |
| import java.security.KeyManagementException; |
| import java.security.NoSuchAlgorithmException; |
| import java.security.SecureRandom; |
| import java.security.cert.CertificateException; |
| import java.security.cert.X509Certificate; |
| import javax.net.ssl.HostnameVerifier; |
| import javax.net.ssl.SSLContext; |
| import javax.net.ssl.SSLSocketFactory; |
| import javax.net.ssl.TrustManager; |
| import javax.net.ssl.X509TrustManager; |
| import okhttp3.OkHttpClient; |
| import okhttp3.logging.HttpLoggingInterceptor; |
| import okhttp3.logging.HttpLoggingInterceptor.Level; |
| import org.apache.fineract.client.auth.ApiKeyAuth; |
| import org.apache.fineract.client.auth.HttpBasicAuth; |
| import org.apache.fineract.client.services.AccountNumberFormatApi; |
| import org.apache.fineract.client.services.AccountTransfersApi; |
| import org.apache.fineract.client.services.AccountingClosureApi; |
| import org.apache.fineract.client.services.AccountingRulesApi; |
| import org.apache.fineract.client.services.AdhocQueryApiApi; |
| import org.apache.fineract.client.services.AuditsApi; |
| import org.apache.fineract.client.services.AuthenticationHttpBasicApi; |
| import org.apache.fineract.client.services.BatchApiApi; |
| import org.apache.fineract.client.services.CacheApi; |
| import org.apache.fineract.client.services.CashierJournalsApi; |
| import org.apache.fineract.client.services.CashiersApi; |
| import org.apache.fineract.client.services.CentersApi; |
| import org.apache.fineract.client.services.ChargesApi; |
| import org.apache.fineract.client.services.ClientApi; |
| import org.apache.fineract.client.services.ClientChargesApi; |
| import org.apache.fineract.client.services.ClientIdentifierApi; |
| import org.apache.fineract.client.services.ClientTransactionApi; |
| import org.apache.fineract.client.services.ClientsAddressApi; |
| import org.apache.fineract.client.services.CodeValuesApi; |
| import org.apache.fineract.client.services.CodesApi; |
| import org.apache.fineract.client.services.CurrencyApi; |
| import org.apache.fineract.client.services.DataTablesApi; |
| import org.apache.fineract.client.services.DefaultApi; |
| import org.apache.fineract.client.services.DocumentsApiFixed; |
| import org.apache.fineract.client.services.EntityDataTableApi; |
| import org.apache.fineract.client.services.EntityFieldConfigurationApi; |
| import org.apache.fineract.client.services.ExternalServicesApi; |
| import org.apache.fineract.client.services.FetchAuthenticatedUserDetailsApi; |
| import org.apache.fineract.client.services.FixedDepositAccountApi; |
| import org.apache.fineract.client.services.FixedDepositProductApi; |
| import org.apache.fineract.client.services.FloatingRatesApi; |
| import org.apache.fineract.client.services.GeneralLedgerAccountApi; |
| import org.apache.fineract.client.services.GlobalConfigurationApi; |
| import org.apache.fineract.client.services.GroupsApi; |
| import org.apache.fineract.client.services.HolidaysApi; |
| import org.apache.fineract.client.services.HooksApi; |
| import org.apache.fineract.client.services.ImagesApi; |
| import org.apache.fineract.client.services.InterestRateChartApi; |
| import org.apache.fineract.client.services.InterestRateSlabAKAInterestBandsApi; |
| import org.apache.fineract.client.services.JournalEntriesApi; |
| import org.apache.fineract.client.services.ListReportMailingJobHistoryApi; |
| import org.apache.fineract.client.services.LoanChargesApi; |
| import org.apache.fineract.client.services.LoanCollateralApi; |
| import org.apache.fineract.client.services.LoanProductsApi; |
| import org.apache.fineract.client.services.LoanReschedulingApi; |
| import org.apache.fineract.client.services.LoanTransactionsApi; |
| import org.apache.fineract.client.services.LoansApi; |
| import org.apache.fineract.client.services.MakerCheckerOr4EyeFunctionalityApi; |
| import org.apache.fineract.client.services.MappingFinancialActivitiesToAccountsApi; |
| import org.apache.fineract.client.services.MifosxBatchJobsApi; |
| import org.apache.fineract.client.services.MixMappingApi; |
| import org.apache.fineract.client.services.MixReportApi; |
| import org.apache.fineract.client.services.MixTaxonomyApi; |
| import org.apache.fineract.client.services.NotesApi; |
| import org.apache.fineract.client.services.NotificationApi; |
| import org.apache.fineract.client.services.OfficesApi; |
| import org.apache.fineract.client.services.PasswordPreferencesApi; |
| import org.apache.fineract.client.services.PaymentTypeApi; |
| import org.apache.fineract.client.services.PeriodicAccrualAccountingApi; |
| import org.apache.fineract.client.services.PermissionsApi; |
| import org.apache.fineract.client.services.PocketApi; |
| import org.apache.fineract.client.services.ProvisioningCategoryApi; |
| import org.apache.fineract.client.services.ProvisioningCriteriaApi; |
| import org.apache.fineract.client.services.ProvisioningEntriesApi; |
| import org.apache.fineract.client.services.RecurringDepositAccountApi; |
| import org.apache.fineract.client.services.RecurringDepositAccountTransactionsApi; |
| import org.apache.fineract.client.services.RecurringDepositProductApi; |
| import org.apache.fineract.client.services.ReportMailingJobsApi; |
| import org.apache.fineract.client.services.ReportsApi; |
| import org.apache.fineract.client.services.RolesApi; |
| import org.apache.fineract.client.services.RunReportsApi; |
| import org.apache.fineract.client.services.SavingsAccountApi; |
| import org.apache.fineract.client.services.SavingsChargesApi; |
| import org.apache.fineract.client.services.SavingsProductApi; |
| import org.apache.fineract.client.services.SchedulerApi; |
| import org.apache.fineract.client.services.ScoreCardApi; |
| import org.apache.fineract.client.services.SearchApiApi; |
| import org.apache.fineract.client.services.SelfAccountTransferApi; |
| import org.apache.fineract.client.services.SelfAuthenticationApi; |
| import org.apache.fineract.client.services.SelfClientApi; |
| import org.apache.fineract.client.services.SelfDividendApi; |
| import org.apache.fineract.client.services.SelfLoanProductsApi; |
| import org.apache.fineract.client.services.SelfLoansApi; |
| import org.apache.fineract.client.services.SelfRunReportApi; |
| import org.apache.fineract.client.services.SelfSavingsAccountApi; |
| import org.apache.fineract.client.services.SelfScoreCardApi; |
| import org.apache.fineract.client.services.SelfServiceRegistrationApi; |
| import org.apache.fineract.client.services.SelfShareAccountsApi; |
| import org.apache.fineract.client.services.SelfSpmApi; |
| import org.apache.fineract.client.services.SelfThirdPartyTransferApi; |
| import org.apache.fineract.client.services.SelfUserApi; |
| import org.apache.fineract.client.services.SelfUserDetailsApi; |
| import org.apache.fineract.client.services.ShareAccountApi; |
| import org.apache.fineract.client.services.SpmApiLookUpTableApi; |
| import org.apache.fineract.client.services.SpmSurveysApi; |
| import org.apache.fineract.client.services.StaffApi; |
| import org.apache.fineract.client.services.StandingInstructionsApi; |
| import org.apache.fineract.client.services.StandingInstructionsHistoryApi; |
| import org.apache.fineract.client.services.TaxComponentsApi; |
| import org.apache.fineract.client.services.TaxGroupApi; |
| import org.apache.fineract.client.services.TellerCashManagementApi; |
| import org.apache.fineract.client.services.UserGeneratedDocumentsApi; |
| import org.apache.fineract.client.services.UsersApi; |
| import org.apache.fineract.client.services.WorkingDaysApi; |
| import org.apache.fineract.client.util.JSON.GsonCustomConverterFactory; |
| import retrofit2.Retrofit; |
| import retrofit2.converter.scalars.ScalarsConverterFactory; |
| |
| /** |
| * Fineract Client Java SDK API entry point. Use this instead of the {@link ApiClient}. |
| * |
| * @author Michael Vorburger.ch |
| */ |
| public final class FineractClient { |
| |
| /** |
| * Constant to be used in requests where Fineract's API requires a dateFormat to be given. This matches the format |
| * in which LocalDate instances are serialized. (BTW: In a Java client API, it seems weird to have strong LocalDate |
| * (not String) instances, and then have to specify its format, see |
| * https://issues.apache.org/jira/browse/FINERACT-1233.) |
| */ |
| // Matching org.apache.fineract.client.util.JSON.LocalDateTypeAdapter.formatter |
| public static final String DATE_FORMAT = "yyyy-MM-dd"; |
| |
| private final Retrofit retrofit; |
| |
| public final AccountingClosureApi glClosures; |
| public final AccountingRulesApi accountingRules; |
| public final AccountNumberFormatApi accountNumberFormats; |
| public final AccountTransfersApi accountTransfers; |
| public final AdhocQueryApiApi adhocQuery; |
| public final AuditsApi audits; |
| public final AuthenticationHttpBasicApi authentication; |
| public final BatchApiApi batches; |
| public final CacheApi caches; |
| public final CashierJournalsApi cashiersJournal; |
| public final CashiersApi cashiers; |
| public final CentersApi centers; |
| public final ChargesApi charges; |
| public final ClientApi clients; |
| public final ClientChargesApi clientCharges; |
| public final ClientIdentifierApi clientIdentifiers; |
| public final ClientsAddressApi clientAddresses; |
| public final ClientTransactionApi clientTransactions; |
| public final CodesApi codes; |
| public final CodeValuesApi codeValues; |
| public final CurrencyApi currencies; |
| public final DataTablesApi dataTables; |
| public final @Deprecated DefaultApi legacy; // TODO FINERACT-1222 |
| public final DocumentsApiFixed documents; |
| public final EntityDataTableApi entityDatatableChecks; |
| public final EntityFieldConfigurationApi entityFieldConfigurations; |
| public final ExternalServicesApi externalServices; |
| public final FetchAuthenticatedUserDetailsApi userDetails; |
| public final FixedDepositAccountApi fixedDepositAccounts; |
| public final FixedDepositProductApi fixedDepositProducts; |
| public final FloatingRatesApi floatingRates; |
| public final GeneralLedgerAccountApi glAccounts; |
| public final GlobalConfigurationApi globalConfigurations; |
| public final GroupsApi groups; |
| public final HolidaysApi holidays; |
| public final HooksApi hooks; |
| public final ImagesApi images; |
| public final InterestRateChartApi interestRateCharts; |
| public final InterestRateSlabAKAInterestBandsApi interestRateChartLabs; |
| public final JournalEntriesApi journalEntries; |
| public final ListReportMailingJobHistoryApi reportMailings; |
| public final LoanChargesApi loanCharges; |
| public final LoanCollateralApi loanCollaterals; |
| public final LoanProductsApi loanProducts; |
| public final LoanReschedulingApi loanSchedules; |
| public final LoansApi loans; |
| public final LoanTransactionsApi loanTransactions; |
| public final MakerCheckerOr4EyeFunctionalityApi makerCheckers; |
| public final MappingFinancialActivitiesToAccountsApi financialActivyAccountMappings; |
| public final MifosxBatchJobsApi jobs; |
| public final MixMappingApi mixMappings; |
| public final MixReportApi mixReports; |
| public final MixTaxonomyApi mixTaxonomies; |
| public final NotesApi notes; |
| public final NotificationApi notifications; |
| public final OfficesApi offices; |
| public final PasswordPreferencesApi passwordPreferences; |
| public final PaymentTypeApi paymentTypes; |
| public final PeriodicAccrualAccountingApi periodicAccrualAccounting; |
| public final PermissionsApi permissions; |
| public final PocketApi selfPockets; |
| public final ProvisioningCategoryApi provisioningCategories; |
| public final ProvisioningCriteriaApi provisioningCriterias; |
| public final ProvisioningEntriesApi provisioningEntries; |
| public final RecurringDepositAccountApi recurringDepositAccounts; |
| public final RecurringDepositAccountTransactionsApi recurringDepositAccountTransactions; |
| public final RecurringDepositProductApi recurringDepositProducts; |
| public final ReportMailingJobsApi reportMailingJobs; |
| public final ReportsApi reports; |
| public final RolesApi roles; |
| public final RunReportsApi reportsRun; |
| public final SavingsAccountApi savingsAccounts; |
| public final SavingsChargesApi savingsAccountCharges; |
| public final SavingsProductApi savingsProducts; |
| public final SchedulerApi jobsScheduler; |
| public final ScoreCardApi surveyScorecards; |
| public final SearchApiApi search; |
| public final SelfAccountTransferApi selfAccountTransfers; |
| public final SelfAuthenticationApi selfAuthentication; |
| public final SelfClientApi selfClients; |
| public final SelfDividendApi selfShareProducts; |
| public final SelfLoanProductsApi selfLoanProducts; |
| public final SelfLoansApi selfLoans; |
| public final SelfRunReportApi selfReportsRun; |
| public final SelfSavingsAccountApi selfSavingsAccounts; |
| public final SelfScoreCardApi selfSurveyScorecards; |
| public final SelfServiceRegistrationApi selfRegistration; |
| public final SelfShareAccountsApi selfShareAccounts; |
| public final SelfSpmApi selfSurveys; |
| public final SelfThirdPartyTransferApi selfThirdPartyBeneficiaries; |
| public final SelfUserApi selfUser; |
| public final SelfUserDetailsApi selfUserDetails; |
| public final ShareAccountApi shareAccounts; |
| public final SpmApiLookUpTableApi surveyLookupTables; |
| public final SpmSurveysApi surveys; |
| public final StaffApi staff; |
| public final StandingInstructionsApi standingInstructions; |
| public final StandingInstructionsHistoryApi standingInstructionsHistory; |
| public final TaxComponentsApi taxComponents; |
| public final TaxGroupApi taxGroups; |
| public final TellerCashManagementApi tellers; |
| public final UserGeneratedDocumentsApi templates; |
| public final UsersApi users; |
| public final WorkingDaysApi workingDays; |
| |
| private FineractClient(Retrofit retrofit) { |
| this.retrofit = retrofit; |
| |
| glClosures = retrofit.create(AccountingClosureApi.class); |
| accountingRules = retrofit.create(AccountingRulesApi.class); |
| accountNumberFormats = retrofit.create(AccountNumberFormatApi.class); |
| accountTransfers = retrofit.create(AccountTransfersApi.class); |
| adhocQuery = retrofit.create(AdhocQueryApiApi.class); |
| audits = retrofit.create(AuditsApi.class); |
| authentication = retrofit.create(AuthenticationHttpBasicApi.class); |
| batches = retrofit.create(BatchApiApi.class); |
| caches = retrofit.create(CacheApi.class); |
| cashiersJournal = retrofit.create(CashierJournalsApi.class); |
| cashiers = retrofit.create(CashiersApi.class); |
| centers = retrofit.create(CentersApi.class); |
| charges = retrofit.create(ChargesApi.class); |
| clients = retrofit.create(ClientApi.class); |
| clientCharges = retrofit.create(ClientChargesApi.class); |
| clientIdentifiers = retrofit.create(ClientIdentifierApi.class); |
| clientAddresses = retrofit.create(ClientsAddressApi.class); |
| clientTransactions = retrofit.create(ClientTransactionApi.class); |
| codes = retrofit.create(CodesApi.class); |
| codeValues = retrofit.create(CodeValuesApi.class); |
| currencies = retrofit.create(CurrencyApi.class); |
| dataTables = retrofit.create(DataTablesApi.class); |
| legacy = retrofit.create(DefaultApi.class); |
| documents = retrofit.create(DocumentsApiFixed.class); |
| entityDatatableChecks = retrofit.create(EntityDataTableApi.class); |
| entityFieldConfigurations = retrofit.create(EntityFieldConfigurationApi.class); |
| externalServices = retrofit.create(ExternalServicesApi.class); |
| userDetails = retrofit.create(FetchAuthenticatedUserDetailsApi.class); |
| fixedDepositAccounts = retrofit.create(FixedDepositAccountApi.class); |
| fixedDepositProducts = retrofit.create(FixedDepositProductApi.class); |
| floatingRates = retrofit.create(FloatingRatesApi.class); |
| glAccounts = retrofit.create(GeneralLedgerAccountApi.class); |
| globalConfigurations = retrofit.create(GlobalConfigurationApi.class); |
| groups = retrofit.create(GroupsApi.class); |
| holidays = retrofit.create(HolidaysApi.class); |
| hooks = retrofit.create(HooksApi.class); |
| images = retrofit.create(ImagesApi.class); |
| interestRateCharts = retrofit.create(InterestRateChartApi.class); |
| interestRateChartLabs = retrofit.create(InterestRateSlabAKAInterestBandsApi.class); |
| journalEntries = retrofit.create(JournalEntriesApi.class); |
| reportMailings = retrofit.create(ListReportMailingJobHistoryApi.class); |
| loanCharges = retrofit.create(LoanChargesApi.class); |
| loanCollaterals = retrofit.create(LoanCollateralApi.class); |
| loanProducts = retrofit.create(LoanProductsApi.class); |
| loanSchedules = retrofit.create(LoanReschedulingApi.class); |
| loans = retrofit.create(LoansApi.class); |
| loanTransactions = retrofit.create(LoanTransactionsApi.class); |
| makerCheckers = retrofit.create(MakerCheckerOr4EyeFunctionalityApi.class); |
| financialActivyAccountMappings = retrofit.create(MappingFinancialActivitiesToAccountsApi.class); |
| jobs = retrofit.create(MifosxBatchJobsApi.class); |
| mixMappings = retrofit.create(MixMappingApi.class); |
| mixReports = retrofit.create(MixReportApi.class); |
| mixTaxonomies = retrofit.create(MixTaxonomyApi.class); |
| notes = retrofit.create(NotesApi.class); |
| notifications = retrofit.create(NotificationApi.class); |
| offices = retrofit.create(OfficesApi.class); |
| passwordPreferences = retrofit.create(PasswordPreferencesApi.class); |
| paymentTypes = retrofit.create(PaymentTypeApi.class); |
| periodicAccrualAccounting = retrofit.create(PeriodicAccrualAccountingApi.class); |
| permissions = retrofit.create(PermissionsApi.class); |
| selfPockets = retrofit.create(PocketApi.class); |
| provisioningCategories = retrofit.create(ProvisioningCategoryApi.class); |
| provisioningCriterias = retrofit.create(ProvisioningCriteriaApi.class); |
| provisioningEntries = retrofit.create(ProvisioningEntriesApi.class); |
| recurringDepositAccounts = retrofit.create(RecurringDepositAccountApi.class); |
| recurringDepositAccountTransactions = retrofit.create(RecurringDepositAccountTransactionsApi.class); |
| recurringDepositProducts = retrofit.create(RecurringDepositProductApi.class); |
| reportMailingJobs = retrofit.create(ReportMailingJobsApi.class); |
| reports = retrofit.create(ReportsApi.class); |
| roles = retrofit.create(RolesApi.class); |
| reportsRun = retrofit.create(RunReportsApi.class); |
| savingsAccounts = retrofit.create(SavingsAccountApi.class); |
| savingsAccountCharges = retrofit.create(SavingsChargesApi.class); |
| savingsProducts = retrofit.create(SavingsProductApi.class); |
| jobsScheduler = retrofit.create(SchedulerApi.class); |
| surveyScorecards = retrofit.create(ScoreCardApi.class); |
| search = retrofit.create(SearchApiApi.class); |
| selfAccountTransfers = retrofit.create(SelfAccountTransferApi.class); |
| selfAuthentication = retrofit.create(SelfAuthenticationApi.class); |
| selfClients = retrofit.create(SelfClientApi.class); |
| selfShareProducts = retrofit.create(SelfDividendApi.class); |
| selfLoanProducts = retrofit.create(SelfLoanProductsApi.class); |
| selfLoans = retrofit.create(SelfLoansApi.class); |
| selfReportsRun = retrofit.create(SelfRunReportApi.class); |
| selfSavingsAccounts = retrofit.create(SelfSavingsAccountApi.class); |
| selfSurveyScorecards = retrofit.create(SelfScoreCardApi.class); |
| selfRegistration = retrofit.create(SelfServiceRegistrationApi.class); |
| selfShareAccounts = retrofit.create(SelfShareAccountsApi.class); |
| selfSurveys = retrofit.create(SelfSpmApi.class); |
| selfThirdPartyBeneficiaries = retrofit.create(SelfThirdPartyTransferApi.class); |
| selfUser = retrofit.create(SelfUserApi.class); |
| selfUserDetails = retrofit.create(SelfUserDetailsApi.class); |
| shareAccounts = retrofit.create(ShareAccountApi.class); |
| surveyLookupTables = retrofit.create(SpmApiLookUpTableApi.class); |
| surveys = retrofit.create(SpmSurveysApi.class); |
| staff = retrofit.create(StaffApi.class); |
| standingInstructions = retrofit.create(StandingInstructionsApi.class); |
| standingInstructionsHistory = retrofit.create(StandingInstructionsHistoryApi.class); |
| taxComponents = retrofit.create(TaxComponentsApi.class); |
| taxGroups = retrofit.create(TaxGroupApi.class); |
| tellers = retrofit.create(TellerCashManagementApi.class); |
| templates = retrofit.create(UserGeneratedDocumentsApi.class); |
| users = retrofit.create(UsersApi.class); |
| workingDays = retrofit.create(WorkingDaysApi.class); |
| } |
| |
| public static Builder builder() { |
| return new Builder(); |
| } |
| |
| /** |
| * Create an implementation of the API endpoints defined by the {@code service} interface, using |
| * {@link Retrofit#create(Class)}. This method is typically not required to be invoked for standard API usage, but |
| * can be a handy back door for non-trivial advanced customizations of the API client if you have extended Fineract |
| * with your own REST APIs. |
| */ |
| public <S> S createService(Class<S> serviceClass) { |
| return retrofit.create(serviceClass); |
| } |
| |
| public static final class Builder { |
| |
| private final JSON json = new JSON(); |
| private final OkHttpClient.Builder okBuilder = new OkHttpClient.Builder(); |
| private final Retrofit.Builder retrofitBuilder = new Retrofit.Builder().addConverterFactory(ScalarsConverterFactory.create()) |
| .addConverterFactory(GsonCustomConverterFactory.create(json.getGson())); |
| |
| private String baseURL; |
| private String tenant; |
| private String username; |
| private String password; |
| |
| private Builder() {} |
| |
| public Builder baseURL(String baseURL) { |
| this.baseURL = baseURL; |
| return this; |
| } |
| |
| public Builder tenant(String tenant) { |
| this.tenant = tenant; |
| return this; |
| } |
| |
| public Builder basicAuth(String username, String password) { |
| this.username = username; |
| this.password = password; |
| return this; |
| } |
| |
| public Builder logging(Level level) { |
| HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); |
| logging.setLevel(level); |
| okBuilder.addInterceptor(logging); |
| return this; |
| } |
| |
| /** |
| * Skip Fineract API host SSL certificate verification. DO NOT USE THIS when invoking a production server's API! |
| * This is intended for https://localhost:8443/ testing of development servers with self-signed certificates, |
| * only. If you do not understand what this is, do not use it. You WILL cause a security issue in your |
| * application due to the possibility of a "man in the middle" attack when this is enabled. |
| */ |
| @SuppressWarnings("unused") |
| public Builder insecure(boolean insecure) { |
| // Nota bene: Similar code to this is also in Fineract Provider's |
| // org.apache.fineract.infrastructure.hooks.processor.ProcessorHelper |
| if (insecure) { |
| HostnameVerifier insecureHostnameVerifier = (hostname, session) -> true; |
| okBuilder.hostnameVerifier(insecureHostnameVerifier); |
| |
| try { |
| X509TrustManager insecureX509TrustManager = new X509TrustManager() { |
| |
| @Override |
| public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {} |
| |
| @Override |
| public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {} |
| |
| @Override |
| public X509Certificate[] getAcceptedIssuers() { |
| return new X509Certificate[] {}; |
| } |
| }; |
| |
| SSLContext sslContext = SSLContext.getInstance("SSL"); |
| sslContext.init(null, new TrustManager[] { insecureX509TrustManager }, new SecureRandom()); |
| SSLSocketFactory insecureSslSocketFactory = sslContext.getSocketFactory(); |
| |
| okBuilder.sslSocketFactory(insecureSslSocketFactory, insecureX509TrustManager); |
| } catch (NoSuchAlgorithmException | KeyManagementException e) { |
| throw new IllegalStateException("insecure() SSL configuration failed", e); |
| } |
| } |
| return this; |
| } |
| |
| public FineractClient build() { |
| // URL |
| retrofitBuilder.baseUrl(has("baseURL", baseURL)); |
| |
| // Tenant |
| ApiKeyAuth tenantAuth = new ApiKeyAuth("header", "fineract-platform-tenantid"); |
| tenantAuth.setApiKey(has("tenant", tenant)); |
| okBuilder.addInterceptor(tenantAuth); |
| |
| // BASIC Auth |
| HttpBasicAuth basicAuth = new HttpBasicAuth(); |
| basicAuth.setCredentials(has("username", username), has("password", password)); |
| okBuilder.addInterceptor(basicAuth); |
| |
| retrofitBuilder.client(okBuilder.build()); |
| |
| return new FineractClient(retrofitBuilder.build()); |
| } |
| |
| /** |
| * Obtain the internal Retrofit Builder. This method is typically not required to be invoked for simple API |
| * usages, but can be a handy back door for non-trivial advanced customizations of the API client. |
| * |
| * @return the {@link ApiClient} which {@link #build()} will use. |
| */ |
| public retrofit2.Retrofit.Builder getRetrofitBuilder() { |
| return retrofitBuilder; |
| } |
| |
| /** |
| * Obtain the internal OkHttp Builder. This method is typically not required to be invoked for simple API |
| * usages, but can be a handy back door for non-trivial advanced customizations of the API client. |
| * |
| * @return the {@link ApiClient} which {@link #build()} will use. |
| */ |
| public okhttp3.OkHttpClient.Builder getOkBuilder() { |
| return okBuilder; |
| } |
| |
| private <T> T has(String propertyName, T value) throws IllegalStateException { |
| if (value == null) { |
| throw new IllegalStateException("Must call " + propertyName + "(...) to create valid Builder"); |
| } |
| return value; |
| } |
| } |
| } |