I ran into this while testing out
<https://github.com/immich-app/immich/pull/19830>. When I add, change,
or remove a client certificate under Immich's advanced settings, the
change wouldn't take effect until some mysterious point in the future.
For example:
1. Add a client certificate. It doesn't get used.
2. Remove certificate. *Now* the client certificate from step 1) is used.
3. Restart application. Now no client certificate is used.
This all boils down to some missing `await`s. The user would change the
cert, and we'd start asynchronously saving it to the store, and while
the save is still happening, [`HttpSSLOptions` pulls the "old" value out of
`SSLClientCertStoreVal`](https://github.com/immich-app/immich/blob/v1.136.0/mobile/lib/utils/http_ssl_options.dart#L30).
With the appropriate `await`s, this behaves much more sanely.
* Add class to apply SSL options
* Apply client certificate for native Android code
* Refactor self-signed check
* Allow self-signed certificates
* Fix Dart analysis
* Add HostnameVerifier
Android explicitly does NOT check the Common Name of a certificate,
only the Subject Alt Names. Chances are that someone who self-signs a
certificate doesn't go through the extra steps to add a SAN, and in
that case the connection would be prevented by the HostnameVerifier
even thought the TrustManager was fine with the certificate itself.
* Rename parameter like in Dart
* Fix NPE
* Catch all native errors in HttpSSLOptionsPlugin
* Workaround for too early onChanged() callback
* Fix formatting
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>
* feat(mobile): add support for material themes
Added support for custom theming and updated all elements accordingly.
* fix(mobile): Restored immich brand colors to default theme
* fix(mobile): make ListTile titles bold in settings main page
* feat(mobile): update bottom nav and appbar colors
* small tweaks
---------
Co-authored-by: Alex <alex.tran1502@gmail.com>