diff --git a/lib/business_logic/auth/oauth.dart b/lib/business_logic/auth/oauth.dart index f9e0a7b..e3c90d3 100644 --- a/lib/business_logic/auth/oauth.dart +++ b/lib/business_logic/auth/oauth.dart @@ -36,7 +36,7 @@ Response readAuthcode(Request request) { Map params = request.url.queryParameters; if (params.containsKey("code") && params["code"] != null) { String code = params["code"].toString(); - print(code); + settings.saveAuthCode(code); } return Response(200, body: @@ -51,16 +51,28 @@ Future handleFullOauth() async { return response.statusCode; } + await settings.saveAuthCode(""); var handler = const Pipeline().addHandler(readAuthcode); var server = await shelf_io.serve(handler, 'localhost', 1312); server.idleTimeout = const Duration(minutes: 5); - server.autoCompress = true; + await pollCode(); + server.close(); return 200; } catch (e) { return 400; } } +Future pollCode() async { + String code = ""; + while (code == "") { + await Future.delayed(const Duration(seconds: 3)); + code = await settings.loadAuthCode(); + } + print(code); + return code; +} + Future doOauthFlow() async { String url = await settings.loadInstanceUrl(); try { diff --git a/lib/business_logic/settings.dart b/lib/business_logic/settings.dart index 6cefc4a..60f5540 100644 --- a/lib/business_logic/settings.dart +++ b/lib/business_logic/settings.dart @@ -12,7 +12,7 @@ void saveSetting(Settings setting, dynamic value) async { Future saveInstanceUrl(String url) async { final prefs = await SharedPreferences.getInstance(); - return prefs.setString("instance-url", url); + return await prefs.setString("instance-url", url); } Future loadInstanceUrl() async { @@ -27,5 +27,19 @@ Future loadInstanceUrl() async { Future saveUsername(String username) async { final prefs = await SharedPreferences.getInstance(); - return prefs.setString("username", username); + return await prefs.setString("username", username); +} + +Future saveAuthCode(String code) async { + final prefs = await SharedPreferences.getInstance(); + return await prefs.setString("authcode", code); +} + +Future loadAuthCode() async { + final prefs = await SharedPreferences.getInstance(); + String? code = prefs.getString("authcode"); + if (code == null) { + return ""; + } + return code; } diff --git a/test/user/regex_test.dart b/test/user/regex_test.dart new file mode 100644 index 0000000..98a773b --- /dev/null +++ b/test/user/regex_test.dart @@ -0,0 +1,11 @@ +import 'package:flutter_test/flutter_test.dart'; + +void main() { + matchWords(); +} + +void matchWords() { + test("try matching some words", () { + expect(RegExp(r"tiger").hasMatch("tigerfucker"), true); + }); +}