-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
TW-2220: Extract fed server in well-know API
- Loading branch information
Showing
17 changed files
with
442 additions
and
9 deletions.
There are no files selected for viewing
12 changes: 12 additions & 0 deletions
12
lib/data/datasource/federation_configurations_datasource.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
import 'package:fluffychat/data/model/federation_server/federation_configuration.dart'; | ||
|
||
abstract class FederationConfigurationsDatasource { | ||
Future<FederationConfigurations> getFederationConfigurations(String userId); | ||
|
||
Future<void> saveFederationConfigurations( | ||
String userId, | ||
FederationConfigurations federationConfiguration, | ||
); | ||
|
||
Future<void> deleteFederationConfigurations(String userId); | ||
} |
68 changes: 68 additions & 0 deletions
68
lib/data/datasource_impl/federation_configurations_datasource_impl.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
import 'package:fluffychat/data/datasource/federation_configurations_datasource.dart'; | ||
import 'package:fluffychat/data/hive/dto/federation_configurations_hive_obj.dart'; | ||
import 'package:fluffychat/data/hive/hive_collection_tom_database.dart'; | ||
import 'package:fluffychat/data/model/federation_server/federation_configuration.dart'; | ||
import 'package:fluffychat/di/global/get_it_initializer.dart'; | ||
import 'package:fluffychat/domain/exception/federation_configuration_not_found.dart'; | ||
import 'package:matrix/matrix.dart'; | ||
|
||
class HiveFederationConfigurationsDatasourceImpl | ||
implements FederationConfigurationsDatasource { | ||
@override | ||
Future<FederationConfigurations> getFederationConfigurations( | ||
String userId, | ||
) async { | ||
final hiveCollectionFederationDatabase = | ||
await getIt.getAsync<HiveCollectionToMDatabase>(); | ||
final cachedFederationConfigurations = | ||
await hiveCollectionFederationDatabase.federationConfigurationsBox | ||
.get(userId); | ||
if (cachedFederationConfigurations != null) { | ||
final federationConfigurationsHiveObj = | ||
FederationConfigurationsHiveObj.fromJson( | ||
copyMap( | ||
cachedFederationConfigurations, | ||
), | ||
); | ||
|
||
return FederationConfigurations( | ||
fedServerInformation: federationConfigurationsHiveObj | ||
.federationServerInformation | ||
.toFederationServerInformation(), | ||
identityServerInformation: | ||
federationConfigurationsHiveObj.identityServerUrl != null | ||
? IdentityServerInformation( | ||
baseUrl: Uri.parse( | ||
federationConfigurationsHiveObj.identityServerUrl!, | ||
), | ||
) | ||
: null, | ||
); | ||
} | ||
throw FederationConfigurationNotFound(); | ||
} | ||
|
||
@override | ||
Future<void> saveFederationConfigurations( | ||
String userId, | ||
FederationConfigurations federationConfiguration, | ||
) async { | ||
final hiveCollectionFederationDatabase = | ||
await getIt.getAsync<HiveCollectionToMDatabase>(); | ||
return hiveCollectionFederationDatabase.federationConfigurationsBox.put( | ||
userId, | ||
FederationConfigurationsHiveObj.fromFederationConfigurations( | ||
federationConfiguration, | ||
).toJson(), | ||
); | ||
} | ||
|
||
@override | ||
Future<void> deleteFederationConfigurations(String userId) async { | ||
final hiveCollectionFederationDatabase = | ||
getIt.get<HiveCollectionToMDatabase>(); | ||
return hiveCollectionFederationDatabase.federationConfigurationsBox.delete( | ||
userId, | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
import 'package:equatable/equatable.dart'; | ||
import 'package:fluffychat/data/hive/dto/federation_server_information_hive_obj.dart'; | ||
import 'package:fluffychat/data/model/federation_server/federation_configuration.dart'; | ||
import 'package:json_annotation/json_annotation.dart'; | ||
|
||
part 'federation_configurations_hive_obj.g.dart'; | ||
|
||
@JsonSerializable(explicitToJson: true) | ||
class FederationConfigurationsHiveObj with EquatableMixin { | ||
final FederationServerInformationHiveObj federationServerInformation; | ||
|
||
final String? identityServerUrl; | ||
|
||
FederationConfigurationsHiveObj({ | ||
required this.federationServerInformation, | ||
required this.identityServerUrl, | ||
}); | ||
|
||
factory FederationConfigurationsHiveObj.fromFederationConfigurations( | ||
FederationConfigurations federationConfigurations, | ||
) { | ||
return FederationConfigurationsHiveObj( | ||
federationServerInformation: | ||
FederationServerInformationHiveObj.fromFederationServerInformation( | ||
federationConfigurations.fedServerInformation, | ||
), | ||
identityServerUrl: federationConfigurations | ||
.identityServerInformation?.baseUrl | ||
.toString(), | ||
); | ||
} | ||
|
||
factory FederationConfigurationsHiveObj.fromJson(Map<String, dynamic> json) => | ||
_$FederationConfigurationsHiveObjFromJson(json); | ||
|
||
Map<String, dynamic> toJson() => | ||
_$FederationConfigurationsHiveObjToJson(this); | ||
|
||
@override | ||
List<Object?> get props => [ | ||
federationServerInformation, | ||
identityServerUrl, | ||
]; | ||
} |
40 changes: 40 additions & 0 deletions
40
lib/data/hive/dto/federation_server_information_hive_obj.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import 'package:equatable/equatable.dart'; | ||
import 'package:fluffychat/data/model/federation_server/federation_server_information.dart'; | ||
import 'package:json_annotation/json_annotation.dart'; | ||
|
||
part 'federation_server_information_hive_obj.g.dart'; | ||
|
||
@JsonSerializable(explicitToJson: true) | ||
class FederationServerInformationHiveObj with EquatableMixin { | ||
final List<String>? baseUrls; | ||
|
||
FederationServerInformationHiveObj({ | ||
required this.baseUrls, | ||
}); | ||
|
||
factory FederationServerInformationHiveObj.fromJson( | ||
Map<String, dynamic> json, | ||
) => | ||
_$FederationServerInformationHiveObjFromJson(json); | ||
|
||
Map<String, dynamic> toJson() => | ||
_$FederationServerInformationHiveObjToJson(this); | ||
|
||
FederationServerInformation toFederationServerInformation() { | ||
return FederationServerInformation( | ||
baseUrls: baseUrls?.map((e) => Uri.parse(e)).toList(), | ||
); | ||
} | ||
|
||
factory FederationServerInformationHiveObj.fromFederationServerInformation( | ||
FederationServerInformation fedServerInformation, | ||
) { | ||
return FederationServerInformationHiveObj( | ||
baseUrls: | ||
fedServerInformation.baseUrls?.map((e) => e.toString()).toList(), | ||
); | ||
} | ||
|
||
@override | ||
List<Object?> get props => [baseUrls]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
lib/data/model/federation_server/federation_configuration.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import 'package:equatable/equatable.dart'; | ||
import 'package:fluffychat/data/model/federation_server/federation_server_information.dart'; | ||
import 'package:matrix/matrix.dart'; | ||
|
||
class FederationConfigurations with EquatableMixin { | ||
final FederationServerInformation fedServerInformation; | ||
final IdentityServerInformation? identityServerInformation; | ||
|
||
FederationConfigurations({ | ||
required this.fedServerInformation, | ||
this.identityServerInformation, | ||
}); | ||
|
||
@override | ||
List<Object?> get props => [ | ||
fedServerInformation, | ||
identityServerInformation, | ||
]; | ||
} |
24 changes: 24 additions & 0 deletions
24
lib/data/model/federation_server/federation_server_information.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
import 'package:equatable/equatable.dart'; | ||
import 'package:json_annotation/json_annotation.dart'; | ||
|
||
part 'federation_server_information.g.dart'; | ||
|
||
@JsonSerializable() | ||
class FederationServerInformation with EquatableMixin { | ||
static const String fedServerKey = 'm.federated_identity_services'; | ||
|
||
@JsonKey(name: 'base_urls') | ||
final List<Uri>? baseUrls; | ||
|
||
FederationServerInformation({ | ||
this.baseUrls, | ||
}); | ||
|
||
factory FederationServerInformation.fromJson(Map<String, dynamic> json) => | ||
_$FederationServerInformationFromJson(json); | ||
|
||
Map<String, dynamic> toJson() => _$FederationServerInformationToJson(this); | ||
|
||
@override | ||
List<Object?> get props => [baseUrls]; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
import 'package:equatable/equatable.dart'; | ||
import 'package:json_annotation/json_annotation.dart'; | ||
|
||
part 'fed_token_information.g.dart'; | ||
|
||
@JsonSerializable() | ||
class FedTokenInformation with EquatableMixin { | ||
@JsonKey(name: 'access_token') | ||
final String? fedAccessToken; | ||
@JsonKey(name: 'token_type') | ||
final String? fedTokenType; | ||
@JsonKey(name: 'matrix_server_name') | ||
final String? matrixServerName; | ||
@JsonKey(name: 'expires_in') | ||
final int? fedTokenExpiresIn; | ||
|
||
FedTokenInformation({ | ||
this.fedAccessToken, | ||
this.fedTokenType, | ||
this.matrixServerName, | ||
this.fedTokenExpiresIn, | ||
}); | ||
|
||
factory FedTokenInformation.fromJson(Map<String, dynamic> json) => | ||
_$FedTokenInformationFromJson(json); | ||
|
||
Map<String, dynamic> toJson() => _$FedTokenInformationToJson(this); | ||
|
||
@override | ||
List<Object?> get props => [ | ||
fedAccessToken, | ||
fedTokenType, | ||
matrixServerName, | ||
fedTokenExpiresIn, | ||
]; | ||
} |
34 changes: 34 additions & 0 deletions
34
lib/data/repository/federation_configurations_repository_impl.dart
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
import 'package:fluffychat/data/datasource/federation_configurations_datasource.dart'; | ||
import 'package:fluffychat/data/model/federation_server/federation_configuration.dart'; | ||
import 'package:fluffychat/di/global/get_it_initializer.dart'; | ||
import 'package:fluffychat/domain/repository/federation_configurations_repository.dart'; | ||
|
||
class FederationConfigurationsRepositoryImpl | ||
implements FederationConfigurationsRepository { | ||
final FederationConfigurationsDatasource federationConfigurationsDatasource = | ||
getIt.get<FederationConfigurationsDatasource>(); | ||
|
||
@override | ||
Future<FederationConfigurations> getFederationConfigurations(String userId) { | ||
return federationConfigurationsDatasource | ||
.getFederationConfigurations(userId); | ||
} | ||
|
||
@override | ||
Future<void> saveFederationConfigurations( | ||
String userId, | ||
FederationConfigurations federationConfigurations, | ||
) { | ||
return federationConfigurationsDatasource.saveFederationConfigurations( | ||
userId, | ||
federationConfigurations, | ||
); | ||
} | ||
|
||
@override | ||
Future<void> deleteFederationConfigurations(String userId) { | ||
return federationConfigurationsDatasource.deleteFederationConfigurations( | ||
userId, | ||
); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
class FederationConfigurationNotFound implements Exception { | ||
FederationConfigurationNotFound() : super(); | ||
} |
Oops, something went wrong.