From ec9e237a4de110881699e88db331af4f693997e2 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Mon, 15 Jul 2024 11:36:59 +0700 Subject: [PATCH] AuthProvider: Return null instead of invalid AuthData Signed-off-by: Aayush Gupta --- .../store/data/providers/AuthProvider.kt | 10 +++++----- .../aurora/store/data/work/DownloadWorker.kt | 18 +++++++++++++++--- .../com/aurora/store/data/work/UpdateWorker.kt | 2 +- .../store/view/ui/account/AccountFragment.kt | 2 +- .../view/ui/commons/MoreDialogFragment.kt | 6 +++--- .../store/viewmodel/all/BlacklistViewModel.kt | 2 +- .../store/viewmodel/all/InstalledViewModel.kt | 6 +----- .../store/viewmodel/all/UpdatesViewModel.kt | 2 +- .../browse/ExpandedStreamBrowseViewModel.kt | 2 +- .../viewmodel/category/CategoryViewModel.kt | 2 +- .../viewmodel/details/AppDetailsViewModel.kt | 4 ++-- .../details/DetailsClusterViewModel.kt | 4 ++-- .../viewmodel/details/DetailsMoreViewModel.kt | 2 +- .../viewmodel/details/DevProfileViewModel.kt | 4 ++-- .../store/viewmodel/review/ReviewViewModel.kt | 2 +- .../viewmodel/search/SearchResultViewModel.kt | 2 +- .../search/SearchSuggestionViewModel.kt | 2 +- .../store/viewmodel/sheets/SheetsViewModel.kt | 2 +- 18 files changed, 41 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/aurora/store/data/providers/AuthProvider.kt b/app/src/main/java/com/aurora/store/data/providers/AuthProvider.kt index 230d6a19b..bf7480d63 100644 --- a/app/src/main/java/com/aurora/store/data/providers/AuthProvider.kt +++ b/app/src/main/java/com/aurora/store/data/providers/AuthProvider.kt @@ -41,7 +41,7 @@ class AuthProvider @Inject constructor( private val gson: Gson ) { - val authData: AuthData get() = getSavedAuthData() + val authData: AuthData? get() = getSavedAuthData() val isAnonymous: Boolean get() { @@ -52,22 +52,22 @@ class AuthProvider @Inject constructor( suspend fun isSavedAuthDataValid(): Boolean { return withContext(Dispatchers.IO) { try { - AuthValidator(getSavedAuthData()) + AuthValidator(authData ?: return@withContext false) .using(HttpClient.getPreferredClient(context)) .isValid() - } catch (e: Exception) { + } catch (exception: Exception) { false } } } - private fun getSavedAuthData(): AuthData { + private fun getSavedAuthData(): AuthData? { Log.i("Loading saved AuthData") val rawAuth: String = Preferences.getString(context, PREFERENCE_AUTH_DATA) return if (rawAuth.isNotEmpty()) { gson.fromJson(rawAuth, AuthData::class.java) } else { - AuthData("", "") + null } } } diff --git a/app/src/main/java/com/aurora/store/data/work/DownloadWorker.kt b/app/src/main/java/com/aurora/store/data/work/DownloadWorker.kt index 008865736..09de99326 100644 --- a/app/src/main/java/com/aurora/store/data/work/DownloadWorker.kt +++ b/app/src/main/java/com/aurora/store/data/work/DownloadWorker.kt @@ -88,6 +88,13 @@ class DownloadWorker @AssistedInject constructor( private val TAG = DownloadWorker::class.java.simpleName override suspend fun doWork(): Result { + // Bail out immediately if authData is not valid + if (!authProvider.isSavedAuthDataValid()) { + Log.e(TAG, "AuthData is not valid, exiting!") + onFailure() + return Result.failure() + } + // Try to parse input data into a valid app try { val downloadData = inputData.getString(DownloadWorkerUtil.DOWNLOAD_DATA) @@ -97,6 +104,7 @@ class DownloadWorker @AssistedInject constructor( icon = Bitmap.createScaledBitmap(bitmap, 96, 96, true) } catch (exception: Exception) { Log.e(TAG, "Failed to parse download data", exception) + onFailure() return Result.failure() } @@ -104,7 +112,7 @@ class DownloadWorker @AssistedInject constructor( setForeground(getForegroundInfo()) // Purchase the app (free apps needs to be purchased too) - purchaseHelper = PurchaseHelper(authProvider.authData) + purchaseHelper = PurchaseHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(appContext)) notificationManager = @@ -116,7 +124,7 @@ class DownloadWorker @AssistedInject constructor( } if (download.fileList.isEmpty()) { Log.i(TAG, "Nothing to download!") - notifyStatus(DownloadStatus.FAILED) + onFailure() return Result.failure() } @@ -171,7 +179,11 @@ class DownloadWorker @AssistedInject constructor( } } - if (!requestList.all { it.file.exists() }) return Result.failure() + if (!requestList.all { it.file.exists() }) { + Log.e(TAG, "Downloaded files are missing") + onFailure() + return Result.failure() + } // Mark download as completed onSuccess() diff --git a/app/src/main/java/com/aurora/store/data/work/UpdateWorker.kt b/app/src/main/java/com/aurora/store/data/work/UpdateWorker.kt index ea6339a48..eab51916d 100644 --- a/app/src/main/java/com/aurora/store/data/work/UpdateWorker.kt +++ b/app/src/main/java/com/aurora/store/data/work/UpdateWorker.kt @@ -130,7 +130,7 @@ class UpdateWorker @AssistedInject constructor( try { val updatesList = AppUtil.getUpdatableApps( context = appContext, - authData = authProvider.authData, + authData = authProvider.authData!!, gson = gson, verifyCert = true, selfUpdate = false diff --git a/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt index fa9849534..0f367ac57 100644 --- a/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/account/AccountFragment.kt @@ -57,7 +57,7 @@ class AccountFragment : BaseFragment() { binding.chipTos.setOnClickListener { browse(URL_TOS) } } - authProvider.authData.userProfile?.let { + authProvider.authData?.userProfile?.let { val avatar = if (authProvider.isAnonymous) R.mipmap.ic_launcher else it.artwork.url binding.imgAvatar.load(avatar) { placeholder(R.drawable.bg_placeholder) diff --git a/app/src/main/java/com/aurora/store/view/ui/commons/MoreDialogFragment.kt b/app/src/main/java/com/aurora/store/view/ui/commons/MoreDialogFragment.kt index 16bdbed8d..dbae37a26 100644 --- a/app/src/main/java/com/aurora/store/view/ui/commons/MoreDialogFragment.kt +++ b/app/src/main/java/com/aurora/store/view/ui/commons/MoreDialogFragment.kt @@ -198,7 +198,7 @@ class MoreDialogFragment : DialogFragment() { ) { SubcomposeAsyncImage( model = ImageRequest.Builder(LocalContext.current) - .data(if (authProvider.isAnonymous) R.mipmap.ic_launcher else authProvider.authData.userProfile?.artwork?.url) + .data(if (authProvider.isAnonymous) R.mipmap.ic_launcher else authProvider.authData?.userProfile?.artwork?.url) .placeholder(R.drawable.ic_account) .crossfade(true) .build(), @@ -213,12 +213,12 @@ class MoreDialogFragment : DialogFragment() { horizontalAlignment = Alignment.Start ) { Text( - text = if (authProvider.isAnonymous) "anonymous" else authProvider.authData.userProfile!!.name, + text = if (authProvider.isAnonymous) "anonymous" else authProvider.authData!!.userProfile!!.name, fontWeight = FontWeight.SemiBold, fontSize = 16.sp ) Text( - text = if (authProvider.isAnonymous) "anonymous@gmail.com" else authProvider.authData.userProfile!!.email, + text = if (authProvider.isAnonymous) "anonymous@gmail.com" else authProvider.authData!!.userProfile!!.email, fontWeight = FontWeight.Normal, fontSize = 14.sp ) diff --git a/app/src/main/java/com/aurora/store/viewmodel/all/BlacklistViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/all/BlacklistViewModel.kt index edb9f7185..d1c211a47 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/all/BlacklistViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/all/BlacklistViewModel.kt @@ -46,7 +46,7 @@ class BlacklistViewModel @Inject constructor( authProvider: AuthProvider ) : ViewModel() { private val blacklistProvider: BlacklistProvider = BlacklistProvider.with(context) - private val appDetailsHelper = AppDetailsHelper(authProvider.authData) + private val appDetailsHelper = AppDetailsHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) private val _blacklistedApps = MutableStateFlow?>(null) diff --git a/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt index d583f3081..ff7fc379f 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/all/InstalledViewModel.kt @@ -56,11 +56,7 @@ class InstalledViewModel @Inject constructor( fun fetchApps() { viewModelScope.launch(Dispatchers.IO) { try { - val apps = AppUtil.getFilteredInstalledApps( - context, - authProvider.authData - ) - + val apps = AppUtil.getFilteredInstalledApps(context, authProvider.authData!!) _installedApps.emit(apps.sortedBy { it.displayName.lowercase(Locale.getDefault()) }) } catch (exception: Exception) { Log.e(TAG, "Failed to get installed apps", exception) diff --git a/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt index daab3e8a6..dca03376d 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/all/UpdatesViewModel.kt @@ -71,7 +71,7 @@ class UpdatesViewModel @Inject constructor( val updates = AppUtil.getUpdatableApps( context, - authProvider.authData, + authProvider.authData!!, gson, !isExtendedUpdateEnabled ).sortedBy { it.displayName.lowercase(Locale.getDefault()) } diff --git a/app/src/main/java/com/aurora/store/viewmodel/browse/ExpandedStreamBrowseViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/browse/ExpandedStreamBrowseViewModel.kt index dff365bff..5e2408e5a 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/browse/ExpandedStreamBrowseViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/browse/ExpandedStreamBrowseViewModel.kt @@ -43,7 +43,7 @@ class ExpandedStreamBrowseViewModel @Inject constructor( private val authProvider: AuthProvider ) : ViewModel() { - private val streamHelper: ExpandedBrowseHelper = ExpandedBrowseHelper(authProvider.authData) + private val streamHelper: ExpandedBrowseHelper = ExpandedBrowseHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) val liveData: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/com/aurora/store/viewmodel/category/CategoryViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/category/CategoryViewModel.kt index f654e2774..cba9da37f 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/category/CategoryViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/category/CategoryViewModel.kt @@ -46,7 +46,7 @@ class CategoryViewModel @Inject constructor( ) : ViewModel() { private val TAG = CategoryViewModel::class.java.simpleName - private val categoryHelper: CategoryHelper = CategoryHelper(authProvider.authData) + private val categoryHelper: CategoryHelper = CategoryHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) private var stash: CategoryStash = mutableMapOf( diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt index 5ca41fdd6..54b2c67b2 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/details/AppDetailsViewModel.kt @@ -43,8 +43,8 @@ class AppDetailsViewModel @Inject constructor( private val exodusApiKey = "Token bbe6ebae4ad45a9cbacb17d69739799b8df2c7ae" private val httpClient = HttpClient.getPreferredClient(context) - private val appDetailsHelper = AppDetailsHelper(authProvider.authData).using(httpClient) - private val reviewsHelper = ReviewsHelper(authProvider.authData).using(httpClient) + private val appDetailsHelper = AppDetailsHelper(authProvider.authData!!).using(httpClient) + private val reviewsHelper = ReviewsHelper(authProvider.authData!!).using(httpClient) private val appStash: MutableMap = mutableMapOf() private val _app = MutableSharedFlow() diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/DetailsClusterViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/DetailsClusterViewModel.kt index 3d3d1bb4e..550e2a02a 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/details/DetailsClusterViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/details/DetailsClusterViewModel.kt @@ -46,9 +46,9 @@ class DetailsClusterViewModel @Inject constructor( authProvider: AuthProvider ) : ViewModel() { - private var appDetailsHelper = AppDetailsHelper(authProvider.authData) + private var appDetailsHelper = AppDetailsHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) - private var streamHelper = StreamHelper(authProvider.authData) + private var streamHelper = StreamHelper(authProvider.authData!!) val liveData: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/DetailsMoreViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/DetailsMoreViewModel.kt index 48420a380..020cbf979 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/details/DetailsMoreViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/details/DetailsMoreViewModel.kt @@ -24,7 +24,7 @@ class DetailsMoreViewModel @Inject constructor( private val TAG = DetailsMoreViewModel::class.java.simpleName - private val appDetailsHelper = AppDetailsHelper(authProvider.authData) + private val appDetailsHelper = AppDetailsHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) private val dependantAppsStash = mutableMapOf>() diff --git a/app/src/main/java/com/aurora/store/viewmodel/details/DevProfileViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/details/DevProfileViewModel.kt index f3386d77a..55ce6302b 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/details/DevProfileViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/details/DevProfileViewModel.kt @@ -48,9 +48,9 @@ class DevProfileViewModel @Inject constructor( private val authProvider: AuthProvider ) : ViewModel() { - private var appDetailsHelper = AppDetailsHelper(authProvider.authData) + private var appDetailsHelper = AppDetailsHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) - private var streamHelper = StreamHelper(authProvider.authData) + private var streamHelper = StreamHelper(authProvider.authData!!) val liveData: MutableLiveData = MutableLiveData() var devStream:DevStream = DevStream() diff --git a/app/src/main/java/com/aurora/store/viewmodel/review/ReviewViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/review/ReviewViewModel.kt index 9258a0d4e..91073b1ea 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/review/ReviewViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/review/ReviewViewModel.kt @@ -43,7 +43,7 @@ class ReviewViewModel @Inject constructor( private val authProvider: AuthProvider ) : ViewModel() { - var reviewsHelper: ReviewsHelper = ReviewsHelper(authProvider.authData) + var reviewsHelper: ReviewsHelper = ReviewsHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) val liveData: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/com/aurora/store/viewmodel/search/SearchResultViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/search/SearchResultViewModel.kt index 96dbf21d1..8f631fa52 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/search/SearchResultViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/search/SearchResultViewModel.kt @@ -51,7 +51,7 @@ class SearchResultViewModel @Inject constructor( private val TAG = SearchResultViewModel::class.java.simpleName private val webSearchHelper: WebSearchHelper = WebSearchHelper() - private val searchHelper: SearchHelper = SearchHelper(authProvider.authData) + private val searchHelper: SearchHelper = SearchHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) val liveData: MutableLiveData = MutableLiveData() diff --git a/app/src/main/java/com/aurora/store/viewmodel/search/SearchSuggestionViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/search/SearchSuggestionViewModel.kt index 2e7d69330..77d9eb5f7 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/search/SearchSuggestionViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/search/SearchSuggestionViewModel.kt @@ -44,7 +44,7 @@ class SearchSuggestionViewModel @Inject constructor( ) : ViewModel() { private val webSearchHelper: WebSearchHelper = WebSearchHelper() - private val searchHelper: SearchHelper = SearchHelper(authProvider.authData) + private val searchHelper: SearchHelper = SearchHelper(authProvider.authData!!) .using(HttpClient.getPreferredClient(context)) val liveSearchSuggestions: MutableLiveData> = MutableLiveData() diff --git a/app/src/main/java/com/aurora/store/viewmodel/sheets/SheetsViewModel.kt b/app/src/main/java/com/aurora/store/viewmodel/sheets/SheetsViewModel.kt index 0005eb08b..78756d2ba 100644 --- a/app/src/main/java/com/aurora/store/viewmodel/sheets/SheetsViewModel.kt +++ b/app/src/main/java/com/aurora/store/viewmodel/sheets/SheetsViewModel.kt @@ -32,7 +32,7 @@ class SheetsViewModel @Inject constructor( fun purchase(app: App, customVersion: Int) { viewModelScope.launch(Dispatchers.IO) { try { - val purchaseHelper = PurchaseHelper(authProvider.authData) + val purchaseHelper = PurchaseHelper(authProvider.authData!!) val files = purchaseHelper.purchase(app.packageName, customVersion, app.offerType) if (files.isNotEmpty()) { AuroraApp.events.send(