feat: add data sources
This commit is contained in:
parent
3972c56e55
commit
2f572db4a4
19
packages/wyatt_authentication_bloc/lib/src/data/data.dart
Normal file
19
packages/wyatt_authentication_bloc/lib/src/data/data.dart
Normal file
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export 'data_sources/data_sources.dart';
|
||||
export 'models/models.dart';
|
||||
export 'repositories/repositories.dart';
|
@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export 'local/authentication_cache_data_source_impl.dart';
|
||||
export 'remote/authentication_firebase_data_source_impl.dart';
|
@ -0,0 +1,60 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
import 'package:wyatt_authentication_bloc/src/domain/data_sources/local/authentication_local_data_source.dart';
|
||||
import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart';
|
||||
import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||
|
||||
class AuthenticationCacheDataSourceImpl<T extends Object>
|
||||
extends AuthenticationLocalDataSource<T> {
|
||||
Account? _account;
|
||||
T? _data;
|
||||
|
||||
AuthenticationCacheDataSourceImpl();
|
||||
|
||||
@override
|
||||
void storeAccount(Account? account) {
|
||||
_account = account;
|
||||
}
|
||||
|
||||
@override
|
||||
void storeData(T? data) {
|
||||
_data = data;
|
||||
}
|
||||
|
||||
@override
|
||||
Account loadAccount() {
|
||||
if (_account.isNotNull) {
|
||||
return _account!;
|
||||
}
|
||||
throw ClientException('Cached account is invalid');
|
||||
}
|
||||
|
||||
@override
|
||||
T loadData() {
|
||||
if (_data.isNotNull) {
|
||||
return _data!;
|
||||
}
|
||||
throw ClientException('Cached data is invalid');
|
||||
}
|
||||
|
||||
@override
|
||||
void destroy() {
|
||||
_data = null;
|
||||
_account = null;
|
||||
}
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
|
||||
import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||
|
||||
class AuthenticationFirebaseDataSourceImpl
|
||||
extends AuthenticationRemoteDataSource {
|
||||
final FirebaseAuth _firebaseAuth;
|
||||
|
||||
AuthenticationFirebaseDataSourceImpl({FirebaseAuth? firebaseAuth})
|
||||
: _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance;
|
||||
|
||||
Account _mapper(User user) => AccountModel(
|
||||
uid: user.uid,
|
||||
email: user.email,
|
||||
);
|
||||
|
||||
@override
|
||||
Future<Account> signInWithEmailAndPassword({
|
||||
required String email,
|
||||
required String password,
|
||||
}) async {
|
||||
try {
|
||||
final userCredential = await _firebaseAuth.signInWithEmailAndPassword(
|
||||
email: email,
|
||||
password: password,
|
||||
);
|
||||
final user = userCredential.user;
|
||||
if (user.isNotNull) {
|
||||
return _mapper(user!);
|
||||
} else {
|
||||
throw Exception(); // Get caught just after.
|
||||
}
|
||||
} on FirebaseAuthException catch (e) {
|
||||
throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code);
|
||||
} catch (_) {
|
||||
throw SignInWithEmailAndPasswordFailureFirebase();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<Account> signUp({
|
||||
required String email,
|
||||
required String password,
|
||||
}) async {
|
||||
try {
|
||||
final userCredential = await _firebaseAuth.createUserWithEmailAndPassword(
|
||||
email: email,
|
||||
password: password,
|
||||
);
|
||||
final user = userCredential.user;
|
||||
if (user.isNotNull) {
|
||||
return _mapper(user!);
|
||||
} else {
|
||||
throw Exception(); // Get caught just after.
|
||||
}
|
||||
} on FirebaseAuthException catch (e) {
|
||||
throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code);
|
||||
} catch (_) {
|
||||
throw SignUpWithEmailAndPasswordFailureFirebase();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> signOut() async {
|
||||
try {
|
||||
await _firebaseAuth.signOut();
|
||||
} catch (_) {
|
||||
throw SignOutFailureFirebase();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<String> getIdentityToken() async {
|
||||
try {
|
||||
final token = await _firebaseAuth.currentUser?.getIdToken();
|
||||
if (token.isNotNull) {
|
||||
return token!;
|
||||
} else {
|
||||
throw Exception(); // Get caught just after.
|
||||
}
|
||||
} catch (_) {
|
||||
// TODO(hpcl): implement a non ambiguous exception for this case
|
||||
throw ServerException();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Stream<Account?> streamAccount() =>
|
||||
_firebaseAuth.userChanges().map<Account?>((user) {
|
||||
final Account? account = (user.isNotNull) ? _mapper(user!) : null;
|
||||
return account;
|
||||
});
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart';
|
||||
|
||||
class AccountModel implements Account {
|
||||
@override
|
||||
final String uid;
|
||||
|
||||
@override
|
||||
final String? email;
|
||||
|
||||
AccountModel({required this.uid, required this.email});
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart';
|
||||
import 'package:wyatt_authentication_bloc/src/domain/entities/account_wrapper.dart';
|
||||
|
||||
class AccountWrapperModel<T> extends AccountWrapper<T> {
|
||||
@override
|
||||
final Account? account;
|
||||
@override
|
||||
final T? data;
|
||||
|
||||
AccountWrapperModel(this.account, this.data);
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export 'account_model.dart';
|
||||
export 'account_wrapper_model.dart';
|
@ -1,82 +0,0 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
import 'package:wyatt_authentication_bloc/src/domain/entities/user.dart' as wyatt;
|
||||
|
||||
class UserFirebase implements wyatt.User {
|
||||
final User? _user;
|
||||
|
||||
const UserFirebase(User user) : _user = user;
|
||||
|
||||
User? get inner => _user;
|
||||
|
||||
@override
|
||||
const UserFirebase.empty() : _user = null;
|
||||
|
||||
@override
|
||||
DateTime? get creationTime => _user?.metadata.creationTime;
|
||||
|
||||
@override
|
||||
String? get displayName => _user?.displayName;
|
||||
|
||||
@override
|
||||
String? get email => _user?.email;
|
||||
|
||||
@override
|
||||
bool get emailVerified => _user?.emailVerified ?? false;
|
||||
|
||||
@override
|
||||
bool get isAnonymous => _user?.isAnonymous ?? false;
|
||||
|
||||
@override
|
||||
bool get isEmpty => _user == null;
|
||||
|
||||
@override
|
||||
bool get isNotEmpty => _user != null;
|
||||
|
||||
@override
|
||||
DateTime? get lastSignInTime => _user?.metadata.lastSignInTime;
|
||||
|
||||
@override
|
||||
String? get phoneNumber => _user?.phoneNumber;
|
||||
|
||||
@override
|
||||
String? get photoURL => _user?.photoURL;
|
||||
|
||||
@override
|
||||
String? get refreshToken => _user?.refreshToken;
|
||||
|
||||
@override
|
||||
String get uid => _user?.uid ?? '';
|
||||
|
||||
@override
|
||||
String? get providerId => _user?.providerData.first.providerId;
|
||||
|
||||
@override
|
||||
bool? get isNewUser {
|
||||
if (_user?.metadata.lastSignInTime == null ||
|
||||
_user?.metadata.creationTime == null) {
|
||||
return null;
|
||||
} else {
|
||||
return _user?.metadata.lastSignInTime == _user?.metadata.creationTime;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
// ignore: lines_longer_than_80_chars
|
||||
String toString() => 'UserFirebase(creationTime: $creationTime, displayName: $displayName, email: $email, emailVerified: $emailVerified, isAnonymous: $isAnonymous, lastSignInTime: $lastSignInTime, phoneNumber: $phoneNumber, photoURL: $photoURL, refreshToken: $refreshToken, uid: $uid)';
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
export 'local/authentication_biometrics_data_source.dart';
|
||||
export 'local/authentication_local_data_source.dart';
|
||||
export 'remote/authentication_remote_data_source.dart';
|
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
|
||||
abstract class AuthenticationBiometricsDataSource extends BaseLocalDataSource {}
|
@ -0,0 +1,27 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart';
|
||||
|
||||
abstract class AuthenticationLocalDataSource<T extends Object>
|
||||
extends BaseLocalDataSource {
|
||||
void storeAccount(Account? account);
|
||||
void storeData(T? data);
|
||||
Account loadAccount();
|
||||
T loadData();
|
||||
void destroy();
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
// Copyright (C) 2022 WYATT GROUP
|
||||
// Please see the AUTHORS file for details.
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
import 'package:wyatt_architecture/wyatt_architecture.dart';
|
||||
import 'package:wyatt_authentication_bloc/src/domain/entities/account.dart';
|
||||
|
||||
abstract class AuthenticationRemoteDataSource extends BaseRemoteDataSource {
|
||||
Future<Account> signUp({
|
||||
required String email,
|
||||
required String password,
|
||||
});
|
||||
|
||||
Future<Account> signInWithEmailAndPassword({
|
||||
required String email,
|
||||
required String password,
|
||||
});
|
||||
|
||||
Future<void> signOut();
|
||||
|
||||
Stream<Account?> streamAccount();
|
||||
|
||||
Future<String> getIdentityToken();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user