mirror of
https://github.com/TanelOrumaa/Estonian-ID-card-mobile-authenticator-POC.git
synced 2024-12-22 12:30:16 +02:00
MOB-39 can can be now stored on the phone
This commit is contained in:
parent
141dfb18db
commit
8637a4182a
@ -59,4 +59,7 @@ dependencies {
|
||||
//For cryptography
|
||||
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.69'
|
||||
|
||||
//SecureDataStoring
|
||||
implementation("androidx.security:security-crypto:1.0.0")
|
||||
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package com.tarkvaraprojekt.mobileauthapp
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
@ -35,6 +37,9 @@ class CanFragment : Fragment() {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
if (viewModel.userCan.length == 6) {
|
||||
skip()
|
||||
}
|
||||
if (args.saving) {
|
||||
binding!!.nextButton.text = getString(R.string.save_text)
|
||||
}
|
||||
@ -42,6 +47,12 @@ class CanFragment : Fragment() {
|
||||
binding!!.cancelButton.setOnClickListener { goToTheStart() }
|
||||
}
|
||||
|
||||
// If CAN is already set
|
||||
private fun skip() {
|
||||
findNavController().navigate(R.id.action_canFragment_to_authFragment)
|
||||
}
|
||||
|
||||
// Might need some rework, must break it up and make logic better.
|
||||
private fun goToNextFragment() {
|
||||
val enteredCan = binding!!.canEditText.editText?.text.toString()
|
||||
if (enteredCan.length != 6) {
|
||||
@ -52,9 +63,27 @@ class CanFragment : Fragment() {
|
||||
binding!!.canEditText.editText?.text.toString()
|
||||
)
|
||||
if (args.saving) {
|
||||
viewModel.storeCan(requireContext())
|
||||
findNavController().navigate(R.id.action_canFragment_to_settingsFragment)
|
||||
} else {
|
||||
findNavController().navigate(R.id.action_canFragment_to_authFragment)
|
||||
val canStoreQuestion: AlertDialog? = activity?.let { frag ->
|
||||
val builder = AlertDialog.Builder(frag)
|
||||
builder.apply {
|
||||
setPositiveButton(R.string.save_text) { _, _ ->
|
||||
viewModel.storeCan(
|
||||
requireContext()
|
||||
)
|
||||
findNavController().navigate(R.id.action_canFragment_to_authFragment)
|
||||
}
|
||||
setNegativeButton(R.string.deny_text) { _, _ ->
|
||||
findNavController().navigate(R.id.action_canFragment_to_authFragment)
|
||||
}
|
||||
}
|
||||
builder.setMessage(R.string.can_save_request)
|
||||
builder.setTitle(R.string.save_can_title)
|
||||
builder.create()
|
||||
}
|
||||
canStoreQuestion?.show()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.tarkvaraprojekt.mobileauthapp
|
||||
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
@ -27,7 +28,7 @@ class HomeFragment : Fragment() {
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
viewModel.checkCan(requireContext())
|
||||
binding!!.beginButton.setOnClickListener { goToNextFragment() }
|
||||
}
|
||||
|
||||
|
@ -43,7 +43,7 @@ class SettingsFragment : Fragment() {
|
||||
findNavController().navigate(action)
|
||||
} else {
|
||||
// If can in ViewModel is 6 we know that we can only delete it.
|
||||
viewModel.setUserCan("")
|
||||
viewModel.deleteCan(requireContext())
|
||||
binding!!.canSaved.text = getString(R.string.saved_can, "puudub")
|
||||
binding!!.canMenuAction.text = getString(R.string.can_add)
|
||||
}
|
||||
|
@ -1,6 +1,10 @@
|
||||
package com.tarkvaraprojekt.mobileauthapp.model
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.security.crypto.EncryptedSharedPreferences
|
||||
import androidx.security.crypto.MasterKeys
|
||||
|
||||
class SmartCardViewModel: ViewModel() {
|
||||
|
||||
@ -47,4 +51,36 @@ class SmartCardViewModel: ViewModel() {
|
||||
_userIdentificationNumber = newUserIdentificationNumber
|
||||
}
|
||||
|
||||
|
||||
private fun getSharedPreferences(context: Context): SharedPreferences {
|
||||
val masterKeyAlias: String = MasterKeys.getOrCreate(MasterKeys.AES256_GCM_SPEC)
|
||||
return EncryptedSharedPreferences.create(
|
||||
"user_creds",
|
||||
masterKeyAlias,
|
||||
context,
|
||||
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
|
||||
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
|
||||
)
|
||||
}
|
||||
|
||||
fun storeCan(context: Context) {
|
||||
val sharedPreferences: SharedPreferences = getSharedPreferences(context)
|
||||
sharedPreferences.edit().putString("CAN", userCan).apply()
|
||||
}
|
||||
|
||||
fun checkCan(context: Context) {
|
||||
val sharedPreferences: SharedPreferences = getSharedPreferences(context)
|
||||
val foundCan = sharedPreferences.getString("CAN", null)
|
||||
foundCan?.let {
|
||||
_userCan = it
|
||||
}
|
||||
}
|
||||
|
||||
// Must be called from AuthFragment as well, when CAN is wrong.
|
||||
fun deleteCan(context: Context) {
|
||||
val sharedPreferences: SharedPreferences = getSharedPreferences(context)
|
||||
sharedPreferences.edit().remove("CAN").apply()
|
||||
_userCan = ""
|
||||
}
|
||||
|
||||
}
|
@ -49,7 +49,9 @@
|
||||
app:popUpToInclusive="true" />
|
||||
<action
|
||||
android:id="@+id/action_canFragment_to_settingsFragment"
|
||||
app:destination="@id/settingsFragment" />
|
||||
app:destination="@id/settingsFragment"
|
||||
app:popUpTo="@id/settingsFragment"
|
||||
app:popUpToInclusive="true"/>
|
||||
<argument
|
||||
android:name="saving"
|
||||
app:argType="boolean"
|
||||
|
@ -8,6 +8,7 @@
|
||||
<string name="next_text">EDASI</string>
|
||||
<string name="cancel_text">KATKESTA</string>
|
||||
<string name="save_text">SALVESTA</string>
|
||||
<string name="deny_text">EI</string>
|
||||
|
||||
<!-- string resources for PinFragment -->
|
||||
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
||||
@ -22,6 +23,8 @@
|
||||
<string name="length_can">CANi pikkus on vale</string>
|
||||
<string name="card_detected">Kaart on tuvastatud. Hoia kaarti vastu telefoni.</string>
|
||||
<string name="data_read">Andmed loetud. Võid edasi minna.</string>
|
||||
<string name="can_save_request">Praegu ei ole rakenduses CANi salvestatud. Kas sa soovid sisestatud CANi salvestada? Sellisel juhul sisestatakse see järgmisel korral automaatselt. Salvestatud CANi saab alati menüüs muuta ja kustutada.</string>
|
||||
<string name="save_can_title">Salvesta CAN</string>
|
||||
|
||||
<!-- string resources for AuthFragment layout -->
|
||||
<string name="auth_instruction_text">ID kaardiga ühenduse loomiseks pane kaart vastu telefoni</string>
|
||||
|
@ -7,6 +7,7 @@
|
||||
<string name="next_text">EDASI</string>
|
||||
<string name="cancel_text">KATKESTA</string>
|
||||
<string name="save_text">SALVESTA</string>
|
||||
<string name="deny_text">EI</string>
|
||||
|
||||
<!-- string resources for PinFragment -->
|
||||
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
||||
@ -21,6 +22,7 @@
|
||||
<string name="length_can">CANi pikkus on vale</string>
|
||||
<string name="card_detected">Kaart on tuvastatud. Hoia kaarti vastu telefoni.</string>
|
||||
<string name="data_read">Andmed loetud. Võid edasi minna.</string>
|
||||
<string name="can_save_request">Praegu ei ole rakenduses CANi salvestatud. Kas sa soovid sisestatud CANi salvestada? Sellisel juhul sisestatakse see järgmisel korral automaatselt. Salvestatud CANi saab alati menüüs muuta ja kustutada.</string> <string name="save_can_title">Salvesta CAN</string>
|
||||
|
||||
<!-- string resources for AuthFragment layout -->
|
||||
<string name="auth_instruction_text">ID kaardiga ühenduse loomiseks pane kaart vastu telefoni</string>
|
||||
|
@ -6,6 +6,7 @@
|
||||
<string name="next_text">EDASI</string>
|
||||
<string name="cancel_text">KATKESTA</string>
|
||||
<string name="save_text">SALVESTA</string>
|
||||
<string name="deny_text">EI</string>
|
||||
|
||||
<!-- string resources for PinFragment -->
|
||||
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
||||
@ -20,6 +21,8 @@
|
||||
<string name="length_can">CANi pikkus on vale</string>
|
||||
<string name="card_detected">Kaart on tuvastatud. Hoia kaarti vastu telefoni.</string>
|
||||
<string name="data_read">Andmed loetud. Võid edasi minna.</string>
|
||||
<string name="can_save_request">Praegu ei ole rakenduses CANi salvestatud. Kas sa soovid sisestatud CANi salvestada? Sellisel juhul sisestatakse see järgmisel korral automaatselt. Salvestatud CANi saab alati menüüs muuta ja kustutada.</string>
|
||||
<string name="save_can_title">Salvesta CAN</string>
|
||||
|
||||
<!-- string resources for AuthFragment layout -->
|
||||
<string name="auth_instruction_text">ID kaardiga ühenduse loomiseks pane kaart vastu telefoni</string>
|
||||
|
Loading…
Reference in New Issue
Block a user