master #81
@ -50,8 +50,8 @@ abstract class GetItInitializer {
|
|||||||
),
|
),
|
||||||
])
|
])
|
||||||
: () => AuthenticationFirebaseDataSourceImpl(
|
: () => AuthenticationFirebaseDataSourceImpl(
|
||||||
googleSignIn: GoogleSignIn(clientId: DefaultFirebaseOptions.ios.iosClientId)
|
googleSignIn: GoogleSignIn(
|
||||||
),
|
clientId: DefaultFirebaseOptions.ios.iosClientId)),
|
||||||
)
|
)
|
||||||
..registerLazySingleton<AuthenticationCacheDataSource<int>>(
|
..registerLazySingleton<AuthenticationCacheDataSource<int>>(
|
||||||
() => AuthenticationCacheDataSourceImpl<int>(),
|
() => AuthenticationCacheDataSourceImpl<int>(),
|
||||||
|
@ -58,8 +58,10 @@ class DefaultFirebaseOptions {
|
|||||||
messagingSenderId: '405351917235',
|
messagingSenderId: '405351917235',
|
||||||
projectId: 'meerabel-dev',
|
projectId: 'meerabel-dev',
|
||||||
storageBucket: 'meerabel-dev.appspot.com',
|
storageBucket: 'meerabel-dev.appspot.com',
|
||||||
androidClientId: '405351917235-4g1dh3475tq6t1sa2qoh7ol60nf4ta05.apps.googleusercontent.com',
|
androidClientId:
|
||||||
iosClientId: '405351917235-2jv4ff02kovoim58f8d6d0rsa14apgkj.apps.googleusercontent.com',
|
'405351917235-4g1dh3475tq6t1sa2qoh7ol60nf4ta05.apps.googleusercontent.com',
|
||||||
|
iosClientId:
|
||||||
|
'405351917235-2jv4ff02kovoim58f8d6d0rsa14apgkj.apps.googleusercontent.com',
|
||||||
iosBundleId: 'com.example.exampleRouter',
|
iosBundleId: 'com.example.exampleRouter',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -20,7 +20,6 @@ part 'exceptions_firebase.dart';
|
|||||||
|
|
||||||
abstract class AuthenticationFailureInterface extends AppException
|
abstract class AuthenticationFailureInterface extends AppException
|
||||||
implements Exception {
|
implements Exception {
|
||||||
|
|
||||||
AuthenticationFailureInterface(this.code, this.msg);
|
AuthenticationFailureInterface(this.code, this.msg);
|
||||||
AuthenticationFailureInterface.fromCode(this.code)
|
AuthenticationFailureInterface.fromCode(this.code)
|
||||||
: msg = 'An unknown error occurred.';
|
: msg = 'An unknown error occurred.';
|
||||||
@ -277,3 +276,10 @@ abstract class UpdatePasswordFailureInterface
|
|||||||
|
|
||||||
UpdatePasswordFailureInterface.fromCode(super.code) : super.fromCode();
|
UpdatePasswordFailureInterface.fromCode(super.code) : super.fromCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
abstract class ModelParsingFailureInterface
|
||||||
|
extends AuthenticationFailureInterface {
|
||||||
|
ModelParsingFailureInterface(super.code, super.msg);
|
||||||
|
|
||||||
|
ModelParsingFailureInterface.fromCode(super.code) : super.fromCode();
|
||||||
|
}
|
||||||
|
@ -349,3 +349,10 @@ class UpdatePasswordFailureFirebase extends UpdatePasswordFailureInterface {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ModelParsingFailureFirebase extends ModelParsingFailureInterface {
|
||||||
|
ModelParsingFailureFirebase([String? code, String? msg])
|
||||||
|
: super(code ?? 'unknown', msg ?? 'An unknown error occurred.');
|
||||||
|
|
||||||
|
ModelParsingFailureFirebase.fromCode(super.code) : super.fromCode();
|
||||||
|
}
|
||||||
|
@ -20,7 +20,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
|||||||
|
|
||||||
class AuthenticationCacheDataSourceImpl<T extends Object>
|
class AuthenticationCacheDataSourceImpl<T extends Object>
|
||||||
extends AuthenticationCacheDataSource<T> {
|
extends AuthenticationCacheDataSource<T> {
|
||||||
|
|
||||||
AuthenticationCacheDataSourceImpl();
|
AuthenticationCacheDataSourceImpl();
|
||||||
Account? _account;
|
Account? _account;
|
||||||
T? _data;
|
T? _data;
|
||||||
|
@ -14,36 +14,22 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
// along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
import 'package:wyatt_authentication_bloc/src/data/models/account_model_firebase.dart';
|
||||||
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
|
import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
|
||||||
import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||||
|
|
||||||
class AuthenticationFirebaseDataSourceImpl
|
class AuthenticationFirebaseDataSourceImpl
|
||||||
extends AuthenticationRemoteDataSource {
|
extends AuthenticationRemoteDataSource {
|
||||||
AuthenticationFirebaseDataSourceImpl(
|
AuthenticationFirebaseDataSourceImpl({
|
||||||
{FirebaseAuth? firebaseAuth, GoogleSignIn? googleSignIn,})
|
FirebaseAuth? firebaseAuth,
|
||||||
: _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance,
|
GoogleSignIn? googleSignIn,
|
||||||
|
}) : _firebaseAuth = firebaseAuth ?? FirebaseAuth.instance,
|
||||||
_googleSignIn = googleSignIn ?? GoogleSignIn();
|
_googleSignIn = googleSignIn ?? GoogleSignIn();
|
||||||
|
|
||||||
final FirebaseAuth _firebaseAuth;
|
final FirebaseAuth _firebaseAuth;
|
||||||
final GoogleSignIn _googleSignIn;
|
final GoogleSignIn _googleSignIn;
|
||||||
UserCredential? _latestCreds;
|
UserCredential? _latestCreds;
|
||||||
|
|
||||||
Account _mapper(User user) => AccountModel(
|
|
||||||
uid: user.uid,
|
|
||||||
emailVerified: user.emailVerified,
|
|
||||||
isAnonymous: user.isAnonymous,
|
|
||||||
providerId: user.providerData.first.providerId,
|
|
||||||
creationTime: user.metadata.creationTime,
|
|
||||||
lastSignInTime: user.metadata.lastSignInTime,
|
|
||||||
isNewUser: (user.metadata.creationTime != null &&
|
|
||||||
user.metadata.lastSignInTime != null)
|
|
||||||
? user.metadata.lastSignInTime! == user.metadata.creationTime!
|
|
||||||
: null,
|
|
||||||
email: user.email,
|
|
||||||
phoneNumber: user.phoneNumber,
|
|
||||||
photoURL: user.photoURL,
|
|
||||||
);
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<Account> signInWithEmailAndPassword({
|
Future<Account> signInWithEmailAndPassword({
|
||||||
required String email,
|
required String email,
|
||||||
@ -56,11 +42,7 @@ class AuthenticationFirebaseDataSourceImpl
|
|||||||
);
|
);
|
||||||
_latestCreds = userCredential;
|
_latestCreds = userCredential;
|
||||||
final user = userCredential.user;
|
final user = userCredential.user;
|
||||||
if (user.isNotNull) {
|
return AccountModelFirebase.fromFirebaseUser(user);
|
||||||
return _mapper(user!);
|
|
||||||
} else {
|
|
||||||
throw Exception(); // Get caught just after.
|
|
||||||
}
|
|
||||||
} on FirebaseAuthException catch (e) {
|
} on FirebaseAuthException catch (e) {
|
||||||
throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code);
|
throw SignInWithEmailAndPasswordFailureFirebase.fromCode(e.code);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@ -82,11 +64,7 @@ class AuthenticationFirebaseDataSourceImpl
|
|||||||
);
|
);
|
||||||
_latestCreds = userCredential;
|
_latestCreds = userCredential;
|
||||||
final user = userCredential.user;
|
final user = userCredential.user;
|
||||||
if (user.isNotNull) {
|
return AccountModelFirebase.fromFirebaseUser(user);
|
||||||
return _mapper(user!);
|
|
||||||
} else {
|
|
||||||
throw Exception(); // Get caught just after.
|
|
||||||
}
|
|
||||||
} on FirebaseAuthException catch (e) {
|
} on FirebaseAuthException catch (e) {
|
||||||
throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code);
|
throw SignUpWithEmailAndPasswordFailureFirebase.fromCode(e.code);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@ -123,8 +101,11 @@ class AuthenticationFirebaseDataSourceImpl
|
|||||||
@override
|
@override
|
||||||
Stream<Account?> streamAccount() =>
|
Stream<Account?> streamAccount() =>
|
||||||
_firebaseAuth.userChanges().map<Account?>((user) {
|
_firebaseAuth.userChanges().map<Account?>((user) {
|
||||||
final Account? account = (user.isNotNull) ? _mapper(user!) : null;
|
try {
|
||||||
return account;
|
return AccountModelFirebase.fromFirebaseUser(user);
|
||||||
|
} on FirebaseAuthException {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -172,11 +153,7 @@ class AuthenticationFirebaseDataSourceImpl
|
|||||||
final userCredential = await _firebaseAuth.signInAnonymously();
|
final userCredential = await _firebaseAuth.signInAnonymously();
|
||||||
_latestCreds = userCredential;
|
_latestCreds = userCredential;
|
||||||
final user = userCredential.user;
|
final user = userCredential.user;
|
||||||
if (user.isNotNull) {
|
return AccountModelFirebase.fromFirebaseUser(user);
|
||||||
return _mapper(user!);
|
|
||||||
} else {
|
|
||||||
throw Exception(); // Get caught just after.
|
|
||||||
}
|
|
||||||
} on FirebaseAuthException catch (e) {
|
} on FirebaseAuthException catch (e) {
|
||||||
throw SignInAnonymouslyFailureFirebase.fromCode(e.code);
|
throw SignInAnonymouslyFailureFirebase.fromCode(e.code);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@ -205,11 +182,7 @@ class AuthenticationFirebaseDataSourceImpl
|
|||||||
|
|
||||||
_latestCreds = userCredential;
|
_latestCreds = userCredential;
|
||||||
final user = userCredential.user;
|
final user = userCredential.user;
|
||||||
if (user.isNotNull) {
|
return AccountModelFirebase.fromFirebaseUser(user);
|
||||||
return _mapper(user!);
|
|
||||||
} else {
|
|
||||||
throw Exception(); // Get caught just after.
|
|
||||||
}
|
|
||||||
} on FirebaseAuthException catch (e) {
|
} on FirebaseAuthException catch (e) {
|
||||||
throw SignInWithGoogleFailureFirebase.fromCode(e.code);
|
throw SignInWithGoogleFailureFirebase.fromCode(e.code);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@ -250,11 +223,7 @@ class AuthenticationFirebaseDataSourceImpl
|
|||||||
throw Exception(); // Get caught just after.
|
throw Exception(); // Get caught just after.
|
||||||
}
|
}
|
||||||
final user = _firebaseAuth.currentUser;
|
final user = _firebaseAuth.currentUser;
|
||||||
if (user.isNotNull) {
|
return AccountModelFirebase.fromFirebaseUser(user);
|
||||||
return _mapper(user!);
|
|
||||||
} else {
|
|
||||||
throw Exception(); // Get caught just after.
|
|
||||||
}
|
|
||||||
} on FirebaseAuthException catch (e) {
|
} on FirebaseAuthException catch (e) {
|
||||||
throw ReauthenticateFailureFirebase.fromCode(e.code);
|
throw ReauthenticateFailureFirebase.fromCode(e.code);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@ -267,11 +236,7 @@ class AuthenticationFirebaseDataSourceImpl
|
|||||||
try {
|
try {
|
||||||
await _firebaseAuth.currentUser!.updateEmail(email);
|
await _firebaseAuth.currentUser!.updateEmail(email);
|
||||||
final user = _firebaseAuth.currentUser;
|
final user = _firebaseAuth.currentUser;
|
||||||
if (user.isNotNull) {
|
return AccountModelFirebase.fromFirebaseUser(user);
|
||||||
return _mapper(user!);
|
|
||||||
} else {
|
|
||||||
throw Exception(); // Get caught just after.
|
|
||||||
}
|
|
||||||
} on FirebaseAuthException catch (e) {
|
} on FirebaseAuthException catch (e) {
|
||||||
throw UpdateEmailFailureFirebase.fromCode(e.code);
|
throw UpdateEmailFailureFirebase.fromCode(e.code);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
@ -284,11 +249,7 @@ class AuthenticationFirebaseDataSourceImpl
|
|||||||
try {
|
try {
|
||||||
await _firebaseAuth.currentUser!.updatePassword(password);
|
await _firebaseAuth.currentUser!.updatePassword(password);
|
||||||
final user = _firebaseAuth.currentUser;
|
final user = _firebaseAuth.currentUser;
|
||||||
if (user.isNotNull) {
|
return AccountModelFirebase.fromFirebaseUser(user);
|
||||||
return _mapper(user!);
|
|
||||||
} else {
|
|
||||||
throw Exception(); // Get caught just after.
|
|
||||||
}
|
|
||||||
} on FirebaseAuthException catch (e) {
|
} on FirebaseAuthException catch (e) {
|
||||||
throw UpdatePasswordFailureFirebase.fromCode(e.code);
|
throw UpdatePasswordFailureFirebase.fromCode(e.code);
|
||||||
} catch (_) {
|
} catch (_) {
|
||||||
|
@ -21,7 +21,6 @@ import 'package:wyatt_authentication_bloc/wyatt_authentication_bloc.dart';
|
|||||||
import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
||||||
|
|
||||||
class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource {
|
class AuthenticationMockDataSourceImpl extends AuthenticationRemoteDataSource {
|
||||||
|
|
||||||
AuthenticationMockDataSourceImpl({
|
AuthenticationMockDataSourceImpl({
|
||||||
this.idToken = 'fake-id-token',
|
this.idToken = 'fake-id-token',
|
||||||
this.registeredAccounts,
|
this.registeredAccounts,
|
||||||
|
@ -0,0 +1,55 @@
|
|||||||
|
// ignore_for_file: public_member_api_docs, sort_constructors_first
|
||||||
|
// 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/wyatt_authentication_bloc.dart';
|
||||||
|
|
||||||
|
class AccountModelFirebase extends AccountModel {
|
||||||
|
AccountModelFirebase._({
|
||||||
|
required super.uid,
|
||||||
|
required super.emailVerified,
|
||||||
|
required super.isAnonymous,
|
||||||
|
required super.providerId,
|
||||||
|
super.lastSignInTime,
|
||||||
|
super.creationTime,
|
||||||
|
super.isNewUser,
|
||||||
|
super.email,
|
||||||
|
super.phoneNumber,
|
||||||
|
super.photoURL,
|
||||||
|
});
|
||||||
|
|
||||||
|
factory AccountModelFirebase.fromFirebaseUser(User? user) {
|
||||||
|
if (user != null) {
|
||||||
|
return AccountModelFirebase._(
|
||||||
|
uid: user.uid,
|
||||||
|
emailVerified: user.emailVerified,
|
||||||
|
isAnonymous: user.isAnonymous,
|
||||||
|
providerId: user.providerData.first.providerId,
|
||||||
|
creationTime: user.metadata.creationTime,
|
||||||
|
lastSignInTime: user.metadata.lastSignInTime,
|
||||||
|
isNewUser: (user.metadata.creationTime != null &&
|
||||||
|
user.metadata.lastSignInTime != null)
|
||||||
|
? user.metadata.lastSignInTime! == user.metadata.creationTime!
|
||||||
|
: null,
|
||||||
|
email: user.email,
|
||||||
|
phoneNumber: user.phoneNumber,
|
||||||
|
photoURL: user.photoURL,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw ModelParsingFailureFirebase('null-user', 'User cannot be null!');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -26,7 +26,6 @@ import 'package:wyatt_type_utils/wyatt_type_utils.dart';
|
|||||||
part 'authentication_state.dart';
|
part 'authentication_state.dart';
|
||||||
|
|
||||||
class AuthenticationCubit<Extra> extends Cubit<AuthenticationState<Extra>> {
|
class AuthenticationCubit<Extra> extends Cubit<AuthenticationState<Extra>> {
|
||||||
|
|
||||||
AuthenticationCubit({
|
AuthenticationCubit({
|
||||||
required AuthenticationRepository<Extra> authenticationRepository,
|
required AuthenticationRepository<Extra> authenticationRepository,
|
||||||
}) : _authenticationRepository = authenticationRepository,
|
}) : _authenticationRepository = authenticationRepository,
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
part of 'authentication_cubit.dart';
|
part of 'authentication_cubit.dart';
|
||||||
|
|
||||||
class AuthenticationState<Extra> extends Equatable {
|
class AuthenticationState<Extra> extends Equatable {
|
||||||
|
|
||||||
const AuthenticationState.unauthenticated()
|
const AuthenticationState.unauthenticated()
|
||||||
: this._(status: AuthenticationStatus.unauthenticated);
|
: this._(status: AuthenticationStatus.unauthenticated);
|
||||||
|
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
part of 'sign_up_cubit.dart';
|
part of 'sign_up_cubit.dart';
|
||||||
|
|
||||||
class SignUpState extends FormDataState {
|
class SignUpState extends FormDataState {
|
||||||
|
|
||||||
const SignUpState({
|
const SignUpState({
|
||||||
required super.form,
|
required super.form,
|
||||||
super.status = FormStatus.pure,
|
super.status = FormStatus.pure,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user