Add reminder for mandatory client cert password

This commit is contained in:
Niko Diamadis
2024-04-24 00:21:31 +02:00
parent 2d70b94eb7
commit 11448f7d2c
2 changed files with 29 additions and 4 deletions

View File

@@ -2,7 +2,10 @@ package com.github.gotify.login
import android.content.Context import android.content.Context
import android.view.LayoutInflater import android.view.LayoutInflater
import android.widget.Button
import android.widget.CompoundButton import android.widget.CompoundButton
import androidx.appcompat.app.AlertDialog
import androidx.core.widget.doOnTextChanged
import com.github.gotify.R import com.github.gotify.R
import com.github.gotify.databinding.AdvancedSettingsDialogBinding import com.github.gotify.databinding.AdvancedSettingsDialogBinding
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
@@ -11,6 +14,8 @@ internal class AdvancedDialog(
private val context: Context, private val context: Context,
private val layoutInflater: LayoutInflater private val layoutInflater: LayoutInflater
) { ) {
private lateinit var dialog: AlertDialog
private lateinit var dialogDoneButton: Button
private lateinit var binding: AdvancedSettingsDialogBinding private lateinit var binding: AdvancedSettingsDialogBinding
private var onCheckedChangeListener: CompoundButton.OnCheckedChangeListener? = null private var onCheckedChangeListener: CompoundButton.OnCheckedChangeListener? = null
private lateinit var onClickSelectCaCertificate: Runnable private lateinit var onClickSelectCaCertificate: Runnable
@@ -66,22 +71,27 @@ internal class AdvancedDialog(
} else { } else {
showRemoveCaCertificate(caCertCN!!) showRemoveCaCertificate(caCertCN!!)
} }
if (!clientCertPassword.isNullOrEmpty()) {
binding.clientCertPasswordEdittext.setText(clientCertPassword)
}
if (clientCertPath == null) { if (clientCertPath == null) {
showSelectClientCertificate() showSelectClientCertificate()
} else { } else {
showRemoveClientCertificate() showRemoveClientCertificate()
} }
if (!clientCertPassword.isNullOrEmpty()) { binding.clientCertPasswordEdittext.doOnTextChanged { _, _, _, _ ->
binding.clientCertPasswordEdittext.setText(clientCertPassword) showPasswordMissing(binding.clientCertPasswordEdittext.text.toString().isEmpty())
} }
MaterialAlertDialogBuilder(context) dialog = MaterialAlertDialogBuilder(context)
.setView(binding.root) .setView(binding.root)
.setTitle(R.string.advanced_settings) .setTitle(R.string.advanced_settings)
.setPositiveButton(context.getString(R.string.done), null) .setPositiveButton(context.getString(R.string.done), null)
.setOnDismissListener { .setOnDismissListener {
onClose(binding.clientCertPasswordEdittext.text.toString()) onClose(binding.clientCertPasswordEdittext.text.toString())
} }
.show() .create()
dialog.show()
dialogDoneButton = dialog.getButton(AlertDialog.BUTTON_POSITIVE)
return this return this
} }
@@ -104,6 +114,7 @@ internal class AdvancedDialog(
binding.toggleClientCert.setText(R.string.select_client_certificate) binding.toggleClientCert.setText(R.string.select_client_certificate)
binding.toggleClientCert.setOnClickListener { onClickSelectClientCertificate.run() } binding.toggleClientCert.setOnClickListener { onClickSelectClientCertificate.run() }
binding.selectedClientCert.setText(R.string.no_certificate_selected) binding.selectedClientCert.setText(R.string.no_certificate_selected)
showPasswordMissing(false)
} }
fun showRemoveClientCertificate() { fun showRemoveClientCertificate() {
@@ -113,5 +124,18 @@ internal class AdvancedDialog(
onClickRemoveClientCertificate.run() onClickRemoveClientCertificate.run()
} }
binding.selectedClientCert.setText(R.string.certificate_found) binding.selectedClientCert.setText(R.string.certificate_found)
showPasswordMissing(binding.clientCertPasswordEdittext.text.toString().isEmpty())
}
private fun showPasswordMissing(toggled: Boolean) {
if (::dialogDoneButton.isInitialized) {
dialogDoneButton.isEnabled = !toggled
}
val error = if (toggled) {
context.getString(R.string.client_cert_password_missing)
} else {
null
}
binding.clientCertPassword.error = error
} }
} }

View File

@@ -44,6 +44,7 @@
<string name="select_ca_file">Select a CA Certificate File</string> <string name="select_ca_file">Select a CA Certificate File</string>
<string name="select_client_file">Select a Client Certificate File</string> <string name="select_client_file">Select a Client Certificate File</string>
<string name="client_cert_password">Certificate Password</string> <string name="client_cert_password">Certificate Password</string>
<string name="client_cert_password_missing">Password required</string>
<string name="please_install_file_browser">Please install a file browser</string> <string name="please_install_file_browser">Please install a file browser</string>
<string name="select_ca_failed">Failed to read CA cert: %s</string> <string name="select_ca_failed">Failed to read CA cert: %s</string>
<string name="select_client_failed">Failed to read client cert: %s</string> <string name="select_client_failed">Failed to read client cert: %s</string>