Add reminder for mandatory client cert password
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user