diff --git a/firka/lib/helpers/api/consts.dart b/firka/lib/helpers/api/consts.dart index d841d20..02d40bc 100644 --- a/firka/lib/helpers/api/consts.dart +++ b/firka/lib/helpers/api/consts.dart @@ -52,6 +52,9 @@ class KretaEndpoints { static String kretaIdp = "https://idp.e-kreta.hu"; static String kretaLoginUrl = "$kretaIdp/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fredirect_uri%3Dhttps%253A%252F%252Fmobil.e-kreta.hu%252Fellenorzo-student%252Fprod%252Foauthredirect%26client_id%3Dkreta-ellenorzo-student-mobile-android%26response_type%3Dcode%26prompt%3Dlogin%26state%3DaOPUjQU3sXBVRjQQkmYT8g%26nonce%3D3qtS0kDcaHIUGkkEcL1-5g%26scope%3Dopenid%2520email%2520offline_access%2520kreta-ellenorzo-webapi.public%2520kreta-eugyintezes-webapi.public%2520kreta-fileservice-webapi.public%2520kreta-mobile-global-webapi.public%2520kreta-dkt-webapi.public%2520kreta-ier-webapi.public%26code_challenge%3D$_codeChallenge%26code_challenge_method%3DS256%26suppressed_prompt%3Dlogin"; + + static String kretaLoginUrlRefresh(String username, String schoolId) => + "$kretaIdp/Account/Login?ReturnUrl=%2Fconnect%2Fauthorize%2Fcallback%3Fredirect_uri%3Dhttps%253A%252F%252Fmobil.e-kreta.hu%252Fellenorzo-student%252Fprod%252Foauthredirect%26client_id%3Dkreta-ellenorzo-student-mobile-android%26response_type%3Dcode%26login_hint%3D$username%26prompt%3Dlogin%26state%3DaOPUjQU3sXBVRjQQkmYT8g%26nonce%3D3qtS0kDcaHIUGkkEcL1-5g%26scope%3Dopenid%2520email%2520offline_access%2520kreta-ellenorzo-webapi.public%2520kreta-eugyintezes-webapi.public%2520kreta-fileservice-webapi.public%2520kreta-mobile-global-webapi.public%2520kreta-dkt-webapi.public%2520kreta-ier-webapi.public%26code_challenge%3D$_codeChallenge%26code_challenge_method%3DS256%26institute_code%3D$schoolId%26suppressed_prompt%3Dlogin"; static String tokenGrantUrl = "$kretaIdp/connect/token"; static String getStudentUrl(String iss) => diff --git a/firka/lib/ui/phone/screens/home/home_screen.dart b/firka/lib/ui/phone/screens/home/home_screen.dart index a9116c1..05a2171 100644 --- a/firka/lib/ui/phone/screens/home/home_screen.dart +++ b/firka/lib/ui/phone/screens/home/home_screen.dart @@ -12,6 +12,7 @@ import 'package:firka/ui/phone/pages/home/home_main.dart'; import 'package:firka/ui/phone/pages/home/home_timetable_mo.dart'; import 'package:firka/ui/phone/screens/home/beta_screen.dart'; import 'package:firka/ui/phone/widgets/bottom_nav_icon.dart'; +import 'package:firka/ui/phone/widgets/login_webview.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -20,13 +21,11 @@ import 'package:majesticons_flutter/majesticons_flutter.dart'; import '../../../../helpers/db/widget.dart'; import '../../../../helpers/debug_helper.dart'; -import '../../../../helpers/firka_bundle.dart'; import '../../../widget/firka_icon.dart'; import '../../pages/extras/extras.dart'; import '../../pages/extras/main_error.dart'; import '../../pages/home/home_grades_subject.dart'; import '../../pages/home/home_timetable.dart'; -import '../login/login_screen.dart'; class HomeScreen extends StatefulWidget { final AppInitialization data; @@ -127,12 +126,16 @@ class _HomeScreenState extends State { ), ), onTap: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => DefaultAssetBundle( - bundle: FirkaBundle(), - child: LoginScreen(widget.data)))); + showModalBottomSheet( + context: context, + isScrollControlled: true, + builder: (BuildContext context) { + return LoginWebviewWidget(widget.data, + username: + widget.data.client.model.studentId.toString(), + schoolId: widget.data.client.model.iss!); + }, + ); }, ), ), diff --git a/firka/lib/ui/phone/widgets/login_webview.dart b/firka/lib/ui/phone/widgets/login_webview.dart index 19265cf..2118b76 100644 --- a/firka/lib/ui/phone/widgets/login_webview.dart +++ b/firka/lib/ui/phone/widgets/login_webview.dart @@ -11,8 +11,11 @@ import '../screens/home/home_screen.dart'; class LoginWebviewWidget extends StatefulWidget { final AppInitialization data; + final String? username; + final String? schoolId; - const LoginWebviewWidget(this.data); + const LoginWebviewWidget(this.data, + {super.key, this.username, this.schoolId}); @override State createState() => _LoginWebviewWidgetState(); @@ -25,10 +28,17 @@ class _LoginWebviewWidgetState extends State { void initState() { super.initState(); + var loginUrl = KretaEndpoints.kretaLoginUrl; + + if (widget.username != null && widget.schoolId != null) { + loginUrl = KretaEndpoints.kretaLoginUrlRefresh( + widget.username!, widget.schoolId!); + } + _webViewController = WebViewController() ..setUserAgent(Constants.webviewUserAgent) ..setJavaScriptMode(JavaScriptMode.unrestricted) - ..loadRequest(Uri.parse(KretaEndpoints.kretaLoginUrl)) + ..loadRequest(Uri.parse(loginUrl)) ..setNavigationDelegate(NavigationDelegate( onNavigationRequest: (NavigationRequest request) async { var uri = Uri.parse(request.url);