Community Health Toolkit

Running Core CHT Framework GitHub Authentication

Derick
We have managed to push the forms, the app loads but the CIF form is not loading. I’m also seeing a lot of browser errors when loading the app using the IP, it takes many attempts to load

Finally, we have seen that some fields are not being pushed to the back-end i.e. ID and gender, want to review the form and see if we can identify the problem

Hey @oyierphil can you share the browser console errors? Do you mean that the ID and gender fields do not appear in the resulting JSON document?

Our CIF form is not loading, even after creating the hierarchies and the offices

Good evening
We have logged in as RTO, can see the registration form but cant load the CIF form as below
What could be the challenge



Here are the console errors of the CIF form loading issue

Hey @oyierphil, looking at the screenshot shared by @antony, there is a logic error on the calculation if(true, format-date-time(now), '%Y%m%d%H%M%S'). Did you mean format-date-time(now(), '%Y%m%d%H%M%S')? Try that.

In addition to that, another concern raised is that contacts you create do not have the name showing neither does the age show. CHT defaults to the name field for display. Ensure you have that field in your contact form. The same applies to age that is calculated based on the default date_of_birth field. Ensure you include it in your form, and age will display as expected.

Kitsao
Our CIF form doesn’t pick the ID number, age and sex, and not sure why, we added the age and date fields to the form, thus the registered cases cant be seen, although you see placeholders for the same

Thus after registering a patient, we see placeholders with no data, and if you select any of the cases, we cant fill the CIF form doesn’t load


Any ideas on why the summary doesn’t pick the necessary fields to pass to the CIF form?

Hey @oyierphil, can you share links to your forms for a closer look?

Update
We managed to have a technical working session on 08/10/2021; during the session the VisorTech Solutions team supported the JKUAT team to fix most of the tech support issues that the JKUAT team had logged on the CHT forum. Thanks VisorTech solutions team (@vchelule and @KiharaSimon) for supporting the JKUAT team to fix the issues. @oyierphil I hope your team should be able to train the users this week.

1 Like

Dear Anthony
Yes, we actually trained on Friday and yesterday and have received feedback on the tool. Making the final corrections on the forms today, then moving to final testing and configuration of the mobile phones. We appreciate the support
Providing the URL of the server, the domain name at the custom menu option on the CHT Android App brings the error ‘Unable to contact Server’, trying to figure it out so that we load the app on the tablets today in readiness for the pilot study, will appreciate any suggestions

This might be related to not having a proper SSL setup. What errors do you see?

We have the domain and SSL setup done (https://dharc-medic.jkuat.ac.ke), but it says ‘server not found’

What says ‘server not found’? Are you able to share screenshots or logs?

This is from my handset where I downloaded the Medic app from app store, then selected the custom option and provided the URL. Let me run from Android Studio on my machine and use an emulator to see the difference

Running adb logcat | grep -i MedicMobile when the phone is connected to a computer (with usb debugging enabled)

10-12 13:44:33.623 27370 32596 D MedicMobile: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.SSLUtils.toSSLHandshakeException(SSLUtils.java:362)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngine.convertException(ConscryptEngine.java:1134)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngine.readPlaintextData(ConscryptEngine.java:1089)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:876)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:747)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngine.unwrap(ConscryptEngine.java:712)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.processDataFromSocket(ConscryptEngineSocket.java:849)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngineSocket$SSLInputStream.access$100(ConscryptEngineSocket.java:722)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngineSocket.doHandshake(ConscryptEngineSocket.java:238)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngineSocket.startHandshake(ConscryptEngineSocket.java:217)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.io.RealConnection.connectTls(RealConnection.java:196)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.io.RealConnection.connectSocket(RealConnection.java:153)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.io.RealConnection.connect(RealConnection.java:116)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.http.StreamAllocation.findConnection(StreamAllocation.java:186)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:128)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:289)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:232)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:465)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:411)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:542)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getResponseCode(DelegatingHttpsURLConnection.java:106)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:30)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at org.medicmobile.webapp.mobile.SimpleJsonClient2.get(SimpleJsonClient2.java:50)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at org.medicmobile.webapp.mobile.SimpleJsonClient2.get(SimpleJsonClient2.java:38)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at org.medicmobile.webapp.mobile.AppUrlVerifier.verify(AppUrlVerifier.java:23)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at org.medicmobile.webapp.mobile.SettingsDialogActivity$AppUrlVerificationTask.doInBackground(SettingsDialogActivity.java:44)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at org.medicmobile.webapp.mobile.SettingsDialogActivity$AppUrlVerificationTask.doInBackground(SettingsDialogActivity.java:37)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at android.os.AsyncTask$3.call(AsyncTask.java:394)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:305)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at java.lang.Thread.run(Thread.java:923)
10-12 13:44:33.623 27370 32596 D MedicMobile: Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:661)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:510)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:428)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:356)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)
10-12 13:44:33.623 27370 32596 D MedicMobile: 	at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:90)
10-12 13:44:33.624 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngineSocket$2.checkServerTrusted(ConscryptEngineSocket.java:161)
10-12 13:44:33.624 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:250)
10-12 13:44:33.624 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngine.verifyCertificateChain(ConscryptEngine.java:1644)
10-12 13:44:33.624 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.NativeCrypto.ENGINE_SSL_read_direct(Native Method)
10-12 13:44:33.624 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.NativeSsl.readDirectByteBuffer(NativeSsl.java:568)
10-12 13:44:33.624 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngine.readPlaintextDataDirect(ConscryptEngine.java:1095)
10-12 13:44:33.624 27370 32596 D MedicMobile: 	at com.android.org.conscrypt.ConscryptEngine.readPlaintextData(ConscryptEngine.java:1079)
10-12 13:44:33.624 27370 32596 D MedicMobile: 	... 31 more

This is definitely points to an SSL issue. Running an SSL test on the domain also reveals the same - SSL Server Test: dharc-medic.jkuat.ac.ke (Powered by Qualys SSL Labs) (Look under ‘Additional Certificates’)

I have tried to run the above command and get the error below

Exploring the source of the error as we sort out the SSL errors

Android debugging assumes the phone is connected locally. If you are running the command on the server, it will not work. Android Debug Bridge (adb)  |  Android Developers

I have run a test of the SSL chain and I realise that although your SSL cert is valid, you have chained the SSL certificate in the wrong way. SSL labs reports that here.


The right SSL chain you should be using is this. Please update your SSL chain on the server and let us know.

Derick
The issue was SSH configuration, medic-os uses the default ssh certificates, and we finally replaced with our own, we now can access the app on the phone