Change intent challenge recognition

This commit is contained in:
J-Jamet
2022-05-30 18:19:01 +02:00
parent 597f52799d
commit 647e3f9383
3 changed files with 29 additions and 17 deletions

View File

@@ -39,6 +39,7 @@ class UnderDevelopmentFeatureDialogFragment : DialogFragment() {
val builder = AlertDialog.Builder(activity)
val stringBuilder = SpannableStringBuilder()
/*
if (UriUtil.contributingUser(activity)) {
stringBuilder.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_thanks), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_rose), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
@@ -46,6 +47,7 @@ class UnderDevelopmentFeatureDialogFragment : DialogFragment() {
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_upgrade), HtmlCompat.FROM_HTML_MODE_LEGACY)).append(" ")
builder.setPositiveButton(android.R.string.ok) { _, _ -> dismiss() }
} else {
*/
stringBuilder.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature), HtmlCompat.FROM_HTML_MODE_LEGACY)).append("\n\n")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_contibute), HtmlCompat.FROM_HTML_MODE_LEGACY)).append(" ")
.append(HtmlCompat.fromHtml(getString(R.string.html_text_dev_feature_encourage), HtmlCompat.FROM_HTML_MODE_LEGACY))
@@ -53,7 +55,7 @@ class UnderDevelopmentFeatureDialogFragment : DialogFragment() {
UriUtil.gotoUrl(requireContext(), R.string.contribution_url)
}
builder.setNegativeButton(android.R.string.cancel) { _, _ -> dismiss() }
}
//}
builder.setMessage(stringBuilder)
// Create the AlertDialog object and return it
return builder.create()

View File

@@ -13,6 +13,7 @@ import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.lifecycle.lifecycleScope
import com.kunzisoft.keepass.R
import com.kunzisoft.keepass.activities.dialogs.UnderDevelopmentFeatureDialogFragment
import com.kunzisoft.keepass.utils.UriUtil
import kotlinx.coroutines.launch
@@ -37,8 +38,8 @@ class HardwareKeyResponseHelper {
extra: Bundle?) -> Unit) {
val resultCallback = ActivityResultCallback<ActivityResult> { result ->
if (result.resultCode == Activity.RESULT_OK) {
val challengeResponse: ByteArray? = result.data?.getByteArrayExtra("response")
Log.d(TAG, "Response form challenge : " + challengeResponse.contentToString())
val challengeResponse: ByteArray? = result.data?.getByteArrayExtra(HARDWARE_KEY_RESPONSE_KEY)
Log.d(TAG, "Response form challenge")
onChallengeResponded.invoke(challengeResponse,
result.data?.getBundleExtra(EXTRA_BUNDLE_KEY))
} else {
@@ -64,7 +65,7 @@ class HardwareKeyResponseHelper {
fun launchChallengeForResponse(hardwareKey: HardwareKey, seed: ByteArray?) {
when (hardwareKey) {
HardwareKey.FIDO2_SECRET -> {
// TODO FIDO2
// TODO FIDO2 under development
throw Exception("FIDO2 not implemented")
}
HardwareKey.CHALLENGE_RESPONSE_YUBIKEY -> {
@@ -76,10 +77,12 @@ class HardwareKeyResponseHelper {
challenge.fill(32, 32, 64)
}
// Send to the driver
getChallengeResponseResultLauncher!!.launch(Intent(YKDROID_CHALLENGE_RESPONSE_INTENT).apply {
putExtra(YKDROID_SEED_KEY, challenge)
})
Log.d(TAG, "Challenge sent : " + challenge.contentToString())
getChallengeResponseResultLauncher!!.launch(
Intent(YUBIKEY_CHALLENGE_RESPONSE_INTENT).apply {
putExtra(HARDWARE_KEY_CHALLENGE_KEY, challenge)
}
)
Log.d(TAG, "Challenge sent")
}
}
}
@@ -87,10 +90,11 @@ class HardwareKeyResponseHelper {
companion object {
private val TAG = HardwareKeyResponseHelper::class.java.simpleName
private const val YKDROID_PACKAGE = "net.pp3345.ykdroid"
private const val YKDROID_CHALLENGE_RESPONSE_INTENT =
"$YKDROID_PACKAGE.intent.action.CHALLENGE_RESPONSE"
private const val YKDROID_SEED_KEY = "challenge"
private const val YUBIKEY_CHALLENGE_RESPONSE_INTENT =
"net.pp3345.ykdroid.intent.action.CHALLENGE_RESPONSE"
// TODO Change to a generic "android.yubikey.intent.action.CHALLENGE_RESPONSE"
private const val HARDWARE_KEY_CHALLENGE_KEY = "challenge"
private const val HARDWARE_KEY_RESPONSE_KEY = "response"
private const val EXTRA_BUNDLE_KEY = "EXTRA_BUNDLE_KEY"
fun isHardwareKeyAvailable(
@@ -100,14 +104,20 @@ class HardwareKeyResponseHelper {
): Boolean {
return when (hardwareKey) {
HardwareKey.FIDO2_SECRET -> {
// TODO FIDO2
// TODO FIDO2 under development
if (showDialog)
showHardwareKeyDriverNeeded(activity, hardwareKey)
UnderDevelopmentFeatureDialogFragment()
.show(activity.supportFragmentManager, "underDevFeatureDialog")
false
}
HardwareKey.CHALLENGE_RESPONSE_YUBIKEY -> {
// TODO (UriUtil.isExternalAppInstalled(activity, KEEPASSDX_PRO_PACKAGE)
UriUtil.isExternalAppInstalled(activity, YKDROID_PACKAGE)
// Check available intent
val yubikeyDriverAvailable =
Intent(YUBIKEY_CHALLENGE_RESPONSE_INTENT)
.resolveActivity(activity.packageManager) != null
if (showDialog && !yubikeyDriverAvailable)
showHardwareKeyDriverNeeded(activity, hardwareKey)
yubikeyDriverAvailable
}
}
}

View File

@@ -31,7 +31,7 @@
<string name="app_name_part3" translatable="false">Pro</string>
<string name="app_pro_url" translatable="false">https://play.google.com/store/apps/details?id=com.kunzisoft.keepass.pro</string>
<string name="contribution_url" translatable="false">https://www.keepassdx.com/contribution</string>
<string name="contribution_url" translatable="false">https://www.keepassdx.com/#donation</string>
<string name="homepage_url" translatable="false">https://www.keepassdx.com</string>
<string name="external_icon_url" translatable="false">https://www.keepassdx.com/#icons</string>
<string name="issues_url" translatable="false">https://github.com/Kunzisoft/KeePassDX/issues</string>