diff --git a/MobileAuthApp/app/build.gradle b/MobileAuthApp/app/build.gradle
index 6f6625a..5cd7f6a 100644
--- a/MobileAuthApp/app/build.gradle
+++ b/MobileAuthApp/app/build.gradle
@@ -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")
+
}
\ No newline at end of file
diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/CanFragment.kt b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/CanFragment.kt
index cd971c6..19179f1 100644
--- a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/CanFragment.kt
+++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/CanFragment.kt
@@ -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()
}
}
}
diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/HomeFragment.kt b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/HomeFragment.kt
index bdfaa69..600fdd8 100644
--- a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/HomeFragment.kt
+++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/HomeFragment.kt
@@ -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() }
}
diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/menu/SettingsFragment.kt b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/menu/SettingsFragment.kt
index 88f4642..a488cb6 100644
--- a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/menu/SettingsFragment.kt
+++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/menu/SettingsFragment.kt
@@ -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)
}
diff --git a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/model/SmartCardViewModel.kt b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/model/SmartCardViewModel.kt
index 4674831..9bfa178 100644
--- a/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/model/SmartCardViewModel.kt
+++ b/MobileAuthApp/app/src/main/java/com/tarkvaraprojekt/mobileauthapp/model/SmartCardViewModel.kt
@@ -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 = ""
+ }
+
}
\ No newline at end of file
diff --git a/MobileAuthApp/app/src/main/res/navigation/nav_graph.xml b/MobileAuthApp/app/src/main/res/navigation/nav_graph.xml
index bf8d07b..d01406f 100644
--- a/MobileAuthApp/app/src/main/res/navigation/nav_graph.xml
+++ b/MobileAuthApp/app/src/main/res/navigation/nav_graph.xml
@@ -49,7 +49,9 @@
app:popUpToInclusive="true" />
+ app:destination="@id/settingsFragment"
+ app:popUpTo="@id/settingsFragment"
+ app:popUpToInclusive="true"/>
EDASI
KATKESTA
SALVESTA
+ EI
Palun sisesta PIN 1
@@ -22,6 +23,8 @@
CANi pikkus on vale
Kaart on tuvastatud. Hoia kaarti vastu telefoni.
Andmed loetud. Võid edasi minna.
+ 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.
+ Salvesta CAN
ID kaardiga ühenduse loomiseks pane kaart vastu telefoni
diff --git a/MobileAuthApp/app/src/main/res/values-et/strings.xml b/MobileAuthApp/app/src/main/res/values-et/strings.xml
index 351a9bf..5e9226e 100644
--- a/MobileAuthApp/app/src/main/res/values-et/strings.xml
+++ b/MobileAuthApp/app/src/main/res/values-et/strings.xml
@@ -7,6 +7,7 @@
EDASI
KATKESTA
SALVESTA
+ EI
Palun sisesta PIN 1
@@ -21,6 +22,7 @@
CANi pikkus on vale
Kaart on tuvastatud. Hoia kaarti vastu telefoni.
Andmed loetud. Võid edasi minna.
+ 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. Salvesta CAN
ID kaardiga ühenduse loomiseks pane kaart vastu telefoni
diff --git a/MobileAuthApp/app/src/main/res/values/strings.xml b/MobileAuthApp/app/src/main/res/values/strings.xml
index 92302a2..e3cb6f2 100644
--- a/MobileAuthApp/app/src/main/res/values/strings.xml
+++ b/MobileAuthApp/app/src/main/res/values/strings.xml
@@ -6,6 +6,7 @@
EDASI
KATKESTA
SALVESTA
+ EI
Palun sisesta PIN 1
@@ -20,6 +21,8 @@
CANi pikkus on vale
Kaart on tuvastatud. Hoia kaarti vastu telefoni.
Andmed loetud. Võid edasi minna.
+ 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.
+ Salvesta CAN
ID kaardiga ühenduse loomiseks pane kaart vastu telefoni