basic oauth finally but also more dependencies

This commit is contained in:
zoe 2022-06-30 18:57:14 +02:00
parent 4baacc751d
commit f6ea45d0e2
5 changed files with 21 additions and 10 deletions

View file

@ -30,10 +30,13 @@ class App {
} }
} }
Future<http.Response> askKnownServerForAppRegistration() async { Future<http.Response> doOauthFlow() async {
String url = await settings.loadInstanceUrl(); String url = await settings.loadInstanceUrl();
try { try {
return await registerApp(url); http.Response response = await registerApp(url);
print(response.body);
openBrowserForAuthCode(url, App.fromJson(jsonDecode(response.body)));
return response;
} catch (e) { } catch (e) {
return http.Response(jsonEncode({}), 404); return http.Response(jsonEncode({}), 404);
} }
@ -46,7 +49,7 @@ Future<http.Response> registerApp(String baseurl) async {
headers: global.defaultHeaders, headers: global.defaultHeaders,
body: jsonEncode({ body: jsonEncode({
'client_name': global.name, 'client_name': global.name,
'redirect_uris': "urn:ietf:wg:oauth:2.0:oob", 'redirect_uris': "http://localhost:4040",
'scopes': "read write", 'scopes': "read write",
'website': global.website 'website': global.website
})); }));
@ -54,14 +57,14 @@ Future<http.Response> registerApp(String baseurl) async {
} }
void openBrowserForAuthCode(String baseurl, App app) { void openBrowserForAuthCode(String baseurl, App app) {
Uri url = Uri.https( Uri url = Uri(
baseurl, scheme: "https",
path: "$baseurl/oauth/authorize",
// ignore: prefer_interpolation_to_compose_strings // ignore: prefer_interpolation_to_compose_strings
"/oauth/authorize" query: "client_id=" +
"?client_id=" +
app.clientId + app.clientId +
"&scope=read+write" + "&scope=read+write" +
"&redirect_uri=urn:ietf:wg:oauth:2.0:oob" + "&redirect_uri=http://localhost:4040" +
"&response_type=code"); "&response_type=code");
launchUrl(url); launchUrl(url);
} }

View file

@ -1,4 +1,5 @@
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:slothmu/business_logic/auth/oauth.dart';
enum Settings { enum Settings {
instanceUrl, instanceUrl,

View file

@ -125,13 +125,12 @@ class _AuthPageState extends State<AuthPage> {
icon: const Icon(Icons.arrow_back), icon: const Icon(Icons.arrow_back),
label: Text("back-button".i18n())), label: Text("back-button".i18n())),
FutureBuilder<http.Response>( FutureBuilder<http.Response>(
future: oauth.askKnownServerForAppRegistration(), future: oauth.doOauthFlow(),
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.hasError) { if (snapshot.hasError) {
return Text("login-failed-snackbar-text".i18n()); return Text("login-failed-snackbar-text".i18n());
} else if (snapshot.hasData) { } else if (snapshot.hasData) {
if (snapshot.data?.statusCode != null) { if (snapshot.data?.statusCode != null) {
print(snapshot.data?.body);
if (snapshot.data?.statusCode != 200) { if (snapshot.data?.statusCode != 200) {
return Row( return Row(
children: [ children: [

View file

@ -273,6 +273,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.1" version: "2.1.1"
shelf:
dependency: "direct main"
description:
name: shelf
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.1"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter

View file

@ -42,6 +42,7 @@ dependencies:
shared_preferences: ^2.0.15 shared_preferences: ^2.0.15
intl: ^0.17.0 intl: ^0.17.0
url_launcher: ^6.1.4 url_launcher: ^6.1.4
shelf: ^1.3.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test: