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
|
//For cryptography
|
||||||
implementation group: 'org.bouncycastle', name: 'bcprov-jdk15on', version: '1.69'
|
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
|
package com.tarkvaraprojekt.mobileauthapp
|
||||||
|
|
||||||
|
import android.app.AlertDialog
|
||||||
|
import android.content.DialogInterface
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
@ -35,6 +37,9 @@ class CanFragment : Fragment() {
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
if (viewModel.userCan.length == 6) {
|
||||||
|
skip()
|
||||||
|
}
|
||||||
if (args.saving) {
|
if (args.saving) {
|
||||||
binding!!.nextButton.text = getString(R.string.save_text)
|
binding!!.nextButton.text = getString(R.string.save_text)
|
||||||
}
|
}
|
||||||
@ -42,6 +47,12 @@ class CanFragment : Fragment() {
|
|||||||
binding!!.cancelButton.setOnClickListener { goToTheStart() }
|
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() {
|
private fun goToNextFragment() {
|
||||||
val enteredCan = binding!!.canEditText.editText?.text.toString()
|
val enteredCan = binding!!.canEditText.editText?.text.toString()
|
||||||
if (enteredCan.length != 6) {
|
if (enteredCan.length != 6) {
|
||||||
@ -52,9 +63,27 @@ class CanFragment : Fragment() {
|
|||||||
binding!!.canEditText.editText?.text.toString()
|
binding!!.canEditText.editText?.text.toString()
|
||||||
)
|
)
|
||||||
if (args.saving) {
|
if (args.saving) {
|
||||||
|
viewModel.storeCan(requireContext())
|
||||||
findNavController().navigate(R.id.action_canFragment_to_settingsFragment)
|
findNavController().navigate(R.id.action_canFragment_to_settingsFragment)
|
||||||
} else {
|
} 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
|
package com.tarkvaraprojekt.mobileauthapp
|
||||||
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.util.Log
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
@ -27,7 +28,7 @@ class HomeFragment : Fragment() {
|
|||||||
|
|
||||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
super.onViewCreated(view, savedInstanceState)
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
viewModel.checkCan(requireContext())
|
||||||
binding!!.beginButton.setOnClickListener { goToNextFragment() }
|
binding!!.beginButton.setOnClickListener { goToNextFragment() }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ class SettingsFragment : Fragment() {
|
|||||||
findNavController().navigate(action)
|
findNavController().navigate(action)
|
||||||
} else {
|
} else {
|
||||||
// If can in ViewModel is 6 we know that we can only delete it.
|
// 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!!.canSaved.text = getString(R.string.saved_can, "puudub")
|
||||||
binding!!.canMenuAction.text = getString(R.string.can_add)
|
binding!!.canMenuAction.text = getString(R.string.can_add)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
package com.tarkvaraprojekt.mobileauthapp.model
|
package com.tarkvaraprojekt.mobileauthapp.model
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.SharedPreferences
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
|
import androidx.security.crypto.EncryptedSharedPreferences
|
||||||
|
import androidx.security.crypto.MasterKeys
|
||||||
|
|
||||||
class SmartCardViewModel: ViewModel() {
|
class SmartCardViewModel: ViewModel() {
|
||||||
|
|
||||||
@ -47,4 +51,36 @@ class SmartCardViewModel: ViewModel() {
|
|||||||
_userIdentificationNumber = newUserIdentificationNumber
|
_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" />
|
app:popUpToInclusive="true" />
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_canFragment_to_settingsFragment"
|
android:id="@+id/action_canFragment_to_settingsFragment"
|
||||||
app:destination="@id/settingsFragment" />
|
app:destination="@id/settingsFragment"
|
||||||
|
app:popUpTo="@id/settingsFragment"
|
||||||
|
app:popUpToInclusive="true"/>
|
||||||
<argument
|
<argument
|
||||||
android:name="saving"
|
android:name="saving"
|
||||||
app:argType="boolean"
|
app:argType="boolean"
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
<string name="next_text">EDASI</string>
|
<string name="next_text">EDASI</string>
|
||||||
<string name="cancel_text">KATKESTA</string>
|
<string name="cancel_text">KATKESTA</string>
|
||||||
<string name="save_text">SALVESTA</string>
|
<string name="save_text">SALVESTA</string>
|
||||||
|
<string name="deny_text">EI</string>
|
||||||
|
|
||||||
<!-- string resources for PinFragment -->
|
<!-- string resources for PinFragment -->
|
||||||
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
||||||
@ -22,6 +23,8 @@
|
|||||||
<string name="length_can">CANi pikkus on vale</string>
|
<string name="length_can">CANi pikkus on vale</string>
|
||||||
<string name="card_detected">Kaart on tuvastatud. Hoia kaarti vastu telefoni.</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="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 resources for AuthFragment layout -->
|
||||||
<string name="auth_instruction_text">ID kaardiga ühenduse loomiseks pane kaart vastu telefoni</string>
|
<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="next_text">EDASI</string>
|
||||||
<string name="cancel_text">KATKESTA</string>
|
<string name="cancel_text">KATKESTA</string>
|
||||||
<string name="save_text">SALVESTA</string>
|
<string name="save_text">SALVESTA</string>
|
||||||
|
<string name="deny_text">EI</string>
|
||||||
|
|
||||||
<!-- string resources for PinFragment -->
|
<!-- string resources for PinFragment -->
|
||||||
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
||||||
@ -21,6 +22,7 @@
|
|||||||
<string name="length_can">CANi pikkus on vale</string>
|
<string name="length_can">CANi pikkus on vale</string>
|
||||||
<string name="card_detected">Kaart on tuvastatud. Hoia kaarti vastu telefoni.</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="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 resources for AuthFragment layout -->
|
||||||
<string name="auth_instruction_text">ID kaardiga ühenduse loomiseks pane kaart vastu telefoni</string>
|
<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="next_text">EDASI</string>
|
||||||
<string name="cancel_text">KATKESTA</string>
|
<string name="cancel_text">KATKESTA</string>
|
||||||
<string name="save_text">SALVESTA</string>
|
<string name="save_text">SALVESTA</string>
|
||||||
|
<string name="deny_text">EI</string>
|
||||||
|
|
||||||
<!-- string resources for PinFragment -->
|
<!-- string resources for PinFragment -->
|
||||||
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
<string name="pin_fragment">Palun sisesta PIN 1</string>
|
||||||
@ -20,6 +21,8 @@
|
|||||||
<string name="length_can">CANi pikkus on vale</string>
|
<string name="length_can">CANi pikkus on vale</string>
|
||||||
<string name="card_detected">Kaart on tuvastatud. Hoia kaarti vastu telefoni.</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="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 resources for AuthFragment layout -->
|
||||||
<string name="auth_instruction_text">ID kaardiga ühenduse loomiseks pane kaart vastu telefoni</string>
|
<string name="auth_instruction_text">ID kaardiga ühenduse loomiseks pane kaart vastu telefoni</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user