ft/adds autologin after register

This commit is contained in:
itsscb 2023-11-01 00:12:31 +01:00
parent b7a189e409
commit 496b81a5f5
3 changed files with 120 additions and 20 deletions

View File

@ -1,10 +1,14 @@
import 'dart:developer';
import 'package:app/data/database.dart'; import 'package:app/data/database.dart';
import 'package:app/pb/account.pb.dart'; import 'package:app/pb/account.pb.dart';
import 'package:app/pb/rpc_create_account.pb.dart'; import 'package:app/pb/rpc_create_account.pb.dart';
import 'package:app/pb/rpc_get_account.pb.dart';
import 'package:app/pb/rpc_get_account_info.pb.dart'; import 'package:app/pb/rpc_get_account_info.pb.dart';
import 'package:app/pb/rpc_login.pb.dart'; import 'package:app/pb/rpc_login.pb.dart';
import 'package:app/pb/rpc_refresh_token.pb.dart'; import 'package:app/pb/rpc_refresh_token.pb.dart';
import 'package:app/pb/service_df.pbgrpc.dart'; import 'package:app/pb/service_df.pbgrpc.dart';
import 'package:fixnum/fixnum.dart';
import 'package:grpc/grpc.dart'; import 'package:grpc/grpc.dart';
class GClient { class GClient {
@ -18,7 +22,7 @@ class GClient {
Map<String, String> metadata = {'Authorization': ''}; Map<String, String> metadata = {'Authorization': ''};
late Session session; late Session session;
late Account account; Account? account;
static Future<GClient> get client async { static Future<GClient> get client async {
Session s = await Session.session; Session s = await Session.session;
@ -64,11 +68,11 @@ class GClient {
)); ));
account = response.account; account = response.account;
return response; return response;
} on GrpcError catch (e) { } on GrpcError catch (err) {
onError(error: e); onError(error: err);
print('GRPC ERROR: ${e.message}'); print('GRPC ERROR: ${err.message}');
} catch (e) { } catch (err) {
print('ERROR: $e'); print('ERROR: $err');
} }
return CreateAccountResponse(); return CreateAccountResponse();
} }
@ -96,12 +100,12 @@ class GClient {
metadata['Authorization'] = 'Bearer ${response.accessToken}'; metadata['Authorization'] = 'Bearer ${response.accessToken}';
onSuccess(); onSuccess();
return response; return response;
} on GrpcError catch (e) { } on GrpcError catch (err) {
print('caught error: ${e.message}'); print('caught error: ${err.message}');
metadata['Authorization'] = ''; metadata['Authorization'] = '';
onError(error: e); onError(error: err);
} catch (e) { } catch (err) {
print('caught error: $e'); print('caught error: $err');
metadata['Authorization'] = ''; metadata['Authorization'] = '';
onError(); onError();
} }
@ -128,12 +132,36 @@ class GClient {
session.accessToken = response.accessToken; session.accessToken = response.accessToken;
session.insertSession(session); session.insertSession(session);
return true; return true;
} on GrpcError catch (e) { } on GrpcError catch (err) {
print('caught grpc error: $e'); print('caught grpc error: $err');
} }
return false; return false;
} }
Future<GetAccountResponse> getAccount(
{required Int64 accountId,
required Function({GrpcError? err}) onError}) async {
GetAccountResponse response = GetAccountResponse();
try {
response = await stub.getAccount(GetAccountRequest(
id: accountId,
));
account = response.account;
} on GrpcError catch (err) {
if (err.code == 16) {
log(err.toString());
onError(err: err);
} else {
log(err.toString());
onError();
}
} catch (err) {
log(err.toString());
onError();
}
return response;
}
Future<GetAccountInfoResponse> getAccountInfo(GetAccountInfoRequest request, Future<GetAccountInfoResponse> getAccountInfo(GetAccountInfoRequest request,
{required Function({String msg}) onError}) async { {required Function({String msg}) onError}) async {
GetAccountInfoResponse response = GetAccountInfoResponse(); GetAccountInfoResponse response = GetAccountInfoResponse();
@ -146,16 +174,16 @@ class GClient {
), ),
); );
return response; return response;
} on GrpcError catch (e) { } on GrpcError catch (err) {
print('caught grpc error: ${e.message} [${e.code}]'); print('caught grpc error: ${err.message} [${err.code}]');
if (e.code == 16) { if (err.code == 16) {
onError(msg: 'Sitzung ist abgelaufen.\nBitte loggen Sie sich neu ein.'); onError(msg: 'Sitzung ist abgelaufen.\nBitte loggen Sie sich neu ein.');
} else { } else {
onError(msg: e.message != null ? e.message! : 'Interner Fehler'); onError(msg: err.message != null ? err.message! : 'Interner Fehler');
} }
} catch (e) { } catch (err) {
print('caught error: $e'); print('caught error: $err');
onError(); onError(msg: err.toString());
} }
return response; return response;
} }

View File

@ -261,6 +261,65 @@ class _RegisterPageState extends State<RegisterPage> {
.then( .then(
(r) { (r) {
if (r.account.secretKey != '') { if (r.account.secretKey != '') {
widget.client
.login(
email: mailController.text,
password:
passwordController.text,
onError: (
{GrpcError? error}) {},
onSuccess: () {})
.then((resp) {
widget.client.getAccount(
accountId: r.account.id,
onError: ({GrpcError? err}) {
_setLoading(false);
ScaffoldMessenger.of(context)
.showSnackBar(
SnackBar(
content: const Text(
'Login fehlgeschlagen',
),
action: SnackBarAction(
textColor: Colors.grey,
label: 'Details',
onPressed: () {
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: err !=
null
? Text(
'Hoppla! Da ist etwas schief gelaufen..\n\n${err.message}',
textAlign:
TextAlign.center,
style: const TextStyle(
color:
Colors.black),
)
: const Text(
'Interner Fehler',
textAlign:
TextAlign.center,
style: TextStyle(
color:
Colors.black),
),
icon:
const Icon(
Icons.error,
color: Colors
.black,
),
);
},
);
}),
),
);
});
});
Navigator.pushAndRemoveUntil( Navigator.pushAndRemoveUntil(
context, context,
MaterialPageRoute( MaterialPageRoute(

View File

@ -308,6 +308,19 @@ class _StartPageState extends State<StartPage> {
'lib/assets/logo_300x200.png', 'lib/assets/logo_300x200.png',
), ),
), ),
if (widget.client.account != null &&
!widget.client.account!.emailVerified)
Container(
height: 120,
width: double.infinity,
padding:
const EdgeInsets.symmetric(vertical: 20, horizontal: 10),
child: Card(
color: Colors.brown.shade300,
child: const Text(
'Deine E-Mail Adresse ist noch nicht validiert.'),
),
),
const SizedBox( const SizedBox(
height: 40, height: 40,
), ),