1
0
forked from firka/firka

reauth: autofill username & schoolId

This commit is contained in:
2025-08-29 10:26:28 +02:00
parent 9f17a4437a
commit c042206004
3 changed files with 26 additions and 10 deletions

View File

@@ -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) =>

View File

@@ -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<HomeScreen> {
),
),
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DefaultAssetBundle(
bundle: FirkaBundle(),
child: LoginScreen(widget.data))));
showModalBottomSheet<void>(
context: context,
isScrollControlled: true,
builder: (BuildContext context) {
return LoginWebviewWidget(widget.data,
username:
widget.data.client.model.studentId.toString(),
schoolId: widget.data.client.model.iss!);
},
);
},
),
),

View File

@@ -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<LoginWebviewWidget> createState() => _LoginWebviewWidgetState();
@@ -25,10 +28,17 @@ class _LoginWebviewWidgetState extends State<LoginWebviewWidget> {
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);