From ca194b887123254a02f93506da2f3ba15b14323c Mon Sep 17 00:00:00 2001 From: Beemo Date: Mon, 27 Mar 2023 21:02:18 +0800 Subject: [PATCH] Fix oauth2 token for widget didn't been setup when login --- WordPress/Classes/Services/AccountService.m | 16 +++++----- .../Classes/Services/TodayExtensionService.h | 5 ++-- .../Classes/Services/TodayExtensionService.m | 29 ++++++++++--------- .../ViewRelated/Stats/StatsViewController.m | 4 +-- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/WordPress/Classes/Services/AccountService.m b/WordPress/Classes/Services/AccountService.m index 2e5660c0b7c3..3ff014d0c5ad 100644 --- a/WordPress/Classes/Services/AccountService.m +++ b/WordPress/Classes/Services/AccountService.m @@ -402,10 +402,10 @@ - (void)setupAppExtensionsWithDefaultAccount:(WPAccount *)defaultAccount inConte NSNumber *siteId = defaultBlog.dotComID; NSString *blogName = defaultBlog.settings.name; NSString *blogUrl = defaultBlog.displayURL; - + NSString *oauth2Token = defaultAccount.authToken; + TodayExtensionService *service = [TodayExtensionService new]; if (defaultBlog == nil || defaultBlog.isDeleted) { dispatch_async(dispatch_get_main_queue(), ^{ - TodayExtensionService *service = [TodayExtensionService new]; [service removeTodayWidgetConfiguration]; [ShareExtensionService removeShareExtensionConfiguration]; @@ -415,9 +415,6 @@ - (void)setupAppExtensionsWithDefaultAccount:(WPAccount *)defaultAccount inConte }); } else { // Required Attributes - - NSString *oauth2Token = defaultAccount.authToken; - // For the Today Extensions, if the user has set a non-primary site, use that. NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:WPAppGroupName]; NSNumber *todayExtensionSiteID = [sharedDefaults objectForKey:AppConfigurationWidgetStatsToday.userDefaultsSiteIdKey]; @@ -441,8 +438,7 @@ - (void)setupAppExtensionsWithDefaultAccount:(WPAccount *)defaultAccount inConte [service configureTodayWidgetWithSiteID:todayExtensionSiteID blogName:todayExtensionBlogName blogUrl:todayExtensionBlogUrl - siteTimeZone:timeZone - andOAuth2Token:oauth2Token]; + siteTimeZone:timeZone]; [ShareExtensionService configureShareExtensionDefaultSiteID:siteId.integerValue defaultSiteName:blogName]; [ShareExtensionService configureShareExtensionToken:defaultAccount.authToken]; @@ -456,7 +452,11 @@ - (void)setupAppExtensionsWithDefaultAccount:(WPAccount *)defaultAccount inConte [NotificationSupportService insertServiceExtensionUserID:defaultAccount.userID.stringValue]; }); } - + if (oauth2Token.length > 0) { + dispatch_async(dispatch_get_main_queue(), ^{ + [service configureTodayWidgetOAuth2Token:oauth2Token]; + }); + } } - (void)purgeAccountIfUnused:(WPAccount *)account diff --git a/WordPress/Classes/Services/TodayExtensionService.h b/WordPress/Classes/Services/TodayExtensionService.h index 26c8bdb4fdda..6002f54b0044 100644 --- a/WordPress/Classes/Services/TodayExtensionService.h +++ b/WordPress/Classes/Services/TodayExtensionService.h @@ -2,11 +2,12 @@ @interface TodayExtensionService : NSObject +- (void)configureTodayWidgetOAuth2Token:(NSString *)oauth2Token; + - (void)configureTodayWidgetWithSiteID:(NSNumber *)siteID blogName:(NSString *)blogName blogUrl:(NSString *)blogUrl - siteTimeZone:(NSTimeZone *)timeZone - andOAuth2Token:(NSString *)oauth2Token; + siteTimeZone:(NSTimeZone *)timeZone; - (void)removeTodayWidgetConfiguration; diff --git a/WordPress/Classes/Services/TodayExtensionService.m b/WordPress/Classes/Services/TodayExtensionService.m index edc0442526a4..dd09dde1b92d 100644 --- a/WordPress/Classes/Services/TodayExtensionService.m +++ b/WordPress/Classes/Services/TodayExtensionService.m @@ -5,16 +5,29 @@ @implementation TodayExtensionService +- (void)configureTodayWidgetOAuth2Token:(NSString *)oauth2Token { + NSParameterAssert(oauth2Token.length > 0); + + NSError *error; + [SFHFKeychainUtils storeUsername:AppConfigurationWidgetStats.keychainTokenKey + andPassword:oauth2Token + forServiceName:AppConfigurationWidgetStats.keychainServiceName + accessGroup:WPAppKeychainAccessGroup + updateExisting:YES + error:&error]; + if (error) { + DDLogError(@"Today Widget OAuth2Token error: %@", error); + } +} + - (void)configureTodayWidgetWithSiteID:(NSNumber *)siteID blogName:(NSString *)blogName blogUrl:(NSString *)blogUrl siteTimeZone:(NSTimeZone *)timeZone - andOAuth2Token:(NSString *)oauth2Token { NSParameterAssert(siteID != nil); NSParameterAssert(blogName != nil); NSParameterAssert(timeZone != nil); - NSParameterAssert(oauth2Token.length > 0); NSUserDefaults *sharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:WPAppGroupName]; @@ -30,18 +43,6 @@ - (void)configureTodayWidgetWithSiteID:(NSNumber *)siteID [sharedDefaults setObject:siteID forKey:AppConfigurationWidgetStatsToday.userDefaultsSiteIdKey]; [sharedDefaults setObject:blogName forKey:AppConfigurationWidgetStatsToday.userDefaultsSiteNameKey]; [sharedDefaults setObject:blogUrl forKey:AppConfigurationWidgetStatsToday.userDefaultsSiteUrlKey]; - - NSError *error; - - [SFHFKeychainUtils storeUsername:AppConfigurationWidgetStats.keychainTokenKey - andPassword:oauth2Token - forServiceName:AppConfigurationWidgetStats.keychainServiceName - accessGroup:WPAppKeychainAccessGroup - updateExisting:YES - error:&error]; - if (error) { - DDLogError(@"Today Widget OAuth2Token error: %@", error); - } } - (void)removeTodayWidgetConfiguration diff --git a/WordPress/Classes/ViewRelated/Stats/StatsViewController.m b/WordPress/Classes/ViewRelated/Stats/StatsViewController.m index 356c32b49e31..d110a3a92f87 100644 --- a/WordPress/Classes/ViewRelated/Stats/StatsViewController.m +++ b/WordPress/Classes/ViewRelated/Stats/StatsViewController.m @@ -159,11 +159,11 @@ - (void)saveSiteDetailsForTodayWidget { TodayExtensionService *service = [TodayExtensionService new]; + [service configureTodayWidgetOAuth2Token:SiteStatsInformation.sharedInstance.oauth2Token]; [service configureTodayWidgetWithSiteID:SiteStatsInformation.sharedInstance.siteID blogName:self.blog.settings.name blogUrl:self.blog.displayURL - siteTimeZone:SiteStatsInformation.sharedInstance.siteTimeZone - andOAuth2Token:SiteStatsInformation.sharedInstance.oauth2Token]; + siteTimeZone:SiteStatsInformation.sharedInstance.siteTimeZone]; }