add basic oauth methods

This commit is contained in:
zoe 2022-06-28 22:05:24 +02:00
parent 387d58dfa2
commit beaa70fe8b
15 changed files with 351 additions and 9 deletions

View file

@ -0,0 +1,53 @@
import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart';
import '../../global.dart' as global;
class App {
late String clientSecret;
late String clientId;
late String id;
late String name;
late String website;
late String redirectUri;
App(
{required this.clientSecret,
required this.clientId,
required this.id,
required this.name,
required this.website,
required this.redirectUri});
factory App.fromJson(Map<String, dynamic> json) {
return App(
id: json["id"].toString(),
name: json["name"].toString(),
website: json["website"].toString(),
redirectUri: json["redirect_uri"].toString(),
clientId: json["client_id"].toString(),
clientSecret: json["client_secret"].toString());
}
}
Future<http.Response> registerApp(String baseurl) async {
//String url = baseurl Uri."api/v1/apps";
Uri url = Uri.https(baseurl, "/api/v1/apps");
var response = await http.post(url, headers: global.defaultHeaders, body: {
'client_name': global.name,
'redirect_uris': "ietf:wg:oauth:2.0:oob",
'scopes': "read write",
'website': global.website
});
return response;
}
void openBrowserForAuthCode(String baseurl, App app) {
Uri url = Uri.https(
baseurl,
// ignore: prefer_interpolation_to_compose_strings
"/oauth/authorize" +
"?client_id=" +
app.clientId +
"&scope=read+write" +
"&redirect_uri=urn:ietf:wg:oauth:2.0:oob" +
"&response_type=code");
launchUrl(url);
}

9
lib/global.dart Normal file
View file

@ -0,0 +1,9 @@
const String name = "slothmu";
const String version = "v0.1 'not even alpha'";
const String useragent = "$name/$version";
const String website = "https://git.kittycat.homes/zoe/slothmu";
const Map<String, String> defaultHeaders = {
"User-Agent": useragent,
"accept": "application/json",
"Content-Type": "application/json"
};

View file

@ -1,10 +1,15 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:localization/localization.dart'; import 'package:localization/localization.dart';
import 'package:slothmu/partials/main_scaffold.dart'; import 'package:slothmu/partials/main_scaffold.dart';
import 'pages/login.dart'; import 'pages/login.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
void main() => runApp(const Slothmu()); void main() {
Intl.defaultLocale = 'en_US';
runApp(const Slothmu());
}
class Slothmu extends StatefulWidget { class Slothmu extends StatefulWidget {
const Slothmu({Key? key}) : super(key: key); const Slothmu({Key? key}) : super(key: key);
@ -14,15 +19,15 @@ class Slothmu extends StatefulWidget {
} }
class _SlothmuState extends State<Slothmu> { class _SlothmuState extends State<Slothmu> {
List<Locale> supported = const [
Locale("en", "US"),
Locale("de", "DE"),
];
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
LocalJsonLocalization.delegate.directories = ['lib/i18n']; LocalJsonLocalization.delegate.directories = ['lib/i18n'];
return MaterialApp( return MaterialApp(
supportedLocales: const [ supportedLocales: supported,
Locale("en", "US"),
Locale("de", "DE"),
],
locale: const Locale("de", "DE"),
localizationsDelegates: [ localizationsDelegates: [
GlobalCupertinoLocalizations.delegate, GlobalCupertinoLocalizations.delegate,
GlobalWidgetsLocalizations.delegate, GlobalWidgetsLocalizations.delegate,

View file

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:slothmu/api/user.dart'; import 'package:slothmu/business_logic/user.dart';
import 'package:localization/localization.dart'; import 'package:localization/localization.dart';
import '../business_logic/auth/oauth.dart' as oauth;
class Login extends StatefulWidget { class Login extends StatefulWidget {
const Login({Key? key}) : super(key: key); const Login({Key? key}) : super(key: key);
@ -64,6 +65,13 @@ class _LoginFormState extends State<LoginForm> {
if (!isValid) { if (!isValid) {
ScaffoldMessenger.of(context).showSnackBar(SnackBar( ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text("login-failed-snackbar-text".i18n()))); content: Text("login-failed-snackbar-text".i18n())));
} else {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
const AuthPage(baseurl: "kittycat.homes"),
));
} }
}, },
icon: const Icon(Icons.login), icon: const Icon(Icons.login),
@ -73,3 +81,21 @@ class _LoginFormState extends State<LoginForm> {
); );
} }
} }
class AuthPage extends StatefulWidget {
const AuthPage({Key? key, required String baseurl}) : super(key: key);
@override
State<AuthPage> createState() => _AuthPageState();
}
class _AuthPageState extends State<AuthPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text("hello"),
),
);
}
}

View file

@ -6,6 +6,10 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <url_launcher_linux/url_launcher_plugin.h>
void fl_register_plugins(FlPluginRegistry* registry) { void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
} }

View file

@ -3,6 +3,7 @@
# #
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
url_launcher_linux
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST

View file

@ -5,6 +5,12 @@
import FlutterMacOS import FlutterMacOS
import Foundation import Foundation
import path_provider_macos
import shared_preferences_macos
import url_launcher_macos
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
} }

View file

@ -57,6 +57,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.0" version: "1.3.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.2"
flutter: flutter:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
@ -79,6 +93,11 @@ packages:
description: flutter description: flutter
source: sdk source: sdk
version: "0.0.0" version: "0.0.0"
flutter_web_plugins:
dependency: transitive
description: flutter
source: sdk
version: "0.0.0"
http: http:
dependency: "direct main" dependency: "direct main"
description: description:
@ -94,12 +113,19 @@ packages:
source: hosted source: hosted
version: "4.0.1" version: "4.0.1"
intl: intl:
dependency: transitive dependency: "direct main"
description: description:
name: intl name: intl
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "0.17.0" version: "0.17.0"
js:
dependency: transitive
description:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.4"
lints: lints:
dependency: transitive dependency: transitive
description: description:
@ -114,6 +140,13 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.0" version: "2.1.0"
localstorage:
dependency: "direct main"
description:
name: localstorage
url: "https://pub.dartlang.org"
source: hosted
version: "4.0.0+1"
matcher: matcher:
dependency: transitive dependency: transitive
description: description:
@ -142,6 +175,76 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.8.1" version: "1.8.1"
path_provider:
dependency: transitive
description:
name: path_provider
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.11"
path_provider_android:
dependency: transitive
description:
name: path_provider_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.16"
path_provider_ios:
dependency: transitive
description:
name: path_provider_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.10"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.7"
path_provider_macos:
dependency: transitive
description:
name: path_provider_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.6"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.4"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.2"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.4"
settings_ui: settings_ui:
dependency: "direct main" dependency: "direct main"
description: description:
@ -149,6 +252,62 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.0.2" version: "2.0.2"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.15"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.12"
shared_preferences_ios:
dependency: transitive
description:
name: shared_preferences_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.4"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.4"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
sky_engine: sky_engine:
dependency: transitive dependency: transitive
description: flutter description: flutter
@ -203,6 +362,62 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "1.3.1" version: "1.3.1"
url_launcher:
dependency: "direct main"
description:
name: url_launcher
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.4"
url_launcher_android:
dependency: transitive
description:
name: url_launcher_android
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.17"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
url: "https://pub.dartlang.org"
source: hosted
version: "6.0.17"
url_launcher_linux:
dependency: transitive
description:
name: url_launcher_linux
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
url_launcher_macos:
dependency: transitive
description:
name: url_launcher_macos
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
url_launcher_platform_interface:
dependency: transitive
description:
name: url_launcher_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
url_launcher_web:
dependency: transitive
description:
name: url_launcher_web
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.12"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.1"
vector_math: vector_math:
dependency: transitive dependency: transitive
description: description:
@ -210,5 +425,20 @@ packages:
url: "https://pub.dartlang.org" url: "https://pub.dartlang.org"
source: hosted source: hosted
version: "2.1.2" version: "2.1.2"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.7.0"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.2.0+1"
sdks: sdks:
dart: ">=2.17.3 <3.0.0" dart: ">=2.17.3 <3.0.0"
flutter: ">=3.0.0"

View file

@ -39,6 +39,10 @@ dependencies:
settings_ui: ^2.0.2 settings_ui: ^2.0.2
http: ^0.13.4 http: ^0.13.4
localization: ^2.1.0 localization: ^2.1.0
shared_preferences: ^2.0.15
intl: ^0.17.0
url_launcher: ^6.1.4
localstorage: ^4.0.0+1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

View file

@ -1,5 +1,5 @@
import 'package:flutter_test/flutter_test.dart'; import 'package:flutter_test/flutter_test.dart';
import 'package:slothmu/api/user.dart'; import 'package:slothmu/business_logic/user.dart';
void main() { void main() {
validUsernameTest(); validUsernameTest();

View file

@ -6,6 +6,9 @@
#include "generated_plugin_registrant.h" #include "generated_plugin_registrant.h"
#include <url_launcher_windows/url_launcher_windows.h>
void RegisterPlugins(flutter::PluginRegistry* registry) { void RegisterPlugins(flutter::PluginRegistry* registry) {
UrlLauncherWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
} }

View file

@ -3,6 +3,7 @@
# #
list(APPEND FLUTTER_PLUGIN_LIST list(APPEND FLUTTER_PLUGIN_LIST
url_launcher_windows
) )
list(APPEND FLUTTER_FFI_PLUGIN_LIST list(APPEND FLUTTER_FFI_PLUGIN_LIST