Skip to content
This repository has been archived by the owner on Oct 23, 2023. It is now read-only.

Commit

Permalink
feat(access): create storage for user using Android SharedPreference
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreaBrighi committed Apr 28, 2023
1 parent 13b7c88 commit 9b47020
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.intelligentbackpack.accessdata.storage

import com.intelligentbackpack.accessdomain.entities.User

interface StorageUser {

fun isUserSaved(): Boolean

fun saveUser(user: User)

fun getUser(): User

fun deleteUser()


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package com.intelligentbackpack.accessdata.storage

import android.content.Context
import android.content.Context.MODE_PRIVATE
import android.content.SharedPreferences
import androidx.security.crypto.EncryptedSharedPreferences
import androidx.security.crypto.MasterKey
import com.intelligentbackpack.accessdomain.entities.Role
import com.intelligentbackpack.accessdomain.entities.User

class StorageUserImpl(private val context: Context) : StorageUser {

private val name = "IntelligentBackpackSharedPref"

override fun isUserSaved(): Boolean {
val sp: SharedPreferences = context.getSharedPreferences(name, MODE_PRIVATE)
return sp.contains("email")
}

override fun saveUser(user: User) {
val sp: SharedPreferences = context.getSharedPreferences(name, MODE_PRIVATE)
val masterKey: MasterKey =
MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val edit: SharedPreferences.Editor = sp.edit()
edit.putString("email", user.email)
edit.putString("name", user.name)
edit.putString("surname", user.surname)
edit.putString("role", user.role.name)
edit.apply()
val esp: SharedPreferences =
EncryptedSharedPreferences.create(
context,
name,
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
val encEdit: SharedPreferences.Editor = esp.edit()
encEdit.putString("password", user.password)
encEdit.apply()
}

override fun getUser(): User {
if (!isUserSaved())
throw IllegalStateException("User not saved")
val sp = context.getSharedPreferences(name, MODE_PRIVATE)

val masterKey: MasterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val esp: SharedPreferences = EncryptedSharedPreferences.create(
context,
name,
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
return User.build {
email = sp.getString("email", "")!!
name = sp.getString("name", "")!!
surname = sp.getString("surname", "")!!
password = esp.getString("password", "")!!
role = Role.valueOf(sp.getString("role", "USER")!!)
}
}

override fun deleteUser() {
if (!isUserSaved())
throw IllegalStateException("User not saved")
val sp: SharedPreferences =
context.getSharedPreferences(name, MODE_PRIVATE)
val edit: SharedPreferences.Editor = sp.edit()
edit.clear()
edit.apply()
}
}

0 comments on commit 9b47020

Please sign in to comment.