Added google play testing accounts and testing environment

This commit is contained in:
2023-07-30 21:13:21 +02:00
parent 6548ff360a
commit c6f0dad247
19 changed files with 337 additions and 201 deletions

View File

@ -5,6 +5,7 @@ import 'package:http/http.dart' as http;
import 'package:http/http.dart';
import '../../../model/accountData.dart';
import '../../../model/timetable/endpointData.dart';
import 'autocompleteResponse.dart';
class AutocompleteApi {
@ -21,7 +22,7 @@ class AutocompleteApi {
headers.putIfAbsent("Accept", () => "application/json");
headers.putIfAbsent("OCS-APIRequest", () => "true");
Uri endpoint = Uri.https("${AccountData().buildHttpAuthString()}@cloud.marianum-fulda.de", "/ocs/v2.php/core/autocomplete/get", getParameters);
Uri endpoint = Uri.https("${AccountData().buildHttpAuthString()}@${EndpointData().nextcloud().domain}", "${EndpointData().nextcloud().path}/ocs/v2.php/core/autocomplete/get", getParameters);
Response response = await http.get(endpoint, headers: headers);
if(response.statusCode != HttpStatus.ok) throw Exception("Api call failed with ${response.statusCode}: ${response.body}");

View File

@ -4,6 +4,7 @@ import 'package:http/http.dart' as http;
import 'package:http/http.dart';
import '../../../model/accountData.dart';
import '../../../model/timetable/endpointData.dart';
import 'fileSharingApiParams.dart';
class FileSharingApi {
@ -12,7 +13,7 @@ class FileSharingApi {
headers.putIfAbsent("Accept", () => "application/json");
headers.putIfAbsent("OCS-APIRequest", () => "true");
Uri endpoint = Uri.https("${AccountData().buildHttpAuthString()}@cloud.marianum-fulda.de", "/ocs/v2.php/apps/files_sharing/api/v1/shares", query.toJson().map((key, value) => MapEntry(key, value.toString())));
Uri endpoint = Uri.https("${AccountData().buildHttpAuthString()}@${EndpointData().nextcloud().domain}", "${EndpointData().nextcloud().path}/ocs/v2.php/apps/files_sharing/api/v1/shares", query.toJson().map((key, value) => MapEntry(key, value.toString())));
Response response = await http.post(endpoint, headers: headers);
if(response.statusCode != HttpStatus.ok) {

View File

@ -3,6 +3,7 @@ import 'dart:developer';
import 'package:http/http.dart' as http;
import '../../../model/accountData.dart';
import '../../../model/timetable/endpointData.dart';
import '../../apiError.dart';
import '../../apiParams.dart';
import '../../apiRequest.dart';
@ -32,7 +33,7 @@ abstract class TalkApi<T> extends ApiRequest {
getParameters?.update(key, (value) => value.toString());
});
Uri endpoint = Uri.https("${AccountData().buildHttpAuthString()}@cloud.marianum-fulda.de", "/ocs/v2.php/apps/spreed/api/$path", getParameters);
Uri endpoint = Uri.https("${AccountData().buildHttpAuthString()}@${EndpointData().nextcloud().domain}", "${EndpointData().nextcloud().path}/ocs/v2.php/apps/spreed/api/$path", getParameters);
headers ??= {};
headers?.putIfAbsent("Accept", () => "application/json");

View File

@ -1,6 +1,7 @@
import 'package:nextcloud/nextcloud.dart';
import '../../../model/accountData.dart';
import '../../../model/timetable/endpointData.dart';
import '../../apiRequest.dart';
import '../../apiResponse.dart';
@ -17,10 +18,10 @@ abstract class WebdavApi<T> extends ApiRequest {
static Future<String> webdavConnectString = buildWebdavConnectString();
static Future<WebDavClient> establishWebdavConnection() async {
return NextcloudClient("https://cloud.marianum-fulda.de/", username: AccountData().getUsername(), password: AccountData().getPassword(), loginName: AccountData().getUsername()).webdav;
return NextcloudClient("https://${EndpointData().nextcloud().full()}", username: AccountData().getUsername(), password: AccountData().getPassword(), loginName: AccountData().getUsername()).webdav;
}
static Future<String> buildWebdavConnectString() async {
return "https://${AccountData().buildHttpAuthString()}@cloud.marianum-fulda.de/remote.php/dav/files/${AccountData().getUsername()}/";
return "https://${AccountData().buildHttpAuthString()}@${EndpointData().nextcloud().full()}/remote.php/dav/files/${AccountData().getUsername()}/";
}
}

View File

@ -1,6 +1,7 @@
import 'dart:convert';
import 'package:http/http.dart' as http;
import '../../model/timetable/endpointData.dart';
import '../apiParams.dart';
import '../apiRequest.dart';
import '../apiResponse.dart';
@ -8,7 +9,7 @@ import 'queries/authenticate/authenticate.dart';
import 'webuntisError.dart';
abstract class WebuntisApi extends ApiRequest {
Uri endpoint = Uri.parse("https://peleus.webuntis.com/WebUntis/jsonrpc.do?school=marianum-fulda");
Uri endpoint = Uri.parse("https://${EndpointData().webuntis().full()}/WebUntis/jsonrpc.do?school=marianum-fulda");
String method;
ApiParams? genericParam;
http.Response? response;

View File

@ -43,13 +43,13 @@ class AccountData {
await _updateFromStorage();
}
void removeData(BuildContext context) async {
Future<void> removeData(BuildContext context) async {
_populated = Completer();
Provider.of<AccountModel>(context, listen: false).setState(AccountModelState.loggedOut);
SharedPreferences storage = await _storage;
storage.remove(_usernameField);
storage.remove(_passwordField);
await storage.remove(_usernameField);
await storage.remove(_passwordField);
}
Future<void> _updateFromStorage() async {

View File

@ -0,0 +1,76 @@
import '../accountData.dart';
enum EndpointMode {
live,
stage,
}
class EndpointOptions {
Endpoint live;
Endpoint? staged;
EndpointOptions({required this.live, required this.staged});
Endpoint get(EndpointMode mode) {
if(staged == null || mode == EndpointMode.live) return live;
return staged!;
}
}
class Endpoint {
String domain;
String path;
Endpoint({required this.domain, this.path = ""});
String full() {
return domain + path;
}
}
class EndpointData {
static final EndpointData _instance = EndpointData._construct();
String? usernameOverride;
factory EndpointData() {
return _instance;
}
EndpointData._construct();
EndpointMode getEndpointMode() {
late String existingName;
if(usernameOverride != null) {
existingName = usernameOverride!;
} else {
existingName = AccountData().getUsername();
}
return existingName.startsWith("google") ? EndpointMode.stage : EndpointMode.live;
}
Endpoint webuntis() {
return EndpointOptions(
live: Endpoint(
domain: "peleus.webuntis.com",
),
staged: Endpoint(
domain: "mhsl.eu",
path: "/marianum/marianummobile/webuntis/public/index.php/api"
),
).get(getEndpointMode());
}
Endpoint nextcloud() {
return EndpointOptions(
live: Endpoint(
domain: "cloud.marianum-fulda.de",
),
staged: Endpoint(
domain: "mhsl.eu",
path: "/marianum/marianummobile/cloud",
)
).get(getEndpointMode());
}
}

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_login/flutter_login.dart';
import 'package:marianum_mobile/model/timetable/endpointData.dart';
import 'package:provider/provider.dart';
import '../../api/webuntis/queries/authenticate/authenticateParams.dart';
@ -23,15 +24,17 @@ class _LoginState extends State<Login> {
}
Future<String?> _login(LoginData data) async {
AccountData().removeData(context);
await AccountData().removeData(context);
try {
EndpointData().usernameOverride = data.name;
await Authenticate(
AuthenticateParams(
user: data.name,
password: data.password,
)
).run().then((value) async {
EndpointData().usernameOverride = null;
await AccountData().setData(context, data.name, data.password);
setState(() {
@ -41,7 +44,7 @@ class _LoginState extends State<Login> {
} catch(e) {
return e.toString();
}
await Future.delayed(const Duration(seconds: 1));
return null;
}

View File

@ -2,6 +2,7 @@
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:marianum_mobile/model/timetable/endpointData.dart';
import 'package:url_launcher/url_launcher_string.dart';
import '../../../api/marianumcloud/talk/chat/getChatResponse.dart';
@ -48,7 +49,7 @@ class ChatMessage {
placeholder: (context, url) {
return const Padding(padding: EdgeInsets.all(10), child: CircularProgressIndicator());
},
imageUrl: "https://cloud.marianum-fulda.de/core/preview?fileId=${file!.id}&x=100&y=-1&a=1",
imageUrl: "https://${EndpointData().nextcloud().full()}/core/preview?fileId=${file!.id}&x=100&y=-1&a=1",
httpHeaders: {
"Authorization": "Basic ${AccountData().buildHttpAuthString()}"
},

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:jiffy/jiffy.dart';
import 'package:marianum_mobile/model/timetable/endpointData.dart';
import 'package:persistent_bottom_nav_bar/persistent_tab_view.dart';
import 'package:shared_preferences/shared_preferences.dart';
@ -48,7 +49,7 @@ class _ChatTileState extends State<ChatTile> {
@override
Widget build(BuildContext context) {
CircleAvatar circleAvatar = CircleAvatar(
foregroundImage: widget.data.type == GetRoomResponseObjectConversationType.oneToOne ? Image.network("https://cloud.marianum-fulda.de/avatar/${widget.data.name}/128").image : null,
foregroundImage: widget.data.type == GetRoomResponseObjectConversationType.oneToOne ? Image.network("https://${EndpointData().nextcloud().full()}/avatar/${widget.data.name}/128").image : null,
backgroundColor: Theme.of(context).primaryColor,
foregroundColor: Colors.white,
child: widget.data.type == GetRoomResponseObjectConversationType.group ? const Icon(Icons.group) : const Icon(Icons.person),

View File

@ -1,6 +1,7 @@
import 'package:async/async.dart';
import 'package:flutter/material.dart';
import 'package:marianum_mobile/model/timetable/endpointData.dart';
import '../../../api/marianumcloud/autocomplete/autocompleteApi.dart';
import '../../../api/marianumcloud/autocomplete/autocompleteResponse.dart';
@ -62,7 +63,7 @@ class JoinChat extends SearchDelegate<String> {
itemBuilder: (context, index) {
AutocompleteResponseObject object = snapshot.data!.data[index];
CircleAvatar circleAvatar = CircleAvatar(
foregroundImage: Image.network("https://cloud.marianum-fulda.de/avatar/${object.id}/128").image,
foregroundImage: Image.network("https://${EndpointData().nextcloud().full()}/avatar/${object.id}/128").image,
backgroundColor: Theme.of(context).primaryColor,
foregroundColor: Colors.white,
child: const Icon(Icons.person),

View File

@ -31,10 +31,15 @@ class _LoadingSpinnerState extends State<LoadingSpinner> {
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const CircularProgressIndicator(),
Visibility(
visible: !textVisible,
replacement: const Icon(Icons.signal_wifi_connected_no_internet_4_outlined),
child: const CircularProgressIndicator(),
),
const SizedBox(height: 30),
Visibility(
visible: textVisible,
child: const Text("Bist du mit dem Internet verbunden?"),
child: const Text("Etwas scheint nicht zu funktionieren!\nBist du mit dem Internet verbunden?\n\nVersuche die App neuzustarten"),
),
],
),