Change Auth Service to only handle credentials

This commit is contained in:
Hank Grabowski 2023-02-24 16:36:20 -05:00
parent c03a5b7b19
commit 7a22adb9d6
15 changed files with 99 additions and 71 deletions

View file

@ -39,8 +39,7 @@ class FriendicaClient {
Credentials get credentials => _credentials;
FriendicaClient({required Credentials credentials})
: _credentials = credentials {
FriendicaClient(Credentials credentials) : _credentials = credentials {
_networkStatusService = getIt<NetworkStatusService>();
}

View file

@ -9,6 +9,7 @@ import 'package:path/path.dart' as p;
import 'package:path_provider/path_provider.dart';
import 'package:relatica/utils/clipboard_utils.dart';
import '../friendica_client/friendica_client.dart';
import '../globals.dart';
import '../models/media_attachment.dart';
import '../services/auth_service.dart';
@ -45,7 +46,8 @@ class _ImageViewerScreenState extends State<ImageViewerScreen> {
final appsDir = await getApplicationDocumentsDirectory();
final filename = p.basename(attachment.fullFileUri.path);
final bytesResult =
await getIt<AuthService>().currentClient.getFileBytes(attachment.uri);
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getFileBytes(attachment.uri);
if (bytesResult.isFailure && mounted) {
buildSnackbar(context,
'Error getting full size version of file: ${bytesResult.error}');

View file

@ -47,9 +47,8 @@ class _MessageThreadScreenState extends State<MessageThreadScreen> {
) {
return result.fold(
onSuccess: (thread) {
final yourId = getIt<AuthService>().currentClient.credentials.userId;
final yourAvatarUrl =
getIt<AuthService>().currentClient.credentials.avatar;
final yourId = getIt<AuthService>().currentCredentials.userId;
final yourAvatarUrl = getIt<AuthService>().currentCredentials.avatar;
final participants =
Map.fromEntries(thread.participants.map((p) => MapEntry(p.id, p)));
return Center(

View file

@ -21,7 +21,7 @@ class _ProfileScreenState extends State<ProfileScreen> {
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Profile: ${authService.currentClient.credentials.handle}'),
Text('Profile: ${authService.currentCredentials.handle}'),
],
),
),

View file

@ -43,7 +43,7 @@ class _UserProfileScreenState extends State<UserProfileScreen> {
final manager = context.watch<ConnectionsManager>();
final body = manager.getById(widget.userId).fold(onSuccess: (profile) {
final notMyProfile =
getIt<AuthService>().currentClient.credentials.userId != profile.id;
getIt<AuthService>().currentCredentials.userId != profile.id;
return RefreshIndicator(
onRefresh: () async {

View file

@ -41,14 +41,14 @@ extension DirectMessageFriendicaExtension on DirectMessage {
final String parentUri = json['friendica_parent_uri'];
final cm = getIt<ConnectionsManager>();
if (getIt<AuthService>().currentClient.credentials.userId != senderId) {
if (getIt<AuthService>().currentCredentials.userId != senderId) {
final s = ConnectionFriendicaExtensions.fromJson(json['sender']);
if (cm.getById(s.id).isFailure) {
cm.addConnection(s);
}
}
if (getIt<AuthService>().currentClient.credentials.userId != recipientId) {
if (getIt<AuthService>().currentCredentials.userId != recipientId) {
final r = ConnectionFriendicaExtensions.fromJson(json['recipient']);
if (cm.getById(r.id).isFailure) {
cm.addConnection(r);

View file

@ -20,7 +20,7 @@ extension ConnectionMastodonExtensions on Connection {
if (handleFromJson.contains('@')) {
handle = handleFromJson;
} else {
final server = getIt<AuthService>().currentClient.serverName;
final server = getIt<AuthService>().currentCredentials.serverName;
handle = '$handleFromJson@$server';
}

View file

@ -10,13 +10,13 @@ import 'secrets_service.dart';
import 'timeline_manager.dart';
class AuthService extends ChangeNotifier {
FriendicaClient? _friendicaClient;
Credentials? _currentCredentials;
bool _loggedIn = false;
bool get loggedIn => _loggedIn && _friendicaClient != null;
bool get loggedIn => _loggedIn && _currentCredentials != null;
Credentials get currentCredentials => _currentCredentials!;
FriendicaClient get currentClient => _friendicaClient!;
Future<bool> getStoredLoginState() async {
final prefs = await SharedPreferences.getInstance();
return prefs.getBool('logged-in') ?? false;
@ -24,7 +24,7 @@ class AuthService extends ChangeNotifier {
FutureResult<FriendicaClient, ExecError> signIn(
Credentials credentials) async {
final client = FriendicaClient(credentials: credentials);
final client = FriendicaClient(credentials);
final result = await client.getMyProfile();
if (result.isFailure) {
await clearCredentials();
@ -38,7 +38,7 @@ class AuthService extends ChangeNotifier {
),
);
await _setLoginState(true);
_friendicaClient = client;
_currentCredentials = credentials;
notifyListeners();
return Result.ok(client);
}
@ -46,12 +46,12 @@ class AuthService extends ChangeNotifier {
Future signOut() async {
await _setLoginState(false);
getIt<TimelineManager>().clear();
_friendicaClient = null;
_currentCredentials = null;
notifyListeners();
}
Future clearCredentials() async {
_friendicaClient = null;
_currentCredentials = null;
await _setLoginState(false);
notifyListeners();
}

View file

@ -7,6 +7,7 @@ import 'package:result_monad/result_monad.dart';
import '../data/interfaces/connections_repo_intf.dart';
import '../data/interfaces/groups_repo.intf.dart';
import '../friendica_client/friendica_client.dart';
import '../friendica_client/paging_data.dart';
import '../globals.dart';
import '../models/connection.dart';
@ -43,7 +44,9 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> acceptFollowRequest(Connection connection) async {
_logger.finest(
'Attempting to accept follow request ${connection.name}: ${connection.status}');
await getIt<AuthService>().currentClient.acceptFollow(connection).match(
await FriendicaClient(getIt<AuthService>().currentCredentials)
.acceptFollow(connection)
.match(
onSuccess: (update) {
_logger
.finest('Successfully followed ${update.name}: ${update.status}');
@ -59,7 +62,9 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> rejectFollowRequest(Connection connection) async {
_logger.finest(
'Attempting to accept follow request ${connection.name}: ${connection.status}');
await getIt<AuthService>().currentClient.rejectFollow(connection).match(
await FriendicaClient(getIt<AuthService>().currentCredentials)
.rejectFollow(connection)
.match(
onSuccess: (update) {
_logger
.finest('Successfully followed ${update.name}: ${update.status}');
@ -75,7 +80,9 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> ignoreFollowRequest(Connection connection) async {
_logger.finest(
'Attempting to accept follow request ${connection.name}: ${connection.status}');
await getIt<AuthService>().currentClient.ignoreFollow(connection).match(
await FriendicaClient(getIt<AuthService>().currentCredentials)
.ignoreFollow(connection)
.match(
onSuccess: (update) {
_logger
.finest('Successfully followed ${update.name}: ${update.status}');
@ -91,7 +98,9 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> follow(Connection connection) async {
_logger.finest(
'Attempting to follow ${connection.name}: ${connection.status}');
await getIt<AuthService>().currentClient.followConnection(connection).match(
await FriendicaClient(getIt<AuthService>().currentCredentials)
.followConnection(connection)
.match(
onSuccess: (update) {
_logger
.finest('Successfully followed ${update.name}: ${update.status}');
@ -107,8 +116,7 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> unfollow(Connection connection) async {
_logger.finest(
'Attempting to unfollow ${connection.name}: ${connection.status}');
await getIt<AuthService>()
.currentClient
await FriendicaClient(getIt<AuthService>().currentCredentials)
.unFollowConnection(connection)
.match(
onSuccess: (update) {
@ -129,7 +137,7 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> updateAllContacts() async {
_logger.fine('Updating all contacts');
final client = getIt<AuthService>().currentClient;
final client = FriendicaClient(getIt<AuthService>().currentCredentials);
final results = <String, Connection>{};
var moreResults = true;
var maxId = -1;
@ -206,9 +214,9 @@ class ConnectionsManager extends ChangeNotifier {
FutureResult<bool, ExecError> addUserToGroup(
GroupData group, Connection connection) async {
_logger.finest('Adding ${connection.name} to group: ${group.name}');
final result = await getIt<AuthService>()
.currentClient
.addConnectionToGroup(group, connection);
final result =
await FriendicaClient(getIt<AuthService>().currentCredentials)
.addConnectionToGroup(group, connection);
result.match(
onSuccess: (_) => _refreshGroupListData(connection.id, true),
onError: (error) {
@ -223,9 +231,9 @@ class ConnectionsManager extends ChangeNotifier {
FutureResult<bool, ExecError> removeUserFromGroup(
GroupData group, Connection connection) async {
_logger.finest('Removing ${connection.name} from group: ${group.name}');
final result = await getIt<AuthService>()
.currentClient
.removeConnectionFromGroup(group, connection);
final result =
await FriendicaClient(getIt<AuthService>().currentCredentials)
.removeConnectionFromGroup(group, connection);
result.match(
onSuccess: (_) => _refreshGroupListData(connection.id, true),
onError: (error) {
@ -273,8 +281,7 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> _refreshGroupListData(String id, bool withNotification) async {
_logger.finest('Refreshing member list data for Connection $id');
await getIt<AuthService>()
.currentClient
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getMemberGroupsForConnection(id)
.match(
onSuccess: (groups) {
@ -292,8 +299,7 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> _refreshConnection(
Connection connection, bool withNotification) async {
_logger.finest('Refreshing connection data for ${connection.name}');
await getIt<AuthService>()
.currentClient
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getConnectionWithStatus(connection)
.match(
onSuccess: (update) {
@ -310,7 +316,9 @@ class ConnectionsManager extends ChangeNotifier {
Future<void> _updateMyGroups(bool withNotification) async {
_logger.finest('Refreshing my groups list');
await getIt<AuthService>().currentClient.getGroups().match(
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getGroups()
.match(
onSuccess: (groups) {
_logger.finest('Got updated groups:${groups.map((e) => e.name)}');
groupsRepo.clearGroups();

View file

@ -2,6 +2,7 @@ import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart';
import 'package:result_monad/result_monad.dart';
import '../friendica_client/friendica_client.dart';
import '../friendica_client/paging_data.dart';
import '../globals.dart';
import '../models/connection.dart';
@ -36,8 +37,7 @@ class DirectMessageService extends ChangeNotifier {
}
Future<void> updateThreads() async {
await getIt<AuthService>()
.currentClient
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getDirectMessages(PagingData())
.match(
onSuccess: (update) {
@ -61,11 +61,13 @@ class DirectMessageService extends ChangeNotifier {
FutureResult<DirectMessage, ExecError> newThread(
Connection receiver, String text) async {
final result = await getIt<AuthService>().currentClient.postDirectMessage(
null,
receiver.id,
text,
);
final result =
await FriendicaClient(getIt<AuthService>().currentCredentials)
.postDirectMessage(
null,
receiver.id,
text,
);
result.match(onSuccess: (newMessage) {
DirectMessageThread.createThreads([newMessage]).forEach((thread) {
_threads[thread.parentUri] = thread;
@ -99,11 +101,13 @@ class DirectMessageService extends ChangeNotifier {
);
}
final result = await getIt<AuthService>().currentClient.postDirectMessage(
original.id,
original.senderId,
text,
);
final result =
await FriendicaClient(getIt<AuthService>().currentCredentials)
.postDirectMessage(
original.id,
original.senderId,
text,
);
result.match(onSuccess: (newMessage) {
thread.messages.add(newMessage);
notifyListeners();
@ -126,7 +130,9 @@ class DirectMessageService extends ChangeNotifier {
return;
}
await getIt<AuthService>().currentClient.markDirectMessageRead(m).match(
await FriendicaClient(getIt<AuthService>().currentCredentials)
.markDirectMessageRead(m)
.match(
onSuccess: (update) {
thread.messages.removeAt(oldIndex);
thread.messages.insert(oldIndex, update);

View file

@ -43,7 +43,7 @@ class EntryManagerService extends ChangeNotifier {
Result<EntryTreeItem, ExecError> getPostTreeEntryBy(String id) {
_logger.finest('Getting post: $id');
final currentId = getIt<AuthService>().currentClient.credentials.userId;
final currentId = getIt<AuthService>().currentCredentials.userId;
final postNode = _getPostRootNode(id);
if (postNode == null) {
return Result.error(ExecError(
@ -68,7 +68,9 @@ class EntryManagerService extends ChangeNotifier {
FutureResult<bool, ExecError> deleteEntryById(String id) async {
_logger.finest('Delete entry: $id');
final result = await getIt<AuthService>().currentClient.deleteEntryById(id);
final result =
await FriendicaClient(getIt<AuthService>().currentCredentials)
.deleteEntryById(id);
if (result.isFailure) {
return result.errorCast();
}
@ -86,7 +88,7 @@ class EntryManagerService extends ChangeNotifier {
required List<ImageEntry> existingMediaItems,
}) async {
_logger.finest('Creating new post: $text');
final client = getIt<AuthService>().currentClient;
final client = FriendicaClient(getIt<AuthService>().currentCredentials);
final mediaIds = existingMediaItems.map((m) => m.scales.first.id).toList();
for (final item in mediaItems.attachments) {
if (item.isExistingServerItem) {
@ -166,7 +168,7 @@ class EntryManagerService extends ChangeNotifier {
FutureResult<List<EntryTreeItem>, ExecError> updateTimeline(
TimelineIdentifiers type, int maxId, int sinceId) async {
_logger.fine(() => 'Updating timeline');
final client = getIt<AuthService>().currentClient;
final client = FriendicaClient(getIt<AuthService>().currentCredentials);
final itemsResult = await client.getTimeline(
type: type,
page: PagingData(
@ -301,7 +303,7 @@ class EntryManagerService extends ChangeNotifier {
FutureResult<EntryTreeItem, ExecError> refreshStatusChain(String id) async {
_logger.finest('Refreshing post: $id');
final client = getIt<AuthService>().currentClient;
final client = FriendicaClient(getIt<AuthService>().currentCredentials);
final result = await client
.getPostOrComment(id, fullContext: false)
.andThenAsync((rootItems) async => await client
@ -328,7 +330,7 @@ class EntryManagerService extends ChangeNotifier {
FutureResult<EntryTreeItem, ExecError> resharePost(String id) async {
_logger.finest('Resharing post: $id');
final client = getIt<AuthService>().currentClient;
final client = FriendicaClient(getIt<AuthService>().currentCredentials);
final result =
await client.resharePost(id).andThenSuccessAsync((item) async {
await processNewItems([item], client.credentials.username, null);
@ -350,7 +352,7 @@ class EntryManagerService extends ChangeNotifier {
FutureResult<bool, ExecError> unResharePost(String id) async {
_logger.finest('Unresharing post: $id');
final client = getIt<AuthService>().currentClient;
final client = FriendicaClient(getIt<AuthService>().currentCredentials);
final result =
await client.unResharePost(id).andThenSuccessAsync((item) async {
await processNewItems([item], client.credentials.username, null);
@ -368,7 +370,7 @@ class EntryManagerService extends ChangeNotifier {
FutureResult<EntryTreeItem, ExecError> toggleFavorited(
String id, bool newStatus) async {
final client = getIt<AuthService>().currentClient;
final client = FriendicaClient(getIt<AuthService>().currentCredentials);
final result = await client.changeFavoriteStatus(id, newStatus);
if (result.isFailure) {
return result.errorCast();

View file

@ -1,6 +1,7 @@
import 'package:flutter/foundation.dart';
import 'package:result_monad/result_monad.dart';
import '../friendica_client/friendica_client.dart';
import '../friendica_client/paging_data.dart';
import '../globals.dart';
import '../models/exec_error.dart';
@ -39,7 +40,9 @@ class GalleryService extends ChangeNotifier {
}
FutureResult<List<GalleryData>, ExecError> updateGalleries() async {
final result = await getIt<AuthService>().currentClient.getGalleryData();
final result =
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getGalleryData();
if (result.isFailure) {
return result.errorCast();
}
@ -88,9 +91,9 @@ class GalleryService extends ChangeNotifier {
final pagesToUse = nextPageOnly ? [pages.last] : pages;
for (final page in pagesToUse) {
final result = await getIt<AuthService>()
.currentClient
.getGalleryImages(galleryName, page);
final result =
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getGalleryImages(galleryName, page);
if (result.isFailure) {
return result.errorCast();
}

View file

@ -1,6 +1,7 @@
import 'package:flutter/foundation.dart';
import 'package:result_monad/result_monad.dart';
import '../friendica_client/friendica_client.dart';
import '../globals.dart';
import '../models/connection.dart';
import '../models/exec_error.dart';
@ -31,7 +32,8 @@ class InteractionsManager extends ChangeNotifier {
FutureResult<List<Connection>, ExecError> updateLikesForStatus(
String statusId) async {
final likesResult =
await getIt<AuthService>().currentClient.getLikes(statusId);
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getLikes(statusId);
if (likesResult.isSuccess) {
_likesByStatusId[statusId] = likesResult.value;
notifyListeners();
@ -42,7 +44,8 @@ class InteractionsManager extends ChangeNotifier {
FutureResult<List<Connection>, ExecError> updateResharesForStatus(
String statusId) async {
final resharesResult =
await getIt<AuthService>().currentClient.getReshares(statusId);
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getReshares(statusId);
if (resharesResult.isSuccess) {
_resharesByStatusId[statusId] = resharesResult.value;
notifyListeners();

View file

@ -4,6 +4,7 @@ import 'package:relatica/services/network_status_service.dart';
import 'package:result_monad/result_monad.dart';
import 'package:uuid/uuid.dart';
import '../friendica_client/friendica_client.dart';
import '../friendica_client/paged_response.dart';
import '../friendica_client/pages_manager.dart';
import '../friendica_client/paging_data.dart';
@ -127,9 +128,9 @@ class NotificationsManager extends ChangeNotifier {
}
FutureResult<bool, ExecError> markSeen(UserNotification notification) async {
final result = await getIt<AuthService>()
.currentClient
.clearNotification(notification);
final result =
await FriendicaClient(getIt<AuthService>().currentCredentials)
.clearNotification(notification);
if (result.isSuccess) {
notifyListeners();
}
@ -140,7 +141,8 @@ class NotificationsManager extends ChangeNotifier {
FutureResult<List<UserNotification>, ExecError> markAllAsRead() async {
final result =
await getIt<AuthService>().currentClient.clearNotifications();
await FriendicaClient(getIt<AuthService>().currentCredentials)
.clearNotifications();
if (result.isFailure) {
return result.errorCast();
}
@ -151,7 +153,7 @@ class NotificationsManager extends ChangeNotifier {
}
List<UserNotification> buildUnreadMessageNotifications() {
final myId = getIt<AuthService>().currentClient.credentials.userId;
final myId = getIt<AuthService>().currentCredentials.userId;
final result =
getIt<DirectMessageService>().getThreads(unreadyOnly: true).map((t) {
final fromAccount = t.participants.firstWhere((p) => p.id != myId);
@ -176,7 +178,8 @@ class NotificationsManager extends ChangeNotifier {
static FutureResult<PagedResponse<List<UserNotification>>, ExecError>
_clientGetNotificationsRequest(PagingData page) async {
final result =
await getIt<AuthService>().currentClient.getNotifications(page);
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getNotifications(page);
return result;
}
}

View file

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:logging/logging.dart';
import 'package:result_monad/result_monad.dart';
import '../friendica_client/friendica_client.dart';
import '../globals.dart';
import '../models/TimelineIdentifiers.dart';
import '../models/entry_tree_item.dart';
@ -45,7 +46,9 @@ class TimelineManager extends ChangeNotifier {
Future<void> _refreshGroupData() async {
_logger.finest('Refreshing member group data ');
await getIt<AuthService>().currentClient.getGroups().match(
await FriendicaClient(getIt<AuthService>().currentCredentials)
.getGroups()
.match(
onSuccess: (groups) {
_groups.clear();
for (final group in groups) {