mirror of
https://github.com/status-im/keycard-connect.git
synced 2025-02-27 18:10:28 +00:00
add missing commands
This commit is contained in:
parent
eabb16ecc5
commit
84fb20bab9
@ -17,6 +17,8 @@
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity android:name=".ui.ChangePairingPasswordActivity"></activity>
|
||||
<activity android:name=".ui.ChangePUKActivity" />
|
||||
<activity android:name=".ui.ShowMnemonicActivity" />
|
||||
<activity android:name=".ui.LoadKeyActivity" />
|
||||
<activity android:name=".ui.SignTransactionActivity" />
|
||||
|
@ -1,8 +1,6 @@
|
||||
package im.status.keycard.connect.card
|
||||
|
||||
import im.status.keycard.connect.Registry
|
||||
import java.io.IOException
|
||||
import java.lang.Exception
|
||||
|
||||
class ChangePINCommand(private val newPIN: String) : CardCommand {
|
||||
//TODO: like for the PINCache, no strings should be used here
|
||||
|
@ -0,0 +1,14 @@
|
||||
package im.status.keycard.connect.card
|
||||
|
||||
import im.status.keycard.connect.Registry
|
||||
import java.io.IOException
|
||||
import java.lang.Exception
|
||||
|
||||
class ChangePUKCommand(private val newPUK: String) : CardCommand {
|
||||
//TODO: like for the PINCache, no strings should be used here
|
||||
override fun run(context: CardScriptExecutor.ScriptContext): CardCommand.Result {
|
||||
return runOnCard {
|
||||
context.cmdSet.changePUK(newPUK).checkOK()
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package im.status.keycard.connect.card
|
||||
|
||||
class ChangePairingPasswordCommand(private val pairingPassword: String) : CardCommand {
|
||||
override fun run(context: CardScriptExecutor.ScriptContext): CardCommand.Result {
|
||||
return runOnCard {
|
||||
context.cmdSet.changePairingPassword(pairingPassword).checkOK()
|
||||
}
|
||||
}
|
||||
}
|
@ -4,8 +4,6 @@ import im.status.keycard.applet.BIP32KeyPair
|
||||
import im.status.keycard.applet.KeyPath
|
||||
import im.status.keycard.applet.KeycardCommandSet
|
||||
import im.status.keycard.io.APDUResponse
|
||||
import java.io.IOException
|
||||
import java.lang.Exception
|
||||
|
||||
class ExportKeyCommand(private val listener: Listener, private val path: String? = null, private val makeCurrent: Boolean = true, private val publicOnly: Boolean = true) : CardCommand {
|
||||
interface Listener {
|
||||
|
@ -7,8 +7,6 @@ import im.status.keycard.applet.Mnemonic
|
||||
import im.status.keycard.connect.data.*
|
||||
import im.status.keycard.connect.ui.LoadKeyActivity
|
||||
import im.status.keycard.connect.ui.ShowMnemonicActivity
|
||||
import java.io.IOException
|
||||
import java.lang.Exception
|
||||
|
||||
class LoadKeyCommand(private var loadType: Int = LOAD_NONE, private var mnemonic: String? = null) : CardCommand {
|
||||
private fun promptKey(activity: Activity) : CardCommand.Result {
|
||||
|
@ -0,0 +1,9 @@
|
||||
package im.status.keycard.connect.card
|
||||
|
||||
class RemoveKeyCommand() : CardCommand {
|
||||
override fun run(context: CardScriptExecutor.ScriptContext): CardCommand.Result {
|
||||
return runOnCard {
|
||||
context.cmdSet.removeKey().checkOK()
|
||||
}
|
||||
}
|
||||
}
|
@ -1,8 +1,5 @@
|
||||
package im.status.keycard.connect.card
|
||||
|
||||
import java.io.IOException
|
||||
import java.lang.Exception
|
||||
|
||||
class SelectCommand : CardCommand {
|
||||
override fun run(context: CardScriptExecutor.ScriptContext): CardCommand.Result {
|
||||
//TODO: handle not-installed-applet/not-a-keycard
|
||||
|
@ -4,8 +4,6 @@ import im.status.keycard.applet.KeyPath
|
||||
import im.status.keycard.applet.KeycardCommandSet
|
||||
import im.status.keycard.applet.RecoverableSignature
|
||||
import im.status.keycard.io.APDUResponse
|
||||
import java.io.IOException
|
||||
import java.lang.Exception
|
||||
|
||||
class SignCommand(private val listener: Listener, private val hash: ByteArray, private val path: String? = null, private val makeCurrent: Boolean = true, private val pinless: Boolean = false) : CardCommand {
|
||||
interface Listener {
|
||||
|
@ -0,0 +1,12 @@
|
||||
package im.status.keycard.connect.card
|
||||
|
||||
import im.status.keycard.connect.Registry
|
||||
|
||||
class UnpairCommand() : CardCommand {
|
||||
override fun run(context: CardScriptExecutor.ScriptContext): CardCommand.Result {
|
||||
return runOnCard {
|
||||
context.cmdSet.autoUnpair()
|
||||
Registry.pairingManager.removePairing(context.cmdSet.applicationInfo.instanceUID)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
package im.status.keycard.connect.card
|
||||
|
||||
class UnpairOthersCommand() : CardCommand {
|
||||
override fun run(context: CardScriptExecutor.ScriptContext): CardCommand.Result {
|
||||
return runOnCard {
|
||||
context.cmdSet.unpairOthers()
|
||||
}
|
||||
}
|
||||
}
|
@ -19,7 +19,7 @@ class ChangePINActivity : AppCompatActivity() {
|
||||
|
||||
fun ok(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
val pinText = findViewById<EditText>(R.id.newPINText)
|
||||
val script: List<CardCommand> = scriptWithAuthentication().plus(ChangePINCommand(pinText.text.toString()))
|
||||
val script = scriptWithAuthentication().plus(ChangePINCommand(pinText.text.toString()))
|
||||
Registry.scriptExecutor.runScript(script)
|
||||
finish()
|
||||
}
|
||||
|
@ -0,0 +1,29 @@
|
||||
package im.status.keycard.connect.ui
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.EditText
|
||||
import im.status.keycard.connect.R
|
||||
import im.status.keycard.connect.Registry
|
||||
import im.status.keycard.connect.card.ChangePUKCommand
|
||||
import im.status.keycard.connect.card.scriptWithAuthentication
|
||||
|
||||
class ChangePUKActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
//TODO: puk validation and confirmation
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_change_puk)
|
||||
}
|
||||
|
||||
fun ok(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
val pukText = findViewById<EditText>(R.id.newPUKText)
|
||||
val script = scriptWithAuthentication().plus(ChangePUKCommand(pukText.text.toString()))
|
||||
Registry.scriptExecutor.runScript(script)
|
||||
finish()
|
||||
}
|
||||
|
||||
fun cancel(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
finish()
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package im.status.keycard.connect.ui
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import android.widget.EditText
|
||||
import im.status.keycard.connect.R
|
||||
import im.status.keycard.connect.Registry
|
||||
import im.status.keycard.connect.card.ChangePUKCommand
|
||||
import im.status.keycard.connect.card.ChangePairingPasswordCommand
|
||||
import im.status.keycard.connect.card.scriptWithAuthentication
|
||||
|
||||
class ChangePairingPasswordActivity : AppCompatActivity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
//TODO: puk validation and confirmation
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_change_pairing_password)
|
||||
}
|
||||
|
||||
fun ok(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
val pairingPasswordText = findViewById<EditText>(R.id.newPairingPasswordText)
|
||||
val script = scriptWithAuthentication().plus(ChangePairingPasswordCommand(pairingPasswordText.text.toString()))
|
||||
Registry.scriptExecutor.runScript(script)
|
||||
finish()
|
||||
}
|
||||
|
||||
fun cancel(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
finish()
|
||||
}
|
||||
}
|
@ -83,6 +83,30 @@ class MainActivity : AppCompatActivity(), ScriptListener {
|
||||
startCommand(ChangePINActivity::class)
|
||||
}
|
||||
|
||||
fun changePUK(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
startCommand(ChangePUKActivity::class)
|
||||
}
|
||||
|
||||
fun changePairingPassword(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
startCommand(ChangePairingPasswordActivity::class)
|
||||
}
|
||||
|
||||
fun unpair(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
Registry.scriptExecutor.runScript(scriptWithAuthentication().plus(UnpairCommand()))
|
||||
}
|
||||
|
||||
fun unpairOthers(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
Registry.scriptExecutor.runScript(scriptWithAuthentication().plus(UnpairOthersCommand()))
|
||||
}
|
||||
|
||||
fun changeKey(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
Registry.scriptExecutor.runScript(scriptWithAuthentication().plus(LoadKeyCommand()))
|
||||
}
|
||||
|
||||
fun removeKey(@Suppress("UNUSED_PARAMETER") view: View) {
|
||||
Registry.scriptExecutor.runScript(scriptWithAuthentication().plus(RemoveKeyCommand()))
|
||||
}
|
||||
|
||||
private fun startCommand(activity: KClass<out Activity>) {
|
||||
val intent = Intent(this, activity.java)
|
||||
startActivity(intent)
|
||||
|
53
app/src/main/res/layout/activity_change_pairing_password.xml
Normal file
53
app/src/main/res/layout/activity_change_pairing_password.xml
Normal file
@ -0,0 +1,53 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ui.ChangePairingPasswordActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/newPairingPasswordPrompt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="52dp"
|
||||
android:text="@string/change_pairing_password_prompt"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Display1"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.497"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/okButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="88dp"
|
||||
android:onClick="ok"
|
||||
android:text="@android:string/ok"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/cancelButton" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/cancelButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="68dp"
|
||||
android:layout_marginTop="76dp"
|
||||
android:onClick="cancel"
|
||||
android:text="@android:string/cancel"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/newPairingPasswordText" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/newPairingPasswordText"
|
||||
android:layout_width="328dp"
|
||||
android:layout_height="46dp"
|
||||
android:layout_marginTop="88dp"
|
||||
android:ems="10"
|
||||
android:inputType="textPassword"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/newPairingPasswordPrompt"
|
||||
tools:text="password" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -14,7 +14,6 @@
|
||||
android:text="@string/change_pin_prompt"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Display2"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.497"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
|
52
app/src/main/res/layout/activity_change_puk.xml
Normal file
52
app/src/main/res/layout/activity_change_puk.xml
Normal file
@ -0,0 +1,52 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".ui.ChangePUKActivity">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/newPukPrompt"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="52dp"
|
||||
android:text="@string/change_puk_prompt"
|
||||
android:textAppearance="@style/TextAppearance.AppCompat.Display2"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/okButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginEnd="88dp"
|
||||
android:onClick="ok"
|
||||
android:text="@android:string/ok"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintTop_toTopOf="@+id/cancelButton" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/cancelButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="68dp"
|
||||
android:layout_marginTop="76dp"
|
||||
android:onClick="cancel"
|
||||
android:text="@android:string/cancel"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/newPUKText" />
|
||||
|
||||
<EditText
|
||||
android:id="@+id/newPUKText"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="88dp"
|
||||
android:ems="10"
|
||||
android:inputType="numberPassword"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/newPukPrompt"
|
||||
tools:text="123456" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -10,25 +10,89 @@
|
||||
|
||||
<Button
|
||||
android:id="@+id/changePINButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="236dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="48dp"
|
||||
android:layout_marginTop="16dp"
|
||||
android:onClick="changePIN"
|
||||
android:text="@string/change_pin"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.532"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/walletConnectButton" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/walletConnectButton"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_width="236dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:layout_marginTop="24dp"
|
||||
android:onClick="connectWallet"
|
||||
android:text="@string/connect_wallet"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintHorizontal_bias="0.553"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/changePUKButton"
|
||||
android:layout_width="236dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:onClick="changePUK"
|
||||
android:text="@string/change_puk"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/changePINButton" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/changePairingPasswordButton"
|
||||
android:layout_width="236dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:onClick="changePairingPassword"
|
||||
android:text="@string/change_pairing_password"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/changePUKButton" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/unpairButton"
|
||||
android:layout_width="236dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:onClick="unpair"
|
||||
android:text="@string/unpair"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/changePairingPasswordButton" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/unpairOthers"
|
||||
android:layout_width="236dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:onClick="unpairOthers"
|
||||
android:text="@string/unpair_others"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/unpairButton" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/changeKeyButton"
|
||||
android:layout_width="236dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:onClick="changeKey"
|
||||
android:text="@string/change_key"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/unpairOthers" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/removeKey"
|
||||
android:layout_width="236dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginTop="16dp"
|
||||
android:onClick="removeKey"
|
||||
android:text="@string/remove_key"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/changeKeyButton" />
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
@ -25,4 +25,12 @@
|
||||
<string name="load_generate_mnemonic_label">Generate and load BIP39 mnemonic. You will be shown the mnemonic after it is loaded</string>
|
||||
<string name="mnemonic_ok_button">I have wrote these words down</string>
|
||||
<string name="mnemonic_label">Please write these words down. They won\'t be presented again and there is no way to recover them.</string>
|
||||
<string name="change_puk">Change PUK</string>
|
||||
<string name="change_pairing_password">Change pairing password</string>
|
||||
<string name="unpair">Unpair</string>
|
||||
<string name="unpair_others">Unpair Others</string>
|
||||
<string name="change_key">Change Key</string>
|
||||
<string name="remove_key">Remove key</string>
|
||||
<string name="change_puk_prompt">New PUK</string>
|
||||
<string name="change_pairing_password_prompt">New pairing password</string>
|
||||
</resources>
|
||||
|
Loading…
x
Reference in New Issue
Block a user